Bug #55892
geojson: les sources de donnée avec 'features': 'id' font planter l'affichage des listes en cartes.
0%
Description
(Remonté par Brice, pas de ticket lié)
Exception: type = '<class 'KeyError'>', value = ''id'' Stack trace (most recent call first): File "/home/nroche/src/wcs/wcs/data_sources.py", line 684, in get_geojson_data 682 683 for feature in data['features']: > 684 feature['properties']['_id'] = feature['properties'][id_property] 685 try: 686 feature['properties']['_text'] = Template(label_template_property).render( locals: cache_duration = 0 data = ... 'features': [ ... feature = {... 'id2': 'atol2'}, 'id': 'atol1', 'type': 'Feature'} force_url = None id_property = 'id' label_template_property = '{{ name }}' request = <wcs.compat.CompatHTTPRequest object at 0x7f6e92b28af0> self = <NamedDataSource 'merveilles du monde (geojson)' id:31> url = 'https://mensuel.framapad.org/p/boeruk6w19-9ots/export/txt' File "/home/nroche/src/wcs/wcs/api.py", line 1155, in _q_lookup 1153 url = info['url'] 1154 get_response().set_content_type('application/json') > 1155 return json.dumps(data_source.get_geojson_data(force_url=url)) 1156 1157 locals: component = 'merveilles_du_monde_geojson' data_source = <NamedDataSource 'merveilles du monde (geojson)' id:31> self = <wcs.api.GeoJsonDirectory object at 0x7f6e9490da60> url = None
Historique
Mis à jour par Nicolas Roche il y a plus de 2 ans
- url: https://mensuel.framapad.org/p/boeruk6w19-9ots/export/txt
- id: id2
- name: {{ name }}
- j'ajoute un champ liste qui utilise la source de donnée geojson.
- je passe le mode d'affichage en Carte (données géographiques).
Je teste et je vois les items sur la carte, tout fonctionne bien.
Je modifie la configuration de la source de donnée, en retirant l'id (id2).
Sur la backoffice, la source de donnée fonctionne : je vois les items dans l'aperçu.
WCS utilise alors l'id inséré au niveau des features
dans le geojson, comme le signale le commentaire.
# If a Feature has a commonly used identifier, that identifier # SHOULD be included as a member of the Feature object with the # name "id", and the value of this member is either a JSON string # or number. # -- https://tools.ietf.org/html/rfc7946#section-3.2
Je rafraîchis le formulaire et ça plante,
parce qu'à la restitution via api wcs ne va plus chercher l'id que dans properties
.
Je n'ai pas pris le temps d'écrire de test, mais je peux si besoin.
Dans un premier temps voici juste un patch naïf qui permet de contourner le problème.
diff --git a/wcs/data_sources.py b/wcs/data_sources.py index 8988e6d7..5ee4a607 100644 --- a/wcs/data_sources.py +++ b/wcs/data_sources.py @@ -683,3 +683,6 @@ class NamedDataSource(XmlStorableObject): for feature in data['features']: - feature['properties']['_id'] = feature['properties'][id_property] + if id_property == 'id' and 'id' in feature: + feature['properties']['_id'] = feature['id'] + else: + feature['properties']['_id'] = feature['properties'][id_property] try:
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Nouveau à Rejeté
tl;dr, s'il y a quelque chose réécrire un ticket en tenant compte de #55722. Ne pas écrire de roman ne pas proposer de patch.