Development #64853
statistiques : les références aux services ne sont plus toujours des références au modèle Service
Début:
04 mai 2022
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Non
Description
Cf. #64850
Dans la ligne suivante :
content_type_id, instance_pk = n_2_pairing_rev(reference_id) if content_type_id == service_ct_id: reference_label = reference_labels.get(instance_pk)
content_type_id peut parfois être l'id du modèle ContentType pour OIDCClient ou LibertyProvider, qui sont bien des sous-classes de Service mais le code n'est pas capable de le comprendre.
Le plus simple serait de passer directement par data__service_name
pour faire effectuer le travail d'aggrégation par postgres.
Fichiers
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a presque 2 ans
- Fichier 0001-api-fix-aggregation-by-service-in-statistics-64853.patch 0001-api-fix-aggregation-by-service-in-statistics-64853.patch ajouté
- Tracker changé de Bug à Development
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Benjamin Dauvergne il y a presque 2 ans
Plusieurs changements :
- l'agrégation pour les service se fait sur 'data__service_name' plutôt que sur 'reference_ids' avec ensuite un traitement en python
- les valeurs pour l'axe Y sont désormais triés (par Statistics.to_json)
- toutes les valeurs possibles pour l'axe Y sont représentées (via Statistics.set_y_labels()) même si la requête SQL ne retourne rien (on voit quand un service est à zéro)
- la valeur absente (None) est gérée directement par Statistics.to_json() et est mise toujours en première
Mis à jour par Emmanuel Cazenave il y a presque 2 ans
Je ne comprends pas la forme suivante, plutôt le slice à droite ?
self.y_labels[:] = y_labels
Mis à jour par Benjamin Dauvergne il y a presque 2 ans
Emmanuel Cazenave a écrit :
Je ne comprends pas la forme suivante, plutôt le slice à droite ?
[...]
C'est à peu près pareil, ça crée une copie plutôt que de garder la référence, mais ça n'impose pas que l'argument de droite soit une liste.
>>> x = [] >>> id(x) 139750454997128 >>> y = [1, 2, 3] >>> id(y) 139750455486920 >>> x[:] = y >>> id(x) 139750454997128 >>> x = y[:] >>> id(x) 139750454048200 >>> x = y >>> id(x) 139750455486920
Mis à jour par Emmanuel Cazenave il y a presque 2 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Benjamin Dauvergne il y a presque 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit c1b80a6408631ed3d90cdef52eade14adb38d765 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Wed May 4 17:37:43 2022 +0200 api: fix aggregation by service in statistics (#64853) Reference to service can be any kind of model deriving from Service, and grouping by the array column reference_ids cannot work as the column could contain other references than to the service.
Mis à jour par Transition automatique il y a presque 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
api: fix aggregation by service in statistics (#64853)
Reference to service can be any kind of model deriving from Service, and
grouping by the array column reference_ids cannot work as the column
could contain other references than to the service.