ecolabdata / ckanext-ecospheres

GNU Affero General Public License v3.0
3 stars 0 forks source link

ERROR [ckan.views.api] 'NoneType' object is not iterable #28

Open streino opened 1 year ago

streino commented 1 year ago

Une requête sur https://integration.data.e2.rie.gouv.fr/api/action/package_search contenant :

{
    "fq": "+dataset_type:harvest",
    "fl": "id,name",
    "start": 0,
    "rows": 10
}

Provoque un 500 avec le log suivant :

2023-06-20 15:19:44,132 ERROR [ckan.views.api] 'NoneType' object is not iterable
Traceback (most recent call last):
  File "/srv/app/src/ckan/ckan/config/middleware/../../views/api.py", line 293, in action
    result = function(context, request_data)
  File "/srv/app/src/ckan/ckan/logic/__init__.py", line 504, in wrapped
    result = _action(context, data_dict, **kw)
  File "/srv/app/src/ckan/ckan/logic/action/get.py", line 1961, in package_search
    search_results = item.after_search(search_results, data_dict)
  File "/srv/app/src/ckanext-ecospheres/ckanext/ecospheres/dcat/plugin.py", line 272, in after_search
    for resource in _dict_resources:
TypeError: 'NoneType' object is not iterable

Si on retire le paramètre fl, la requête passe.

alhyss commented 1 year ago

D'une manière générale, ce que fait cette méthode ecospheres.dcat.plugin.DcatFrenchPlugin.after_search est douteux... Mais il suffit pour ne plus avoir de plantage de remplacer ça :

            _dict_resources = _dict.get('resources')

par ça (ou équivalent) :

            _dict_resources = _dict.get('resources', [])

https://github.com/ecolabdata/ckanext-ecospheres/blob/7895d43b00864f623aee6dda23637717258ee5ea/ckanext/ecospheres/dcat/plugin.py#LL391

Est-ce que c'est beaucoup plus long de faire cette correction-là et de la répercuter sur intégration ?

J'ai un peu envie de conserver fl - sous réserve qu'il fonctionne, ce qui nécessite sans doute de corriger sa syntaxe. Ça représente tout de même beaucoup de champs en moins sur beaucoup de jeux de données, non ?