Projet

Général

Profil

Development #64305

fonctionner avec django 3.2

Ajouté par Paul Marillonnet il y a environ 2 ans. Mis à jour il y a presque 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
19 avril 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non
Tags:

Description

toujours chantier bullseye.
le support de sécurité de la 2.2 terminé depuis le 1er avril, on est bien en retard.


Demandes liées

Lié à Publik - Project management #64274: montée de version django (→ 3.2 LTS)Fermé17 avril 2022

Actions
Lié à Authentic 2 - Development #64528: traiter les avertissements de dépréciation django 4Nouveau25 avril 2022

Actions
Lié à Authentic 2 - Development #65159: manager : le passage à django 3.2 fait varier l’ordre d’apparition des rôles dans les tableauxFermé12 mai 2022

Actions

Révisions associées

Révision 7a9fb693 (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

setup: provide a bullseye's django3 compliant config (#64305)

Révision 0d0f8934 (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

tox: test with bullseye's django3 and matching dependency versions (#64305)

Révision 1c442d7b (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

tox: ldaptools version compatible with openldap matching dj3 in debian (#64305)

Révision a26f30e3 (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

tox: add locale to makemessages command (#64305)

Révision 3d7fe3e1 (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

debian: allow dependencies to be django-3 compliant (#64305)

Révision 805436ab (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

plugins: discard deprecated django.conf.urls.url (#64305)

Révision 2c58c32a (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

discard deprecated unicode-aware i18n utils (#64305)

Révision 8166c6d9 (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

saml: discard deprecated force_text in saml2utils (#64305)

Révision 5d317664 (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

settings: hard-code xstatic uris instead of gadjo templatetag reliance (#64305)

Révision c101c0a7 (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

define a _user_get_all_permissions util when necessary (#64305)

Révision 27579fdd (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

drop deprecated django curry in favor of functools.partialmethod (#64305)

Révision b93c667c (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

django3: fix FieldDoesNotExist import (#64305)

Révision a93af50c (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

manager: remove unnecessary table deepcopy (#64305)

Révision 17eb53dc (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

templates: remove deprecated admin_static tag library (#64305)

Révision 503a9833 (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

api: test drf tz awareness errors in serializer datetimefield filters (#64305)

Révision 9b0ac491 (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

django_rbac: fix ContentType.__str__ variations (#64305)

Révision 7cedc985 (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

django3: try to read signed cookie content in tests (#64305)

Révision 07411e19 (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

widgets: override select2's ns management with a2's url routing (#64305)

Révision 66e8d633 (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

widgets: adapt ModelSelect2Mixin.filter_queryset prototype (#64305)

Révision 8635dec7 (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

tests: disregard apostrophe char variations between dj versions (#64305)

Révision b0132b0a (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

tests/auth_fc: unset local no_proxy env variable (#64305)

Révision 43fe2fc3 (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

tests: handle varying displayed role fields row order (#64305)

Révision 243531b3 (diff)
Ajouté par Paul Marillonnet il y a presque 2 ans

Jenkinsfile: run nightly build with django3.2 too (#64305)

Historique

#1

Mis à jour par Paul Marillonnet il y a environ 2 ans

#2

Mis à jour par Paul Marillonnet il y a environ 2 ans

  • Tags mis à django32
#3

Mis à jour par Paul Marillonnet il y a environ 2 ans

  • Statut changé de Nouveau à En cours

C’était bloqué par #64309.

#4

Mis à jour par Paul Marillonnet il y a environ 2 ans

Y a-t-il une contrindication à charger la 1.34 de mellon sur pypi ?
J’ai tapé un lien vers le tarball de mellon upstream dans le tox.ini d’authentic sur la branche ("visible ici": https://git.entrouvert.org/authentic.git/commit/?h=wip/64305-dj32&id=fa9fe7da8b6fd7774c43126ad387c0979f8a9f81) mais c’est encore la 1.28 de pypi, en cache, qui est utilisée dans le build.

#5

Mis à jour par Serghei Mihai il y a environ 2 ans

Paul Marillonnet a écrit :

Y a-t-il une contrindication à charger la 1.34 de mellon sur pypi ?

Je n'en vois pas.

La procédure d'upload est sur https://dev.entrouvert.org/projects/prod-eo/wiki/HowDoWeDoPythonPackaging

#6

Mis à jour par Paul Marillonnet il y a environ 2 ans

Serghei Mihai a écrit :

Je n'en vois pas.

La procédure d'upload est sur https://dev.entrouvert.org/projects/prod-eo/wiki/HowDoWeDoPythonPackaging

Merci, c’est fait.

#7

Mis à jour par Paul Marillonnet il y a environ 2 ans

On dirait que la logique de chargement des settings a changé, de toute évidence django 3 n’aime pas qu’on importe directement des balises de gabarit gadjo dans le settings.py d’authentic.

Traceback (most recent call last):
  File "/tmp/tox-paul/authentic/authentic-py3-dj32-drf312-djtables211/lib/python3.10/site-packages/pytest_django/plugin.py", line 179, in _handle_import_error
    yield
  File "/tmp/tox-paul/authentic/authentic-py3-dj32-drf312-djtables211/lib/python3.10/site-packages/pytest_django/plugin.py", line 351, in pytest_load_initial_conftests
    dj_settings.DATABASES
  File "/tmp/tox-paul/authentic/authentic-py3-dj32-drf312-djtables211/lib/python3.10/site-packages/django/conf/__init__.py", line 87, in __getattr__
    self._setup(name)
  File "/tmp/tox-paul/authentic/authentic-py3-dj32-drf312-djtables211/lib/python3.10/site-packages/django/conf/__init__.py", line 74, in _setup
    self._wrapped = Settings(settings_module)
  File "/tmp/tox-paul/authentic/authentic-py3-dj32-drf312-djtables211/lib/python3.10/site-packages/django/conf/__init__.py", line 183, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  […]
  File "/home/paul/src/authentic/src/authentic2/settings.py", line 23, in <module>
    from gadjo.templatetags.gadjo import xstatic
ModuleNotFoundError: No module named 'gadjo'
Peut-être un changement, au passage à la version 3 de django, dans la classe LazySettings de django.conf qui m’échappe ? Je regarde.

#8

Mis à jour par Paul Marillonnet il y a environ 2 ans

Bon, c’est la copie locale de select2 qui ne devrait pas avoir lieu au moment du chargement des settings. J’ai viré cela temporairement et trouverai un endroit plus propice pour faire cette copie.

#9

Mis à jour par Paul Marillonnet il y a environ 2 ans

J’ai l’impression que les vrais ennuis commencent, django-tables2 encore une fois :

/tmp/tox-paul/authentic/authentic-py3-dj32-drf312-djtables241/lib/python3.10/site-packages/django_tables2/views.py:146: in get_context_data
    table = self.get_table(**self.get_table_kwargs())
[…]
/usr/lib/python3.10/copy.py:231: in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

x = <unlocked _thread.RLock object owner=0 count=0 at 0x7fb4db0eeb40>
memo = {140414737296192: [['ou'], ['name', 'slug', 'ou', 'member_count'], {}, <django.db.models.sql.query.Query object at 0x7...ytesIO object at 0x7fb4da92d7b0>, 140414737378240: <authentic2.manager.tables.RoleTable object at 0x7fb4da903ee0>, ...}
_nil = []

    def deepcopy(x, memo=None, _nil=[]):
        # […]
        if copier is not None:
            y = copier(x, memo)
        else:
            if issubclass(cls, type):
                y = _deepcopy_atomic(x, memo)
            else:
                copier = getattr(x, "__deepcopy__", None)
                if copier is not None:
                    y = copier(memo)
                else:
                    reductor = dispatch_table.get(cls)
                    if reductor:
                        rv = reductor(x)
                    else:
                        reductor = getattr(x, "__reduce_ex__", None)
                        if reductor is not None:
>                           rv = reductor(4)
E                           TypeError: cannot pickle '_thread.RLock' object

/usr/lib/python3.10/copy.py:161: TypeError

Erreur pas très inspirante, je vais dérouler à coups de pdb.

#10

Mis à jour par Paul Marillonnet il y a presque 2 ans

  • Statut changé de En cours à Solution proposée
  • Patch proposed changé de Non à Oui

Avec une durée de build Jenkins qui augmente, mais pas trop le choix ici, il faut tester avec django 2 et 3.
Solution proposée dans la branche, 23 commits et c’est rebasé sur #64247 qu’on peut relire au passage ou bien que je virerai si on me valide cette branche-ci d’abord.

#11

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

Avec une durée de build Jenkins qui augmente

Ma perspective ailleurs ça a été de laisser le commit qui ajoute la validation django3 dans la branche, et quand on approchera de la possibilité concrète de montée de version (= passés à bullseye), on pourra sur un court temps réintroduire.

#12

Mis à jour par Paul Marillonnet il y a presque 2 ans

Frédéric Péters a écrit :

Ma perspective ailleurs ça a été de laisser le commit qui ajoute la validation django3 dans la branche, et quand on approchera de la possibilité concrète de montée de version (= passés à bullseye), on pourra sur un court temps réintroduire.

Je ne me souviens plus si on a une échéance pour la migration à bullseye. J’ai peur que sans cible django3 en intégration continue, et avec un délai d’ici la migration suffisamment long, on se retrouve à faire une seconde fois ce boulot, non ?

#13

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

On n'a pas d'échéance notée, ça manque mais ça ne doit pas tarder.

#14

Mis à jour par Paul Marillonnet il y a presque 2 ans

Frédéric Péters a écrit :

On n'a pas d'échéance notée, ça manque mais ça ne doit pas tarder.

Ok, je note pour moi même et pour le relecteur ici qu’on retirera la cible django3 avant de pousser.

#15

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

  • Assigné à mis à Paul Marillonnet

Relecture un peu lente mais j'ai passé la fin de l'aprem à essayer de faire un paquet python3-lasso pour unstable/python 3.10.

  • tox: test with bullseye's django3 and matching dependency versions (#64305) : pycryptodomex est déjà déclaré dans setup.py, pas besoin de l'ajouter ici
  • tox: ldaptools version compatible with openldap matching dj3 in debian (#64305) : je ne comprends pas bien le lien entre dj3 et ldaptools, si c'est par rapport à openldap 2.5 alors autant frocer 0.24 pour tout le monde
  • saml: discard deprecated force_text in saml2utils : force_str inutile
  • settings: hard-code xstatic uris instead of gadjo templatetag reliance (#64305) : ouaip on peut pas faire mieux je pense
  • api: test drf tz awareness errors in serializer datetimefield filters (#64305) : ça mériterait un commentaire
  • a2_rbac: handle Permission.__repr__ variations (#64305) : faut corriger le repr pour ne pas uitliser le repr de ContentType qui a effectivement changé
  • django3: cookie content is not cleartext anymore : on va laisser comme ça mais on perd de la précision, je me demande si il n'y a pas un moyen simple de lire les messages décodés ou au pire avoir une fonctione d'aide pour les différents assert
  • widgets: override select2's ns management with a2's url routing : ça mériterait un commentaire
  • widgets: adapt ModelSelect2Mixin.filter_queryset prototype (#64305) : un peu tarabiscoté je suis d'avis de faire deux fonctions une simple adaptée au code récent de django-select2 une '_old' et de dispatcher selon la version de django-select2
  • tests: handle varying displayed role fields row order : ça me parait étrange que l'ordre ait changé, il n'y a pas d'ordre par défaut ?
#16

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

Encore pas mal de ugettext_lazy (warnings) :

src/authentic2/apps/journal/app.py:24
  /home/bdauvergne/wd/eo/authentic/src/authentic2/apps/journal/app.py:24: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    verbose_name = _('Journal')

src/authentic2/validators.py:112
  /home/bdauvergne/wd/eo/authentic/src/authentic2/validators.py:112: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    message = _('Null characters are not allowed.')

src/authentic2/a2_rbac/models.py:52
  /home/bdauvergne/wd/eo/authentic/src/authentic2/a2_rbac/models.py:52: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    (RESET_LINK_POLICY, _('Send reset link')),

src/authentic2/models.py:51
  /home/bdauvergne/wd/eo/authentic/src/authentic2/models.py:51: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=_('user'), on_delete=models.CASCADE)

src/authentic2/attribute_kinds.py:62
  /home/bdauvergne/wd/eo/authentic/src/authentic2/attribute_kinds.py:62: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    help_text = _('Format: yyyy-mm-dd')

src/authentic2/custom_user/models.py:149
  /home/bdauvergne/wd/eo/authentic/src/authentic2/custom_user/models.py:149: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    _('uuid'), max_length=32, default=utils_misc.get_hex_uuid, editable=False, unique=True

src/authentic2_auth_oidc/models.py:48
  /home/bdauvergne/wd/eo/authentic/src/authentic2_auth_oidc/models.py:48: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    (STRATEGY_CREATE, _('create if standard account matching failed')),

src/authentic2_auth_fc/models.py:84
  /home/bdauvergne/wd/eo/authentic/src/authentic2_auth_fc/models.py:84: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    created = models.DateTimeField(verbose_name=_('created'), auto_now_add=True)

src/authentic2_idp_cas/models.py:35
  /home/bdauvergne/wd/eo/authentic/src/authentic2_idp_cas/models.py:35: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    urls = models.TextField(verbose_name=_('urls'))

src/authentic2_idp_oidc/models.py:65
  /home/bdauvergne/wd/eo/authentic/src/authentic2_idp_oidc/models.py:65: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    (POLICY_UUID, _('uuid')),

src/authentic2/saml/app_settings.py:32
  /home/bdauvergne/wd/eo/authentic/src/authentic2/saml/app_settings.py:32: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    choices = ((EXPLICIT, _('explicit')), (IMPLICIT, _('implicit')))

src/authentic2/saml/models.py:103
  /home/bdauvergne/wd/eo/authentic/src/authentic2/saml/models.py:103: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    ('meta', _('Use the default from the metadata file')),

src/authentic2/saml/models.py:165
  /home/bdauvergne/wd/eo/authentic/src/authentic2/saml/models.py:165: RemovedInDjango40Warning: force_text() is deprecated in favor of force_str().
    NAME_ID_FORMATS_CHOICES = [(force_text(x), y['caption']) for x, y in NAME_ID_FORMATS.items()]

src/authentic2/apps/journal/models.py:179
  /home/bdauvergne/wd/eo/authentic/src/authentic2/apps/journal/models.py:179: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    name = models.SlugField(verbose_name=_('name'), max_length=256, unique=True)

src/authentic2/forms/profile.py:31
  /home/bdauvergne/wd/eo/authentic/src/authentic2/forms/profile.py:31: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    email = ValidatedEmailField(label=_('New email'))

src/authentic2/admin.py:43
  /home/bdauvergne/wd/eo/authentic/src/authentic2/admin.py:43: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    cleanup_action.short_description = _('Cleanup expired objects')

src/authentic2_idp_cas/admin.py:101
  /home/bdauvergne/wd/eo/authentic/src/authentic2_idp_cas/admin.py:101: RemovedInDjango40Warning: django.utils.translation.ugettext() is deprecated in favor of django.utils.translation.gettext().
    _('Logout'),

src/authentic2/saml/forms.py:33
  /home/bdauvergne/wd/eo/authentic/src/authentic2/saml/forms.py:33: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    name = forms.CharField(max_length=140, label=_('Name'))

src/authentic2/saml/admin.py:81
  /home/bdauvergne/wd/eo/authentic/src/authentic2/saml/admin.py:81: RemovedInDjango40Warning: django.utils.translation.ugettext() is deprecated in favor of django.utils.translation.gettext().
    metadata = forms.CharField(required=True, widget=TextAndFileWidget, label=_('Metadata'))

src/authentic2/a2_rbac/admin.py:97
  /home/bdauvergne/wd/eo/authentic/src/authentic2/a2_rbac/admin.py:97: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    name.short_description = _('name')

src/authentic2/api_mixins.py:27
  /home/bdauvergne/wd/eo/authentic/src/authentic2/api_mixins.py:27: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    default_detail = _('Cannot process request because of conflicting resources.')

src/authentic2/journal_event_types.py:140
  /home/bdauvergne/wd/eo/authentic/src/authentic2/journal_event_types.py:140: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    label = _('login')

src/authentic2/api_views.py:1320
  /home/bdauvergne/wd/eo/authentic/src/authentic2/api_views.py:1320: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    TIME_INTERVAL_CHOICES = [('day', _('Day')), ('month', _('Month')), ('year', _('Year'))]

src/authentic2/manager/journal_event_types.py:35
  /home/bdauvergne/wd/eo/authentic/src/authentic2/manager/journal_event_types.py:35: RemovedInDjango40Warning: django.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().
    label = _('user creation')

#17

Mis à jour par Paul Marillonnet il y a presque 2 ans

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

Mis à jour par Paul Marillonnet il y a presque 2 ans

  • Statut changé de En cours à Solution proposée
  • Assigné à Paul Marillonnet supprimé

Benjamin Dauvergne a écrit :

  • tox: test with bullseye's django3 and matching dependency versions (#64305) : pycryptodomex est déjà déclaré dans setup.py, pas besoin de l'ajouter ici

Ok, je ne sais plus ce que j’avais fumé…

  • tox: ldaptools version compatible with openldap matching dj3 in debian (#64305) : je ne comprends pas bien le lien entre dj3 et ldaptools, si c'est par rapport à openldap 2.5 alors autant frocer 0.24 pour tout le monde

Très bien.

  • saml: discard deprecated force_text in saml2utils : force_str inutile

En supprimant ce force_str je me mange une erreur, il y a certains cas où c’est des bytes, je laisse donc ce commit inchangé.

  • settings: hard-code xstatic uris instead of gadjo templatetag reliance (#64305) : ouaip on peut pas faire mieux je pense
  • api: test drf tz awareness errors in serializer datetimefield filters (#64305) : ça mériterait un commentaire

Ok, commentaire ajouté.

  • a2_rbac: handle Permission.__repr__ variations (#64305) : faut corriger le repr pour ne pas uitliser le repr de ContentType qui a effectivement changé

Oui c’est dans le PermissionAbstractBase que ça se joue, c’est corrigé avec adaptation du message de commit en conséquence.

  • django3: cookie content is not cleartext anymore : on va laisser comme ça mais on perd de la précision, je me demande si il n'y a pas un moyen simple de lire les messages décodés ou au pire avoir une fonctione d'aide pour les différents assert

Oui, j’ai creusé un peu l’affaire en comparant cette partie du code pour django 2.2 et django 3.2, et j’ai ajouté une fonction tests.utils.decode_cookie pour tâcher d’accéder au contenu de app.cookie dans les tests même lorsque ce contenu n’est pas du texte en clair. Par contre pour les dernières lignes modifiées de ce patch j’avoue avoir eu la flemme de parser les entêtes reçus dans la réponse pour tenter d’y appliquer cette même fonction decode_cookie sur les lignes "Set-Cookie: […]". Si c’est bloquant alors je tenterai un truc après avoir maugréé un peu :)

  • widgets: override select2's ns management with a2's url routing : ça mériterait un commentaire

Ok, commentaire ajouté.

  • widgets: adapt ModelSelect2Mixin.filter_queryset prototype (#64305) : un peu tarabiscoté je suis d'avis de faire deux fonctions une simple adaptée au code récent de django-select2 une '_old' et de dispatcher selon la version de django-select2

Ok, redispatch sur une méthode _legacy_filter_queryset. Par contre je ne suis pas allé éplucher un à un le code des versions successives de django-select2 pour voir dans quelle mesure le prototype change, ça me va de rester sur if isinstance(request, str): qui est l’indicateur le plus rapide que les arguments positionnels sont ceux de la méthode legacy, avec un commentaire expliquant la situation. Pareil que plus haut : si c’est bloquant alors je fais un test plus explicite après avoir inspecté un peu les versions successives de ce bout de code dans django select2.

  • tests: handle varying displayed role fields row order : ça me parait étrange que l'ordre ait changé, il n'y a pas d'ordre par défaut ?

Je suis allé voir un peu cette partie de django-tables2, il y a des mixins partout c’est un peu rude. Si c’est problématique que l’ordre des objets exportés change (perso et assez indépendamment de mon découragement à la lecture de ce code, ça ne me choque pas que l’ordre change), je creuserai, sinon ça me va de laisser les set() plutôt que les list() dans les tests.

Encore pas mal de ugettext_lazy (warnings) :

J’ai corrigé tout ceux que tu listes ici. Il y en a encore plein d’autres, et d’autres avertissements RemovedInDjango40Warning pas lié à l’i18n, j’avoue que ça me va si on traite cela dans un second temps dans #64528, "diviser pour mieux fermer du ticket" et cætera :)

#19

Mis à jour par Paul Marillonnet il y a presque 2 ans

  • Assigné à mis à Paul Marillonnet

(L’assignation a sauté, les mystères de redmine.)

#20

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

Paul Marillonnet a écrit :

  • saml: discard deprecated force_text in saml2utils : force_str inutile

En supprimant ce force_str je me mange une erreur, il y a certains cas où c’est des bytes, je laisse donc ce commit inchangé.

Ok c'est l'inverse, c'est toujours un bytes en UTF-8, donc .decode().

  • widgets: adapt ModelSelect2Mixin.filter_queryset prototype (#64305) : un peu tarabiscoté je suis d'avis de faire deux fonctions une simple adaptée au code récent de django-select2 une '_old' et de dispatcher selon la version de django-select2

Ok, redispatch sur une méthode _legacy_filter_queryset. Par contre je ne suis pas allé éplucher un à un le code des versions successives de django-select2 pour voir dans quelle mesure le prototype change, ça me va de rester sur if isinstance(request, str): qui est l’indicateur le plus rapide que les arguments positionnels sont ceux de la méthode legacy, avec un commentaire expliquant la situation. Pareil que plus haut : si c’est bloquant alors je fais un test plus explicite après avoir inspecté un peu les versions successives de ce bout de code dans django select2.

La signature n'a changé qu'une fois, à partir de la 7.x. Mon souci c'est d'avoir un marqueur clair pour savoir quand on peut retirer du code sans faire d'archéologie, donc ici si on a un truc comme :

# deprecate legacy code when django x.x not supported anymore
if django_select2.version < (7,):
   # old code
else:
   # new code

ça me va que ce soit fait avec str() plutôt que de comparer des versions mais faut un commentaire qui dit à quelle version ça correspond et expliquer quand on pourra s'en passer.

  • tests: handle varying displayed role fields row order : ça me parait étrange que l'ordre ait changé, il n'y a pas d'ordre par défaut ?

Je suis allé voir un peu cette partie de django-tables2, il y a des mixins partout c’est un peu rude. Si c’est problématique que l’ordre des objets exportés change (perso et assez indépendamment de mon découragement à la lecture de ce code, ça ne me choque pas que l’ordre change), je creuserai, sinon ça me va de laisser les set() plutôt que les list() dans les tests.

Je préférerai qu'on creuse, l'ordre dépend du queryset, pas du tout de django-tables2, mais l'ordre a changé, donc soit on a pas d'ordre par défaut il faudrait en mettre un soit on a cassé un truc, mais ça peut être fait dans un autre ticket.

Encore pas mal de ugettext_lazy (warnings) :

J’ai corrigé tout ceux que tu listes ici. Il y en a encore plein d’autres, et d’autres avertissements RemovedInDjango40Warning pas lié à l’i18n, j’avoue que ça me va si on traite cela dans un second temps dans #64528, "diviser pour mieux fermer du ticket" et cætera :)

Ok.

Je valide modulo mes 2 première remarques.

#21

Mis à jour par Paul Marillonnet il y a presque 2 ans

Benjamin Dauvergne a écrit :

Je valide modulo mes 2 première remarques.

Ok, tout pris en compte dans la branche. Et j’ai créé #65159 pour cette affaire d’ordre d’apparition des rôles qui change avec django 3.

Jenkins teste dans cette branche à la fois en django 2 et 3, ce qui double le temps de build. Est-ce qu’on est d’accord que je retirerai la cible Jenkins django 3 au moment de pousser ?

#22

Mis à jour par Paul Marillonnet il y a presque 2 ans

  • Lié à Development #64528: traiter les avertissements de dépréciation django 4 ajouté
#23

Mis à jour par Paul Marillonnet il y a presque 2 ans

  • Lié à Development #65159: manager : le passage à django 3.2 fait varier l’ordre d’apparition des rôles dans les tableaux ajouté
#24

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

Paul Marillonnet a écrit :

Jenkins teste dans cette branche à la fois en django 2 et 3, ce qui double le temps de build. Est-ce qu’on est d’accord que je retirerai la cible Jenkins django 3 au moment de pousser ?

Oui mais tu peux l'ajouter dans le Jenkinsfile dans la partie 'TimerTriggerCause' ce sont les builds lents qui ont lieu la nuit, ça nous informera si on s'éloigne de la compatibilité 3.2.

#25

Mis à jour par Paul Marillonnet il y a presque 2 ans

Benjamin Dauvergne a écrit :

Oui mais tu peux l'ajouter dans le Jenkinsfile dans la partie 'TimerTriggerCause' ce sont les builds lents qui ont lieu la nuit, ça nous informera si on s'éloigne de la compatibilité 3.2.

Ok très bien, branche à jour, si c’est ok pour toi je pousserai vendredi après avoir retiré l’environnement django 3 de la liste [tox:jenkins]. Vu qu’il est dans la liste [tox] il sera pris dans le build lent nocturne, si ma lecture du Jenkinsfile est bonne.

#26

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

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

Paul Marillonnet a écrit :

Benjamin Dauvergne a écrit :

Oui mais tu peux l'ajouter dans le Jenkinsfile dans la partie 'TimerTriggerCause' ce sont les builds lents qui ont lieu la nuit, ça nous informera si on s'éloigne de la compatibilité 3.2.

Ok très bien, branche à jour, si c’est ok pour toi je pousserai vendredi après avoir retiré l’environnement django 3 de la liste [tox:jenkins]. Vu qu’il est dans la liste [tox] il sera pris dans le build lent nocturne, si ma lecture du Jenkinsfile est bonne.

Non faut lister les trucs explicitement. Comme je fonctionne : dans [tox] les trucs quand on développe, pas pylint pas update-locales, c'est chiant; dans [tox:jenkins] les trucs pour jenkins, donc tout sauf les trucs lents et dans Jenkinsfile la liste des trucs lent, y a déjà d'ailleurs un bout de django312 pour les api visiblement :

                        if (env.JOB_NAME == 'authentic' && env.GIT_BRANCH == 'origin/main') {
                                sh """ 
        PGPORT=`python3 -c 'import struct; import socket; s=socket.socket(); s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack("ii", 1, 0)); s.bind(("", 0)); print(s.getsockname()[1]); s.close()'` pg_virtualenv -o fsync=off ${env.TMPDIR}/venv/bin/tox -v -e authentic-py3-dj22-drf312 -- tests/test_api.py""" 
                        }

introduit par toi
commit 31fa1dbf4612933733c850823d264df43d2f7c91
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Dec 16 11:03:26 2021 +0100

    jenkins: run drf3.12 env on main branch nightly build (#59601)

T'as juste à enlever tests/test_api.py je pense.

#27

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

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

Mis à jour par Paul Marillonnet il y a presque 2 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 243531b3176c2b4795612027a8d4b428691e5f1a
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Fri May 13 09:53:31 2022 +0200

    Jenkinsfile: run nightly build with django3.2 too (#64305)

commit 43fe2fc307f05d0802c47bc70617d60223eca911
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Mon Apr 25 14:40:00 2022 +0200

    tests: handle varying displayed role fields row order (#64305)

commit b0132b0a15c2c97c01cfa10725d8e6dab0748327
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Mon Apr 25 14:22:00 2022 +0200

    tests/auth_fc: unset local no_proxy env variable (#64305)

commit 8635dec7fa90848e8652c9fa80142ff9dac5027b
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Mon Apr 25 12:17:49 2022 +0200

    tests: disregard apostrophe char variations between dj versions (#64305)

commit 66e8d63388e5ed1ab920802dabb04958508224d7
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Mon Apr 25 12:06:47 2022 +0200

    widgets: adapt ModelSelect2Mixin.filter_queryset prototype (#64305)

commit 07411e194be60661bc31f79f6b795dd6933d6a82
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Mon Apr 25 11:53:56 2022 +0200

    widgets: override select2's ns management with a2's url routing (#64305)

commit 7cedc9856771898ab7d006d5048d6e97b76da095
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Mon Apr 25 11:09:14 2022 +0200

    django3: try to read signed cookie content in tests (#64305)

commit 9b0ac491182ce0d0cba87c351fa6f1f5d24c7fd3
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Fri Apr 22 12:29:17 2022 +0200

    django_rbac: fix ContentType.__str__ variations (#64305)

commit 503a983320b56520c4d775a612a7b8fc0cefe86c
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Apr 21 18:25:14 2022 +0200

    api: test drf tz awareness errors in serializer datetimefield filters (#64305)

commit 17eb53dc243f7dac0c5f4503c59bbff74c2a933b
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Apr 21 17:48:51 2022 +0200

    templates: remove deprecated admin_static tag library (#64305)

commit a93af50cd321a35df499fc0f21a7a7e50372f6f3
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Apr 21 17:46:24 2022 +0200

    manager: remove unnecessary table deepcopy (#64305)

commit b93c667c76c140e1327ea5f7128d5969f3e0c08a
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Apr 21 16:43:34 2022 +0200

    django3: fix FieldDoesNotExist import (#64305)

commit 27579fdd2107ef95e0354260f12951d34bfa64d7
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Apr 21 16:41:33 2022 +0200

    drop deprecated django curry in favor of functools.partialmethod (#64305)

commit c101c0a746d2ae2de6c801af55ffd6be595528b6
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Apr 21 16:08:57 2022 +0200

    define a _user_get_all_permissions util when necessary (#64305)

commit 5d3176648a4ffc516982aa4a1e1e1c22fb7178b7
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Apr 21 14:42:43 2022 +0200

    settings: hard-code xstatic uris instead of gadjo templatetag reliance (#64305)

commit 8166c6d9efaa4e23bd0d486332d27d19cdec54a4
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Apr 21 12:31:33 2022 +0200

    saml: discard deprecated force_text in saml2utils (#64305)

commit 2c58c32a1aee4d092c6eb130b068c6c334f96a65
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Apr 21 12:28:51 2022 +0200

    discard deprecated unicode-aware i18n utils (#64305)

commit 805436abf10e59972ff48be114608cd982a0c081
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Apr 21 12:27:36 2022 +0200

    plugins: discard deprecated django.conf.urls.url (#64305)

commit 3d7fe3e19b0e2577087c22a1c90e53f5683dc78d
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Apr 21 16:50:05 2022 +0200

    debian: allow dependencies to be django-3 compliant (#64305)

commit a26f30e3df4695eb300f54207db0fcb939407476
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Tue Apr 26 10:36:00 2022 +0200

    tox: add locale to makemessages command (#64305)

commit 1c442d7be943649f867d244f520c957000949f79
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Fri Apr 22 12:44:02 2022 +0200

    tox: ldaptools version compatible with openldap matching dj3 in debian (#64305)

commit 0d0f89345dd17fa372cea3dc66e687f1fbbee18a
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Mon Apr 25 15:47:13 2022 +0200

    tox: test with bullseye's django3 and matching dependency versions (#64305)

commit 7a9fb6938c8dd8855ce2e363b6f2dbadd2e035e9
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Mon Apr 25 15:46:34 2022 +0200

    setup: provide a bullseye's django3 compliant config (#64305)
#29

Mis à jour par Transition automatique il y a presque 2 ans

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

Mis à jour par Transition automatique il y a presque 2 ans

Automatic expiration

Formats disponibles : Atom PDF