Projet

Général

Profil

Development #22865

Ne plus utiliser pkg_resources pour charger les applications incluses dans authentic

Ajouté par Benjamin Dauvergne il y a environ 6 ans. Mis à jour il y a 11 mois.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
28 mars 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Il semblerait que pkg_resources pose des soucis de stabilité du registre des packages faisant que lors de certains reload dans gunicorn par exemple, des applications ne sont plus visibles après une mise à jour d'un paquet Debian, cela n'arrivera pas si l'application est explicitement listée dans INSTALLED_APPS.


Fichiers

0001-idp.saml-no-plugin.patch (4,95 ko) 0001-idp.saml-no-plugin.patch Emmanuel Cazenave, 18 juin 2020 19:01

Demandes liées

Lié à Authentic 2 - Bug #22858: NoReverseMatch at /idp/oidc/logout/Fermé28 mars 2018

Actions
Lié à Authentic 2 - Bug #13718: plugins lost after reloadFermé24 octobre 2016

Actions
Lié à Authentic 2 - Development #44319: Sortir idp.saml du système de pluginsFermé22 juin 2020

Actions
Lié à Authentic 2 - Development #44320: Sortir auth_saml du système de pluginsFermé22 juin 2020

Actions
Lié à Authentic 2 - Development #44322: Retirer authentic2_auth_oidc du système de pluginsFermé22 juin 2020

Actions
Lié à Authentic 2 - Development #44329: Sortir authentic2_idp_cas du système de pluginsFermé22 juin 2020

Actions
Lié à Authentic 2 - Development #44331: Sortir authentic2_idp_oidc du système de pluginsFermé22 juin 2020

Actions
Lié à Authentic 2 - Development #44334: Sortir authentic2_provisionning_ldap du système de pluginsFermé22 juin 2020

Actions
Lié à Authentic 2 - Development #44369: Sortir authentic2_auth_fc du système de pluginsFermé23 juin 2020

Actions
Lié à Authentic 2 - Development #46474: Permettre de charger les plugins via le registre des applications djangoFermé08 septembre 2020

Actions
Lié à Plugin Carte eID (fedict/bosa) - Development #46476: Ne plus dépendre de pkg_resourcesFermé08 septembre 2020

Actions
Bloqué par Authentic 2 - Development #44216: Déclarer les middleware des applications A2 (plutôt qu'utiliser plugins.register_plugins_middleware)Rejeté18 juin 2020

Actions

Révisions associées

Révision 65baa066 (diff)
Ajouté par Emmanuel Cazenave il y a 12 mois

plugins: stop using pkg_resources (#22865)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

  • Lié à Bug #22858: NoReverseMatch at /idp/oidc/logout/ ajouté
#2

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

  • Lié à Bug #13718: plugins lost after reload ajouté
#3

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Assigné à mis à Benjamin Dauvergne
#4

Mis à jour par Frédéric Péters il y a plus de 4 ans

Un autre soucis, comme tous les modules sont automatiquement chargés, bien que formellement des applications différentes, il n'est pas possible de totalement retirer auth_oidc, auth_fc (en les retirant d'INSTALLED_APPS), il faut également les supprimer des entry_points, /usr/lib/python2.7/dist-packages/authentic2-*.egg-info/entry_points.txt. (le besoin de retirer auth_oidc et auth_fc est dans #38677).

(je vois qu'il a une branche qui n'a pas été proposée, et qu'il faudrait rebaser)

#6

Mis à jour par Emmanuel Cazenave il y a presque 4 ans

Benj,

J'ai essayé de reprendre ça, rebase etc, je m'en sors pas ça fait trop de trucs d'un coup, je m'y perds.

Et donc question pour savoir si tu veux poursuivre ou me le laisser, auquel cas je ferai dans des tickets à part, genre un par application (en supposant que ce soit possible de procéder ainsi, j'imagine que oui).

#7

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

Emmanuel Cazenave a écrit :

Et donc question pour savoir si tu veux poursuivre ou me le laisser, auquel cas je ferai dans des tickets à part, genre un par application (en supposant que ce soit possible de procéder ainsi, j'imagine que oui).

Oui il m'est arrivé pareil; en reréfléchissant au truc à mon avis il faut un premier commit où on ajoute à la recherche des plugins de pkg_resources, une recherche via une méthode sur AppConfig nommée a2_get_plugins(), ensuite on peut déplacer la déclaration de chaque plugin de setup.py vers son appconfig, 1 commit par app.

T'en penses quoi ?

#8

Mis à jour par Emmanuel Cazenave il y a presque 4 ans

  • Statut changé de Nouveau à En cours
  • Assigné à changé de Benjamin Dauvergne à Emmanuel Cazenave
#9

Mis à jour par Emmanuel Cazenave il y a presque 4 ans

Oui ça me semble bien.

Mais il y aura d'autres ajustements parce que par exemple :

MIDDLEWARE = plugins.register_plugins_middleware(MIDDLEWARE)

et que pète un :

django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

Pour avoir une bonne vue d'ensemble, est-ce que quelqu'un sait quels plugins/apps qui ne sont pas dans le dépôt git a2 sont encore utilisés ?

(Paul me pointe authentic2-auth-fedict authentic2-auth-kerberos authentic2-cut authentic2-gnm sans être sûr).

#10

Mis à jour par Emmanuel Cazenave il y a presque 4 ans

  • Bloqué par Development #44216: Déclarer les middleware des applications A2 (plutôt qu'utiliser plugins.register_plugins_middleware) ajouté
#11

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

Emmanuel Cazenave a écrit :

Oui ça me semble bien.

Mais il y aura d'autres ajustements parce que par exemple :

[...]

et que pète un :

[...]

Pour avoir une bonne vue d'ensemble, est-ce que quelqu'un sait quels plugins/apps qui ne sont pas dans le dépôt git a2 sont encore utilisés ?

(Paul me pointe authentic2-auth-fedict authentic2-auth-kerberos authentic2-cut authentic2-gnm sans être sûr).

On ne peut effectivement plus modifier MIDDLEWARE depuis settings si on fait appel aux AppConfig pour trouver les valeurs, par contre on peut le faire dans un AppConfig.ready(), par exemple celui d'authentic.

#12

Mis à jour par Emmanuel Cazenave il y a presque 4 ans

Benjamin Dauvergne a écrit :

Oui il m'est arrivé pareil; en reréfléchissant au truc à mon avis il faut un premier commit où on ajoute à la recherche des plugins de pkg_resources, une recherche via une méthode sur AppConfig nommée a2_get_plugins(), ensuite on peut déplacer la déclaration de chaque plugin de setup.py vers son appconfig, 1 commit par app.

Mais en fait le settings.py est farci de plugins.register_plugins_XXX.
A ce moment là on est en mode AppRegistryNotReady, donc cette idée tombe à l'eau il me semble (sauf si ton commentaire précédent, que je n'ai pas bien compris, y change quelque chose).

Du coup je changerais d'approche : sortir les apps une par une du système de plugin sans toucher au système de plugin, qui finira coquille vide et qu'on pourra dégager.

#13

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

Emmanuel Cazenave a écrit :

A ce moment là on est en mode AppRegistryNotReady, donc cette idée tombe à l'eau il me semble (sauf si ton commentaire précédent, que je n'ai pas bien compris, y change quelque chose).

Oui l'idée c'est d'appeler register_xxx hors de settings.py après son chargement, je viens de vérifier ready() ça ne va pas, donc dans urls.py comme on y appelle les register*_url_patterns.

Du coup je changerais d'approche : sortir les apps une par une du système de plugin sans toucher au système de plugin, qui finira coquille vide et qu'on pourra dégager.

Trop de boulot, je préfère qu'on fasse petit pas.

#14

Mis à jour par Emmanuel Cazenave il y a presque 4 ans

Ci-joint un patch pour illustrer ma méthode sur une app, c'est tout simple, on peut étaler ça app par app dans des tickets différents et sur des mises en prod différentes.

Candidat pour faire comme ça pas à pas, c'est ce qui me fait le moins chauffer les neurones.

#15

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

Emmanuel Cazenave a écrit :

Ci-joint un patch pour illustrer ma méthode sur une app, c'est tout simple, on peut étaler ça app par app dans des tickets différents et sur des mises en prod différentes.

Candidat pour faire comme ça pas à pas, c'est ce qui me fait le moins chauffer les neurones.

Ok, désolé je pensais qu'on parlait des apps externes, oui pour les apps internes on peut faire ça tranquillement , de plus aucune ne propose de Middleware. Pour les apps externes, je trouve ça casse gueule de demander une configuration spécifique à chaque fois.

#16

Mis à jour par Emmanuel Cazenave il y a presque 4 ans

#17

Mis à jour par Emmanuel Cazenave il y a presque 4 ans

#18

Mis à jour par Emmanuel Cazenave il y a presque 4 ans

#19

Mis à jour par Emmanuel Cazenave il y a presque 4 ans

#20

Mis à jour par Emmanuel Cazenave il y a presque 4 ans

#21

Mis à jour par Emmanuel Cazenave il y a presque 4 ans

  • Lié à Development #44334: Sortir authentic2_provisionning_ldap du système de plugins ajouté
#22

Mis à jour par Emmanuel Cazenave il y a presque 4 ans

#23

Mis à jour par Emmanuel Cazenave il y a presque 4 ans

Pour les app internes, ça s'éclaircit via les tickets liés.

Pour les externes, il y en a un paquet sur http://git.entrouvert.org/, quelqu'un sait lesquelles vraiment utilisées ?

#24

Mis à jour par Frédéric Péters il y a presque 4 ans

authentic2-auth-fedict est utilisé côté imio, authentic2-gnm côté Toodego.

De manière générale je dirais que tout ce qui a >12 mois d'inactivité est obsolète.

#25

Mis à jour par Emmanuel Cazenave il y a plus de 3 ans

  • Lié à Development #46474: Permettre de charger les plugins via le registre des applications django ajouté
#26

Mis à jour par Emmanuel Cazenave il y a plus de 3 ans

#31

Mis à jour par Frédéric Péters il y a plus d'un an

J'aimerais bien voir relancé ce ticket, je me suis trouvé ce matin raison inconnue avec authentic qui ne démarrait plus parce que :

  File "/home/fred/src/eo/authentic/src/authentic2/settings.py", line 114, in <module>
    MIDDLEWARE = plugins.register_plugins_middleware(MIDDLEWARE)
  File "/home/fred/src/eo/authentic/src/authentic2/plugins.py", line 109, in register_plugins_middleware
    for plugin in get_plugins(group_name):
  File "/home/fred/src/eo/authentic/src/authentic2/plugins.py", line 57, in get_plugins
    raise PluginError('unable to load entrypoint %s' % entrypoint, e)
authentic2.plugins.PluginError: ('unable to load entrypoint authentic2-auth-fedict = authentic2_auth_fedict:Plugin', ImportError("module 'authentic2_auth_fedict' has no attribute 'Plugin'"))

et ça serait plus rapide dans une telle situation de simplement pouvoir retirer authentic2_auth_fedict d'INSTALLED_APPS.

#32

Mis à jour par Frédéric Péters il y a environ un an

  • Sujet changé de Ne plug utiliser pkg_resources pour charger les applications incluses dans authentic à Ne plus utiliser pkg_resources pour charger les applications incluses dans authentic
#33

Mis à jour par Robot Gitea il y a environ un an

Emmanuel Cazenave (ecazenave) a ouvert une pull request sur Gitea concernant cette demande :

#34

Mis à jour par Robot Gitea il y a 12 mois

  • Statut changé de En cours à Solution proposée
#35

Mis à jour par Emmanuel Cazenave il y a 12 mois

Plus aucun plugins a2 en activité qui se basent sur pkg_resources (à ma connaissance).

On peut nettoyer a2 des mécanismes liés à pkg_resource, c'est objet de la PR.

#36

Mis à jour par Robot Gitea il y a 12 mois

  • Statut changé de Solution proposée à Solution validée

Benjamin Dauvergne (bdauvergne) a approuvé une pull request sur Gitea concernant cette demande :

#37

Mis à jour par Robot Gitea il y a 12 mois

  • Statut changé de Solution validée à Résolu (à déployer)

Emmanuel Cazenave (ecazenave) a mergé une pull request sur Gitea concernant cette demande :

#38

Mis à jour par Transition automatique il y a 11 mois

  • Statut changé de Résolu (à déployer) à Solution déployée
#39

Mis à jour par Transition automatique il y a 9 mois

Automatic expiration

Formats disponibles : Atom PDF