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

Feat/allow program list with all taxref #430

Open
wants to merge 48 commits into
base: dev
Choose a base branch
from

Conversation

andriacap
Copy link

@andriacap andriacap commented Dec 5, 2024

Cette PR fait référence à la suppression de la limite des 100 taxons, plus précisémment autoriser des programmes dans citizen avec tout taxref.

Voici l'ensemble des changements proposés dans cette PR :

  • Backend :

    • Mise en compatibilité avec Taxhub V2
      • Utilisation de la route taxref à la place de bibnoms
    • Suppression toutes les références de taxhub_full_lists (liste qui était mis en cache coté backend).
    • Ajout des routes pour obtenir les types de médias et les attributs bib.
    • Ajout des paramètres à la route "get_lists" afin d'utiliser une liste de cd_nom en tant que paramètres de requête.
    • Modification de la docstring pour la fonction "get_lists".
    • Ajout une fonction "set_taxa_info_from_taxhub" pour ajouter des informations de taxhub (taxref et médias) aux nouvelles observations (newobs).
  • Frontend :

    • Ajout d'un composant de recherche avec autocomplétion en appelant la route taxhub allnamebylist
    • Ajout globalCacheService pour obtenir et définir les types de médias et les attributs bib.
    • Ajout des appels aux routes API dans taxhubService pour obtenir les Médias et les BibAttributs et utilisation de loadAndCacheData pour utiliser globalCacheService basé sur la réponse de la route API appelée.
    • Ajout d'une interface pour utiliser les types autant que possible.
    • Ajout d'une méthode this._taxhubService.setMediasAndAttributs afin de filtrer les médias (photo, photo principale et photo citoyen) et de filtrer sur l'attribut "nom_francais".
    • Mise en commentaires de l'ancien code "Autocomplete" (à supprimer une fois validé)
    • Utilisation de la méthode de filtrage du service : this._taxhubService.filterMediasTaxhub dans l'étape "congrats" pour utiliser le premier médias de type valide si aucune photo n'a été ajouté à l'observation
    • Utilisation d'une méthode "getPreferredName" pour pouvoir enregistrer la bonne valeur dans la propriété "name" des observations et afficher cette valeur dans la liste des observations d'un programme.
  • Global :

    • Ajout des commentaires à toutes les références qui semblent être inutiles désormais. (voir commentaires commençant par : TODO: [LIMIT100-TAXON-COMPAT-THV2] )
    • AJout d'un nom de branch alembic

Toutes les issues et PR qui sont liées à ce sujet :

- Change api
- Add branch label to use flask db status
- WIP: fix error on types medias

Reviewed-by: andriacap
- Comment method axhub_rest_get_taxon no more used
- Use function to format response from taxref
- Apply black
- Add todos and notes to explain code / comments

Reviewed-by: andriacap
- Adapt code where taxhub_full_list is called
-> change route
-> change information to display in frontend
based on length of programm list and information
stored (name, medias)
-> Rename taxonomy component for research autocomplete research

Reviewed-by: andriacap
- Change way to sort Species
- Add detect refresh observations for observedSpecies
- Add load medias when post new obs in order to get images from new obs
- Refact to get photoUrl to display in list observations

Reviewed-by: andriacap
Reviewed-by: andriacap
- Change path default image
- Change name displayed for added obs

Reviewed-by: andriacap
- Use label priorities
- Fix problem that preferred is called twice

Reviewed-by: andriacap
-Backend
	- Remove all references of taxhub_full_lists (list in cache backend)
	- Add routes to get medias types and bibattributs
	- Add params to route "get_lists" in order to use query params list of cd_nom
	- Change docstring for "get_lists"
	- Add function "set_taxa_info_from_taxhub" to add information taxhub (taxref and medias) to newobs

- Frontend:
	- Add globalCacheService to get and set medias types and bibattributs
	- Add api route in taxhubService to get Medias and BibAttributs and loadAndCacheData to use globalCacheService based on return of api route called
	- Add interface to use typing as much as possible
	- Add call to this._taxhubService.setMediasAndAttributs in order to filter on medias (photo, photo principale and photo citizen) and to filter on attribut "nom_français"
	- Comment old "Autocomplete" code
	- Use filtered method service : this._taxhubService.filterMediasTaxhub in step of "congrats" in order to use first photo, if not medias taxhub
- Global:
	- Add comments to all references seems to be useless now

Reviewed-by: andriacap
@andriacap andriacap force-pushed the feat/allow-program-list-with-all-taxref branch from a92ecce to 6d73eff Compare December 10, 2024 16:17
@andriacap andriacap marked this pull request as ready for review December 10, 2024 16:52
@hypsug0
Copy link
Collaborator

hypsug0 commented Dec 15, 2024

@andriacap , pourras-tu compléter le fichier docs/CHANGELOG.md avec notamment les prérequis et changements (si nécessaire) à apporter pour cette montée en version ? Merci!

- use relative path to import in frontend
- Use Taxon interface instead of TaxonBase

Reviewed-by: andriacap
@andriacap
Copy link
Author

Yes je vais le compléter !

else:
taxon_list_data = None

features_with_taxhub_info = set_taxa_info_from_taxhub(taxon_list_data, features)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

set_taxa_info_from_taxhub attends un dictionnaire une clé "items", hors, taxon_list_data peut être null, notamment si l'on a pas d'observations (après création d'un programme vierge par exemple)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Normalement ici on est dans le cas d'un post avec le "commit" en base de données qui est fait juste avant . On est pas censé avoir un programme vierge . Par contre autre question est ce qu'on peut avoir un programme sans list taxonomique ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

traité

réponse à la question:

  • si programme via l'interface: pas possible
  • si via la bdd: possible

<!-- TAXON SELECT -->
<div class="row">
<div class="row" *ngIf="!loading">
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maintenant que le nom_francais de bib_noms n'existe plus, il est plus probable de se retrouver avec des taxons sans attribut nom francais ni nom vernaculaire officiel taxref. Ces taxons n'ont alors plus de nom dans citizen (vide total). Il faut réadapter les règles avec affichage par ordre de priorité:

  1. Attribut nom_francais (si attribut existe) > fait
  2. Nom vern (1ère valeur éclatée par les virgules?) > fait
  3. Nom scientifique. > manquant

cf. lignes avec:

!!s.nom_francais ? s.nom_francais : s.taxref.nom_vern

image

Copy link
Author

@andriacap andriacap Dec 17, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok voir méthode getPreferredName que j'ai mis en place pour que j'utilise dans l'autocomplete pour la sauvegarde du "name" en BDD. (je peux changer l'ordre et enlever des champs si non nécessaire)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

traité

frontend/src/app/api/taxhub.service.ts Outdated Show resolved Hide resolved
// ** Pour changer la valeur affichée */
@Input() displayedLabel = 'nom_vern';
/** Afficher ou non les filtres par regne et groupe INPN qui controle l'autocomplétion */
@Input() displayAdvancedFilters = false;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment rendre activable/désactivable cette propriété displayAdvancedFilters (désactivée par défaut)? Cette propriété n'est pas utilisée dans l'appel du composant depuis le formulaire.

Je dirait qu'il y a un travail d'UX à affiner sur l'affichage et l'ergonomie (bouton d'activation en dessous, champs de préfiltrage au dessus). Quand au champ de recherche en autocomplete, je le verrai bien avec la largeur complète de la modal, comme le select de la liste de plus courte.

Quand on cache ces champs supplémentaires de recherche, ils restent quand même utilisés pour le filtrage de la recherche. Il faudrait vider leurs valeurs dans l'appel d'API.

image

mise en forme avec le select
Screenshot 2024-12-17 at 00-41-28 GeoNature-citizen - Liste courte

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Les champs supplémentaires Règne et Groupe sont effectivement désactivables et pas souhaitables il me semble . Vu que je m'étais appuyé sur le composant existant présent dans GeoNature il y avait ces options d'embarquées. Mais je peux les supprimés étant donné que ce n'était pas demandé dans les développements

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oui, selon moi ces filtres sont superflus et compliquent l'interface et sa compréhension.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

traité

"taxref": {
"cd_nom": item.get("cd_nom"),
"cd_ref": item.get("cd_ref"),
"cd_sup": item.get("cd_sup"),
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ne peux-t-on pas réduire ce dictionnaire au strict nécessaire ? beaucoup de champs peuvent sauter
(cd_sup, cd_taxsup, id_rang, id_statut, lb_auteur, tribu, url, ordre, classe, regne, etc.)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pour moi en tant que dev je suis ce qui est souhaité niveau métier . S'il y a consensus sur le fait de ne pas avoir besoin de tout ces champs , je réduis au nombre souhaité (il faut être sur que ce n'est pas appelé ailleurs , synthèse de citizen ? fiche détails ? autre part ?) .

J'avais mis cette NOTE d'ailleurs

https://github.com/naturalsolutions/GeoNature-citizen/blob/6906ac17c329a0f5385782477b1ab6175ee217fc/backend/gncitizen/utils/taxonomy.py#L183

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

traité

c'est une piste d'optimisation. Les champs sont utilisés à différents endroits de l'appli, notamment la synthèse. Il nous semble plus judicieux de faire cette modif, si nécessaire, dans un second temps.

except Exception as e:
return {"message": str(e)}, 400


@taxo_api.route("/taxonomy/tmedias/types", methods=["GET"])
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C'est donc pas exclusivement géré côté frontend ?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ce sont uniquement la définition des routes qui sont coté backend . Ca permet de garder une homogénéité dans la gestion des routes API (notamment pour le renvoi des erreurs) . Par contre , les modifications n'utilisent plus la mise en cache coté backend (ce qui était le cas pour les taxhub_list) . Ce qui a été dit lors de la réunion, proposé et expliqué par Amandine c'était d'avoir une mise en cache des types de médias et attributs coté frontend (et c'est le cas dans la PR , voir le globalCacheService) .

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

traité

except Exception as e:
return {"message": str(e)}, 400

@taxo_api.route("/taxonomy/bibattributs", methods=["GET"])
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C'est donc pas exclusivement géré côté frontend ?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ce sont uniquement la définition des routes qui sont coté backend . Ca permet de garder une homogénéité dans la gestion des routes API (notamment pour le renvoi des erreurs) . Par contre , les modifications n'utilisent plus la mise en cache coté backend (ce qui était le cas pour les taxhub_list) . Ce qui a été dit lors de la réunion, proposé et expliqué par Amandine c'était d'avoir une mise en cache des types de médias et attributs coté frontend (et c'est le cas dans la PR , voir le globalCacheService) .

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

traité

@taxo_api.route("/taxonomy/refresh", methods=["GET"])
@json_resp
def refresh():
lists = refresh_taxonlist()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Attention, le rafraichissement des listes taxhub (juste la liste des listes) se fait avec cette API.

image

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok donc s'il y a seulement ça qui est utilisé : taxhub_lists , je dois enlever juste cette partie :

https://github.com/naturalsolutions/GeoNature-citizen/blob/6906ac17c329a0f5385782477b1ab6175ee217fc/backend/gncitizen/utils/taxonomy.py#L129-L137

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

traité

- Replace nom_francais / nom_vern by "name" property

Reviewed-by: andriac
Use getPreferredName method everywhere needs to
display taxon name .
Use click event in select in order to update cd_nom
control form

Reviewed-by: andriacap
@andriacap andriacap force-pushed the feat/allow-program-list-with-all-taxref branch from cfa986b to 6d7c90b Compare December 18, 2024 09:41
Reviewed-by: andriacap
- Refactored route all_observations to manage empty taxhub_list.

Reviewed-by: andriacap
- Remove unused code according to list taxhub loaded in backend
- Keep /refresh route to allow taxhub to refresh its list of taxref
calling 'biblistes' API route.

Reviewed-by: andriacap
- Increase limit of 100 for the route /taxonomy/list (before it was 5)

Reviewed-by: andriacap
- First call infos for allprograms list to get
count taxon in program taxhub list
- Then call route api to get species list with cd_nom
in order to get medias and attributes (in case of taxaCount < taxaAutocompleteThreshold)

Reviewed-by: andriacap
Remove code references to old way for autocomplete

Reviewed-by: andriacap
- Add a new feature to allow program list with all taxref
- WIP: need to precise version number

Reviewed-by: andriacap
@andriacap
Copy link
Author

@andriacap , pourras-tu compléter le fichier docs/CHANGELOG.md avec notamment les prérequis et changements (si nécessaire) à apporter pour cette montée en version ? Merci!

C'est bon j'ai ajouté les changelog. Je rédige pas souvent de changelog , j'ai essayé de me baser sur les autres notes de version qui ont été faite sur citizen.
Ne pas hésiter à proposer des modifications

docs/CHANGELOG.md Outdated Show resolved Hide resolved
docs/CHANGELOG.md Outdated Show resolved Hide resolved
docs/CHANGELOG.md Outdated Show resolved Hide resolved
docs/CHANGELOG.md Outdated Show resolved Hide resolved
docs/CHANGELOG.md Outdated Show resolved Hide resolved
docs/CHANGELOG.md Outdated Show resolved Hide resolved
docs/CHANGELOG.md Outdated Show resolved Hide resolved
docs/CHANGELOG.md Outdated Show resolved Hide resolved
edelclaux and others added 25 commits January 14, 2025 16:52
Co-authored-by: Camille Monchicourt <camille.monchicourt@ecrins-parcnational.fr>
Co-authored-by: Camille Monchicourt <camille.monchicourt@ecrins-parcnational.fr>
Co-authored-by: Camille Monchicourt <camille.monchicourt@ecrins-parcnational.fr>
Co-authored-by: Camille Monchicourt <camille.monchicourt@ecrins-parcnational.fr>
Co-authored-by: Camille Monchicourt <camille.monchicourt@ecrins-parcnational.fr>
Co-authored-by: Camille Monchicourt <camille.monchicourt@ecrins-parcnational.fr>
Co-authored-by: Camille Monchicourt <camille.monchicourt@ecrins-parcnational.fr>
Co-authored-by: Camille Monchicourt <camille.monchicourt@ecrins-parcnational.fr>
- need to change way to call getrPreferredName

Reviewd-by: andriacap
Reviewed-by: andriacap
Reviewed-by: andriacap
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

Successfully merging this pull request may close these issues.

4 participants