PnX-SI / gn_module_export

Module GeoNature d'export
GNU General Public License v3.0
7 stars 10 forks source link

[1.5.2] Les Exports CSV non géographiques ne fonctionnent pas #197

Closed maximetoma closed 1 year ago

maximetoma commented 1 year ago

Version GeoNature 2.12.3 Exports 1.5.2

Description du bug Mes exports en CSV me retournent une erreur lors de la réception du mail : "Votre export XXX n'a pas fonctionné correctement." Le fichier est quand même généré mais pèse 0K Les autres formats d'export sauf json fonctionnent cependant...

J'ai testé également via la commande geonature exports generate --format "csv" --user-id "17" 273 et le fichier est bien généré normalement en CSV...

Savez-vous d'où cela peut venir ?

Logs Les logs du worker me donnent :

[2023-08-25 15:24:10,572: INFO/MainProcess] Task gn_module_export.tasks.generate_export[5db0b103-2971-4134-861f-3071218d1d6e] received
[2023-08-25 15:24:10,573: INFO/ForkPoolWorker-8] gn_module_export.tasks.generate_export[5db0b103-2971-4134-861f-3071218d1d6e]: Generate export 273...
[2023-08-25 15:24:10,732: INFO/ForkPoolWorker-8] Send email notification to maxime.toma (maxime.toma@lpo.fr)
[2023-08-25 15:24:10,733: INFO/MainProcess] Task geonature.core.notifications.tasks.send_notification_mail[674de834-5098-4eaf-a8b9-1e3dd79879be] received
[2023-08-25 15:24:10,734: INFO/ForkPoolWorker-9] Launch mail.
[2023-08-25 15:24:10,735: INFO/ForkPoolWorker-8] Send database notification to maxime.toma
[2023-08-25 15:24:10,737: ERROR/ForkPoolWorker-8] Task gn_module_export.tasks.generate_export[5db0b103-2971-4134-861f-3071218d1d6e] raised unexpected: ValueError("Invalid fields for <Schema(many=False)>: {'geom_2154', 'geom_4326', 'geom'}.")
Traceback (most recent call last):
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/celery/app/trace.py", line 451, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/home/geonatureadmin/geonature/backend/geonature/celery_app.py", line 12, in __call__
    return self.run(*args, **kwargs)
  File "/home/geonatureadmin/gn_module_export/backend/gn_module_export/tasks.py", line 62, in generate_export
    export_data_file(export_id, file_name, export_url, format, id_role, filters)
  File "/home/geonatureadmin/gn_module_export/backend/gn_module_export/utils_export.py", line 153, in export_data_file
    raise exp
  File "/home/geonatureadmin/gn_module_export/backend/gn_module_export/utils_export.py", line 140, in export_data_file
    export_as_file(
  File "/home/geonatureadmin/gn_module_export/backend/gn_module_export/utils/export.py", line 29, in export_as_file
    _export_as_file(
  File "/home/geonatureadmin/gn_module_export/backend/gn_module_export/utils/export.py", line 75, in _export_as_file
    func_dict[file_format](
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/utils_flask_sqla_geo/export.py", line 43, in export_csv
    schema = schema_class(only=only or None)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/utils_flask_sqla/schema.py", line 51, in __init__
    super().__init__(*args, **kwargs)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/utils_flask_sqla_geo/schema.py", line 175, in __init__
    super().__init__(*args, only=only, exclude=exclude, **kwargs)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow_sqlalchemy/load_instance_mixin.py", line 45, in __init__
    super().__init__(*args, **kwargs)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow/schema.py", line 404, in __init__
    self._init_fields()
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow/schema.py", line 979, in _init_fields
    raise ValueError(message)
ValueError: Invalid fields for <Schema(many=False)>: {'geom_2154', 'geom_4326', 'geom'}.
[2023-08-25 15:24:11,523: INFO/ForkPoolWorker-9] Task geonature.core.notifications.tasks.send_notification_mail[674de834-5098-4eaf-a8b9-1e3dd79879be] succeeded in 0.7894784398376942s: None
maximetoma commented 1 year ago

update

camillemonchicourt commented 1 year ago

Dans l'erreur, je vois ValueError: Invalid fields for <Schema(many=False)>: {'geom_2154', 'geom_4326', 'geom'}..

Dans la configuration de ton export, tu n'aurais pas renseigné plusieurs champs dans "Nom de champ géométrique" ?

maximetoma commented 1 year ago

Alors j'ai redémarré le service worker maintenant je n'ai plus qu'une colonne en erreur ValueError: Invalid fields for <Schema(many=False)>: {'geom_4326'}. mais le problème c'est que cette colonne n'existe pas de la vue que je veux télécharger et par ailleurs il n'ya aucune géométrie :)

Ci-dessous la ligne de l'export dans t_exports et sur le module Admin

<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">

id | label | schema_name | view_name | desc | geometry_field | geometry_srid | public | id_licence | view_pk_column -- | -- | -- | -- | -- | -- | -- | -- | -- | -- 273 | Tableau de correspondance des Habitats des RN SEP (by Camille DESJARDIN) | ref_habitats | v_sep_corresp_hab | Tableau de correspondance des Habitats des RN SEP (by Camille DESJARDIN) |   |   | FAUX | 3 | id

image

camillemonchicourt commented 1 year ago

OK, je viens de reproduire sur notre production. Cela semble une régression de la refonte du module en 1.5, où on a du zapper un truc sur les exports non géographiques.

J'ai le même soucis sur un export non géographique avec cette erreurs dans les logs du worker :

[2023-08-25 16:58:33,892: ERROR/ForkPoolWorker-7] Task gn_module_export.tasks.generate_export[2fa0547c-23b1-4b26-bd20-6668e1ea7e73] raised unexpected: ValueError("Invalid fields for <Schema(many=False)>: {'geom'}.")
Traceback (most recent call last):
  File "/home/geonatadmin/geonature/backend/venv/lib/python3.9/site-packages/celery/app/trace.py", line 451, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/home/geonatadmin/geonature/backend/venv/lib/python3.9/site-packages/sentry_sdk/integrations/celery.py", line 275, in _inner
    reraise(*exc_info)
  File "/home/geonatadmin/geonature/backend/venv/lib/python3.9/site-packages/sentry_sdk/_compat.py", line 60, in reraise
    raise value
  File "/home/geonatadmin/geonature/backend/venv/lib/python3.9/site-packages/sentry_sdk/integrations/celery.py", line 270, in _inner
    return f(*args, **kwargs)
  File "/home/geonatadmin/geonature/backend/geonature/celery_app.py", line 12, in __call__
    return self.run(*args, **kwargs)
  File "/home/geonatadmin/gn_module_export/backend/gn_module_export/tasks.py", line 62, in generate_export
    export_data_file(export_id, file_name, export_url, format, id_role, filters)
  File "/home/geonatadmin/gn_module_export/backend/gn_module_export/utils_export.py", line 153, in export_data_file
    raise exp
  File "/home/geonatadmin/gn_module_export/backend/gn_module_export/utils_export.py", line 140, in export_data_file
    export_as_file(
  File "/home/geonatadmin/gn_module_export/backend/gn_module_export/utils/export.py", line 29, in export_as_file
    _export_as_file(
  File "/home/geonatadmin/gn_module_export/backend/gn_module_export/utils/export.py", line 75, in _export_as_file
    func_dict[file_format](
  File "/home/geonatadmin/geonature/backend/venv/lib/python3.9/site-packages/utils_flask_sqla_geo/export.py", line 43, in export_csv
    schema = schema_class(only=only or None)
  File "/home/geonatadmin/geonature/backend/venv/lib/python3.9/site-packages/utils_flask_sqla/schema.py", line 51, in __init__
    super().__init__(*args, **kwargs)
  File "/home/geonatadmin/geonature/backend/venv/lib/python3.9/site-packages/utils_flask_sqla_geo/schema.py", line 175, in __init__
    super().__init__(*args, only=only, exclude=exclude, **kwargs)
  File "/home/geonatadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow_sqlalchemy/load_instance_mixin.py", line 45, in __init__
    super().__init__(*args, **kwargs)
  File "/home/geonatadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow/schema.py", line 404, in __init__
    self._init_fields()
  File "/home/geonatadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow/schema.py", line 979, in _init_fields
    raise ValueError(message)
ValueError: Invalid fields for <Schema(many=False)>: {'geom'}.

A investiguer et corriger dans une prochaine version.

amandine-sahl commented 1 year ago

J'ai essayé de reproduire l'erreur mais sans succès ni en developpement ni en version de production

Versions des outils en production

Utils-Flask-SQLAlchemy 0.3.5
Utils-Flask-SQLAlchemy-Geo 0.2.8
gn_module_export 1.5.2
GeoNature 2.12.3
maximetoma commented 1 year ago

@amandine-sahl c'est vraiment curieux... j'ai les mêmes versions que toi

DonovanMaillard commented 1 year ago

C'est pas une question de timeout comme on a vu sur une autre instance pour les API ? Quelles tailles font vos vues ?

maximetoma commented 1 year ago

Dans mon cas c'est assez variable... Mais par exemple j'ai une vue de 309 données sur 13 colonnes

amandine-sahl commented 1 year ago

C'est pas une question de timeout comme on a vu sur une autre instance pour les API ? Quelles tailles font vos vues ?

Justement depuis la version 1.5 il ne doit plus y avoir de problème de timeout, les export sont générés de façon asynchrone.

A mon avis c'est un soucis de version des librairies utils, mais je n'arrive pas à reproduire l'erreur. De plus je ne vois pas pouquoi un même export fonctionne avec la commande generate. Est-ce que le worker geonature à été redémaré après la mise à jour des librairies?

camillemonchicourt commented 1 year ago

Dans notre cas, pas de timeout non plus, c'est un export tout petit. Voir le message d'erreur ci-dessus.

camillemonchicourt commented 1 year ago

ValueError: Invalid fields for <Schema(many=False)>: {'geom'}.

camillemonchicourt commented 1 year ago

Bon, de mon côté sur le serveur de DEMO avec GeoNature 2.13.0 et Export 1.6.0, j'ai créé un export non géographique (SELECT * FROM gn_meta.t_datasets). J'avais la même erreur en tentant de l'exporter depuis l'interface. Puis après avoir redémarré le service geonature et geonature-worker, il fonctionne...

Je vais voir pourquoi on a le soucis sur notre GeoNature de production, si il faut aussi simplement redémarrer les services, ou si c'est un soucis de version.

maximetoma commented 1 year ago

@camillemonchicourt de mon côté, j'ai beau redémarrer les services, ça ne fonctionne malheureusement pas :) Peut-être un pb de comptabilité sur le version 1.5.2 ?

camillemonchicourt commented 1 year ago

@maximetoma, ton soucis est potentiellement celui indiqué ici - https://github.com/PnX-SI/gn_module_export/issues/199

maximetoma commented 1 year ago

@camillemonchicourt @amandine-sahl okay c'était bien ça, ça fonctionne ! merci :D

camillemonchicourt commented 1 year ago

Ahhhh OK ! Bon donc c'était bien une dépendance python qui ne se mettait pas à jour si on met à jour le module Export mais pas GeoNature, comme indiquait Fred. Solutionné en mettant à jour cette dépendance, ou en mettant à jour GeoNature.