From 0926f97544977b2392502944f020227bc4b08d7a Mon Sep 17 00:00:00 2001 From: UlrichB22 <97119703+UlrichB22@users.noreply.github.com> Date: Thu, 6 Mar 2025 17:07:01 +0100 Subject: [PATCH] Fix handling of namespace root items in +misc/sitemap --- src/moin/apps/misc/views.py | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/moin/apps/misc/views.py b/src/moin/apps/misc/views.py index 48a63bc47..e69079789 100644 --- a/src/moin/apps/misc/views.py +++ b/src/moin/apps/misc/views.py @@ -1,4 +1,5 @@ # Copyright: 2010 MoinMoin:ThomasWaldmann +# Copyright: 2025 MoinMoin:UlrichB # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. """ @@ -17,37 +18,46 @@ from moin.apps.misc import misc -from moin.constants.keys import MTIME, NAME_EXACT, NAMESPACE +from moin.constants.keys import MTIME, NAME_EXACT, NAMESPACE, NAME from moin.themes import render_template +from moin.utils.interwiki import CompositeName @misc.route("/sitemap") def sitemap(): """ - Google (and others) XML sitemap + XML sitemap for search engines + see https://www.sitemaps.org for usage details """ def format_timestamp(t): tm = time.gmtime(t) return time.strftime("%Y-%m-%dT%H:%M:%S+00:00", tm) - sitemap = [] - for rev in flaskg.storage.documents(wikiname=app.cfg.interwikiname): - fqnames = rev.fqnames - mtime = rev.meta[MTIME] - # these are the content items: - changefreq = "daily" - priority = "0.5" - sitemap += [(fqname, format_timestamp(mtime), changefreq, priority) for fqname in fqnames] - # add entries for root urls + # get names for root urls + root_fqnames = [] root_mapping = [ (namespace, app.cfg.root_mapping.get(namespace, app.cfg.default_root)) for namespace, _ in app.cfg.namespace_mapping ] query = Or([And([Term(NAME_EXACT, root), Term(NAMESPACE, namespace)]) for namespace, root in root_mapping]) for rev in flaskg.storage.search(q=query): + root_fqnames.append(CompositeName(rev.meta[NAMESPACE], NAME_EXACT, rev.meta[NAME][0])) + + sitemap = [] + for rev in flaskg.storage.documents(wikiname=app.cfg.interwikiname): + fqnames = rev.fqnames mtime = rev.meta[MTIME] - sitemap.append((rev.meta[NAMESPACE], format_timestamp(mtime), "hourly", "1.0")) + # default for content items: + changefreq = "daily" + priority = "0.5" + for fqname in fqnames: + if fqname in root_fqnames: + # values for root items + changefreq = "hourly" + priority = "1.0" + sitemap.append((fqname, format_timestamp(mtime), changefreq, priority)) + sitemap.sort() content = render_template("misc/sitemap.xml", sitemap=sitemap) return Response(content, mimetype="text/xml")