""", content_type='text/plain')
-# Sitemap (XML format)
-@cache(hours=6)
-def sitemap(request):
+def _make_sitemap(pagelist):
resp = HttpResponse(content_type='text/xml')
x = PgXmlHelper(resp)
x.startDocument()
x.startElement('urlset', {'xmlns': 'http://www.sitemaps.org/schemas/sitemap/0.9'})
pages = 0
- for p in get_all_pages_struct():
+ for p in pagelist:
pages+=1
x.startElement('url', {})
x.add_xml_element('loc', 'https://www.postgresql.org/%s' % urllib.quote(p[0]))
x.endDocument()
return resp
+# Sitemap (XML format)
+@cache(hours=6)
+def sitemap(request):
+ return _make_sitemap(get_all_pages_struct())
+
+# Internal sitemap (only for our own search engine)
+# Note! Still served up to anybody who wants it, so don't
+# put anything secret in it...
+@cache(hours=6)
+def sitemap_internal(request):
+ return _make_sitemap(get_all_pages_struct(method='get_internal_struct'))
+
# dynamic CSS serving, meaning we merge a number of different CSS into a
# single one, making sure it turns into a single http response. We do this
# dynamically, since the output will be cached.
if version == currentversion.tree:
yield ('docs/current/static/%s' % filename,
1.0, loaded)
+
+# For our internal sitemap (used only by our own search engine),
+# include the devel version of the docs (and only those, since the
+# other versions are already included)
+def get_internal_struct():
+ curs = connection.cursor()
+ curs.execute("SELECT d.file, v.docsloaded FROM docs d INNER JOIN core_version v ON v.tree=d.version WHERE version = 0")
+
+ for filename, loaded in curs.fetchall():
+ yield ('docs/devel/static/%s' % (filename, ),
+ 0.1,
+ loaded)
# Sitemap (FIXME: support for >50k urls!)
###
(r'^sitemap.xml', 'pgweb.core.views.sitemap'),
+ (r'^sitemap_internal.xml', 'pgweb.core.views.sitemap_internal'),
###
# Workaround for broken links pushed in press release
from django.conf import settings
-def get_all_pages_struct():
+def get_all_pages_struct(method='get_struct'):
"""
Return an iterator over all distinct pages on the site.
Each page is returned as a tuple consisting of:
for app in settings.INSTALLED_APPS:
if app.startswith('pgweb.'):
try:
- m = __import__(app+".struct", {}, {}, 'get_struct')
+ m = __import__(app+".struct", {}, {}, method)
except:
# Failed to import - probably module didnd't exist
continue
- for x in m.get_struct(): yield x
+ if hasattr(m, method):
+ for x in getattr(m, method)(): yield x