Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

help! problème sur les attributs dans la route taxoninfo #235

Closed
jbdesbas opened this issue Jul 29, 2020 · 3 comments
Closed

help! problème sur les attributs dans la route taxoninfo #235

jbdesbas opened this issue Jul 29, 2020 · 3 comments

Comments

@jbdesbas
Copy link
Contributor

Bonjour,

J'ai un souci dont je ne parvient pas à trouver l'origine :
La route taxoninfo ne retourne pas d'attributs quand ceux-ci sont spécifiés dans la requête (ce que fait la Synthèse de GN).

Exemple :
https://taxhub.clicnat.fr/api/bibnoms/taxoninfo/60418 --> retourne bien les attributs ✔️
https://taxhub.clicnat.fr/api/bibnoms/taxoninfo/60418?id_attribut=200 --> Ne retourne aucun attribut 🚫
https://taxhub.clicnat.fr/api/bibnoms/taxoninfo/60418?id_theme=2 --> retourne bien les attributs du theme 2 ✔️

J'imagine que le souci vient de par ici, mais je ne vois pas ce qui peut poser problème.

# A out des attributs
obj["attributs"] = []
q = db.session.query(CorTaxonAttribut).filter_by(cd_ref=cd_ref)
join_on_bib_attr = False
if "id_theme" in params:
q = q.join(
BibAttributs, BibAttributs.id_attribut == CorTaxonAttribut.id_attribut
).filter(BibAttributs.id_theme.in_(params["id_theme"]))
join_on_bib_attr = True
if "id_attribut" in params:
if not join_on_bib_attr:
q = q.join(
BibAttributs, BibAttributs.id_attribut == CorTaxonAttribut.id_attribut
)
q = q.filter(BibAttributs.id_attribut.in_(params["id_attribut"]))

Pas de problème constaté sur l'instance de démo. J'ai vérifier les versions des dépendances python, le contenu des tables (notamment le cd_ref de la table cor_taxon_attribut). Mystère mystère.. Je suis sur la 1.7.2
Est-ce que quelqu'un à une idée par hasard ? Ou connaît la requête qui est exécutée pour que je vois ce que ça donne en direct sur la base ?

@jbdesbas jbdesbas changed the title problème sur les attributs dans la route taxoninfo help! problème sur les attributs dans la route taxoninfo Jul 29, 2020
@TheoLechemia
Copy link
Member

Salut,

Je ne vois pas trop d'ou ça peut venir.
Est-ce que tu peux ajouter une trace de la requête exécutée, en ajoutant un logger.error(q) après cette ligne:

bibAttr = q.all()

Tu restart le supervisor et tu regarde le fichier taxhub/var/log/taxhub_errors.log

@jbdesbas
Copy link
Contributor Author

Salut Théo, merci pour ton aide.
Problème identifié grâce au log de la requête SQL : le souci vient du traitement des paramètres de la requête HTTP par flask. Le paramètre id_attribut n'est pas traité comme une liste, et donc la requête SQL ajoute un filtre foireux : AND taxonomie.bib_attributs.id_attribut IN ('2','0',0') (au lieu de 200). Si plusieurs id_attribut sont indiqué dans la requête HTTP, seul le premier est pris en compte.

Le problème peut être résolu en remplaçant la ligne suivante :

q = q.filter(BibAttributs.id_attribut.in_(params["id_attribut"]))

par q = q.filter(BibAttributs.id_attribut.in_( request.args.getlist("id_attribut") ) )

Mais l'origine du problème vient de

params = dict(request.args)

logger.error(request.args) --> ImmutableMultiDict([('id_attribut', '200'), ('id_attribut', '201')])
logger.error(dict(request.args)) --> {'id_attribut': '200'}
(Python 3.7.3, Flask 1.1.1)

Je ne sais pas trop pourquoi ca ne pose pas de problème sur les autres instances (version de Python ?). Je propose une PR ?

@TheoLechemia
Copy link
Member

Bien vu merci.
C'est un problème lié à la version de python. On a pas le même comportement en python < 3.7 .
Encore une bonne raison de fixer la version de python.
Oui je veux bien que tu proposes la PR.
Merci !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants