Skip to content

[Sitemap] Erreur 500 sur /sitemap et /sitemap.xml quand AFFICHAGE_GALERIE_PHOTO = False #817

Description

@4rtefakt

Description

Les trois routes du plan du site — /sitemap, /sitemap.html et /sitemap.xml — renvoient une erreur 500 lorsque le paramètre AFFICHAGE_GALERIE_PHOTO est à False.

La route /photos n'est enregistrée que si la galerie photo est activée (atlas/atlasRoutes.py#L357), mais les deux vues du plan du site construisent son URL sans condition. url_for("main.photos") lève alors une werkzeug.routing.exceptions.BuildError.

Constaté en 2.0.0. Le code est identique sur master (977b294) et develop (3ebf7a1) au moment de l'écriture, et je n'ai pas trouvé d'issue ou de PR ouverte traitant le sujet.

Reproduction

  1. Renseigner AFFICHAGE_GALERIE_PHOTO = False dans config.py
  2. Redémarrer l'application
  3. Ouvrir /sitemap, /sitemap.html ou /sitemap.xml — ou simplement cliquer sur « Plan du site » dans le pied de page

Trace

File "/dist/atlas/atlasRoutes.py", line 385, in sitemap
    [url_for("main.photos", _external=True), ten_days_ago],
...
werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'main.photos'.
Did you mean 'main.robots' instead?

Origine

Les deux fonctionnalités sont correctes prises séparément ; c'est leur combinaison qui n'est pas couverte :

Deux occurrences sont concernées : sitemap() (L385) et sitemap_ui() (L429).

Correctif proposé

Conditionner les deux références comme l'est la route elle-même. Dans sitemap() :

    pages.extend(
        [
            [url_for("main.sitemap", _external=True), ten_days_ago],
            [url_for("main.sitemap_ui", _external=True), ten_days_ago],
            [url_for("main.robots", _external=True), ten_days_ago],
        ]
    )
    if current_app.config["AFFICHAGE_GALERIE_PHOTO"]:
        pages.append([url_for("main.photos", _external=True), ten_days_ago])

Et dans sitemap_ui(), retirer l'entrée photos du dictionnaire initial pour l'ajouter ensuite :

    if current_app.config["AFFICHAGE_GALERIE_PHOTO"]:
        pages["static"]["values"].append(
            {"url": url_for("main.photos"), "label": gettext("photos")}
        )

Ce correctif tourne en production chez nous depuis aujourd'hui : les trois routes répondent en 200 et le sitemap.xml déclare bien 2 419 URLs sans référence à /photos.

Je peux proposer une pull request depuis develop si cela vous convient. Un test couvrant le plan du site avec la galerie désactivée serait probablement utile en complément.

Environnement

  • GeoNature-atlas 2.0.0, installation Docker (ghcr.io/pnx-si/geonature-atlas:2.0.0)
  • Base GeoNature 2.17.1 en source, connectée en FDW
  • PostgreSQL 15 / PostGIS 3.4

Diagnostic et rédaction réalisés avec l'assistance de l'IA (Claude Opus 5, via Claude Code), conformément à la section « Utilisation de l'IA » en préparation dans docs/CONTRIBUTING.md (branche add-ai-requirements-in-contributing). Le correctif a été appliqué, testé et relu sur notre instance avant publication.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions