Projet

Général

Profil

Development #40288

Mise à jour de celery

Ajouté par Nicolas Roche il y a environ 4 ans. Mis à jour il y a environ 4 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Actuellement celery est bloqué à sa version 3.
https://dev.entrouvert.org/projects/hobo/repository/revisions/d9860e047a64b81fd84c917d576186b28b8c0654

$ pip install celery
Requirement already satisfied: celery in /home/nroche/envs/publik-env-py3/lib/python3.7/site-packages (3.1.26.post2)
Requirement already satisfied: kombu<3.1,>=3.0.37 in /home/nroche/envs/publik-env-py3/lib/python3.7/site-packages (from celery) (3.0.37)

Or, la version de kombu qui en dépend est incompatible avec le nouveau mot clé async introduit par python 3.5.
https://www.python.org/dev/peps/pep-0492/

>>> import celery
>>> from kombu.async
  File "<stdin>", line 1
    from kombu.async
                   ^
SyntaxError: invalid syntax

Kombu 4.2.0 corrige ce problème, en renommant le répertoire async en asynchronous.
Mais alors, les messages gérés par celery doivent être des bits et non plus du texte.


Fichiers


Demandes liées

Lié à Hobo - Bug #14016: se limiter à celery 3Fermé18 novembre 2016

Actions
Lié à Hobo - Development #40257: Tourner en python3Fermé28 février 2020

Actions
Lié à Hobo - Bug #41158: La mise à jour en python3 nécessite d'utiliser la version 4 de celeryFermé30 mars 2020

Actions

Révisions associées

Révision cf4d3d4a (diff)
Ajouté par Nicolas Roche il y a environ 4 ans

python3: upgrade celery as python3 need kombu >=4.2.0 (#40288)

Révision 59b3228d (diff)
Ajouté par Nicolas Roche il y a environ 4 ans

python3: celery now handle text (#40288)

Révision fd7baecf (diff)
Ajouté par Nicolas Roche il y a environ 4 ans

python3: use memory broker for tests (#40288)

Révision 3811e59b (diff)
Ajouté par Nicolas Roche il y a environ 4 ans

tests: remove unused celery option (#40288)

Historique

#1

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

  • Lié à Bug #14016: se limiter à celery 3 ajouté
#2

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

>>> import celery
>>> from kombu.async
  File "<stdin>", line 1
    from kombu.async
                   ^
SyntaxError: invalid syntax

n'est pas du python correct, peu importe la version.

Python 3.5.3 (default, Sep 27 2018, 17:25:39) 
...
>>> import celery
>>> from kombu.async import *
>>> 

Quel est le problème réellement rencontré ?

#3

Mis à jour par Nicolas Roche il y a environ 4 ans

Je rencontre ce problème au lancement de l'agent hobo depuis l'environnement python3 :

$ hobo-agent
  File "/home/nroche/envs/publik-env-py3/lib/python3.7/site-packages/celery/utils/timer2.py", line 19
    from kombu.async.timer import Entry, Timer as Schedule, to_timestamp, logger
                   ^
SyntaxError: invalid syntax

J'anticipe (avec kombu mis à jour), mais je suis ensuite confronté à une autre régression : https://github.com/celery/celery/issues/3518

$ tox -e py3-coverage-hobo -- tests/test_theme.py --pdb
ModuleNotFoundError: No module named 'kombu.transport.django'

#4

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

ok, * /python3.7/ *, pas 3.5.

#6

Mis à jour par Nicolas Roche il y a environ 4 ans

Sur ma machine (python 3.7) les tests passent, mais ils bloquent avec jenkins (python 3.5 ?)
parce qu'ils utilisent le serveur rabbitmq, alors qu'il n'est pas (à raison) accessible pour les tests sur jenkins :

platform linux2 -- Python 2.7.13, pytest-4.6.9, py-1.8.1, pluggy-0.13.1
django: settings: hobo.settings (from env)
rootdir: /var/lib/jenkins/workspace/obo-wip_wip_40288-upgrade-celery
plugins: freezegun-0.4.1, celery-4.4.0, django-webtest-1.9.7, mock-2.0.0, django-3.8.0, cov-2.8.1
collected 135 items

tests/test_cook.py .........                                             [  6%]

#7

Mis à jour par Nicolas Roche il y a environ 4 ans

Le transport (brocker) django n'est plus disponible pour jouer les tests. Je l'ai remplacé par par le transport in-memory :
https://kombu.readthedocs.io/en/latest/_modules/kombu/transport/memory.html

J'ai testé en python 2.7 (et aussi en 3.7). Les différentes fonctionalités de hobo accessibles via son menu burger me semblent toutes fonctionner ainsi que le déploiement via cook.

#8

Mis à jour par Nicolas Roche il y a environ 4 ans

#9

Mis à jour par Nicolas Roche il y a environ 4 ans

(en python3) Il faut également transformer le texte en bits pour passer les notifications d'authentique à subprocess.communicate.
Je l'ai vu en réalisant que l'ajout d'un rôle n'était plus propagé aux briques.

#10

Mis à jour par Nicolas Roche il y a environ 4 ans

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

Le paquet python-kombu proposé par stretch n'est pas compatible. https://packages.debian.org/stretch/python-kombu :

$ wget http://deb.debian.org/debian/pool/main/k/kombu/kombu_3.0.35.orig.tar.gz
$ tar -zxf kombu_3.0.35.orig.tar.gz
$ ls -d kombu-3.0.35/kombu/async*
kombu-3.0.35/kombu/async

#11

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

Mais dans stretch il y a python 3.5.

Est-ce que tu veux dire qu'une compatibilité avec celery 4 exclut la compatibilité avec celery 3 ?

#12

Mis à jour par Nicolas Roche il y a environ 4 ans

Est-ce que tu veux dire qu'une compatibilité avec celery 4 exclut la compatibilité avec celery 3 ?

Non, c'est parce que je suis parti du postulat que l'on devait inscrire dans le fichier setup.py une dépendance qui couvre toutes les configurations (python 2.7, 3.5 et 3.7) à la fois.
(python3.7 est incompatible avec celery3 et je ne sais pas le spécifier sans impacter les autres environnements python)

#13

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

Il me semble que tu veux juste retirer le <4 du setup.py; ça permettra au job jenkins de continuer à prendre la version <4 vu que celle-ci est spécifiée explicitement dans le tox.ini.

#14

Mis à jour par Nicolas Roche il y a environ 4 ans

Oui (tout se règle dans le setup.py) :

install_requires=[
...
    'celery<4' if sys.version_info < (3,7) else 'celery',

Parce que https://docs.python.org/3/whatsnew/changelog.html#python-3-7-0-alpha-2 :

Make async and await proper keywords, as specified in PEP 492.

#15

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

C'est vraiment nécessaire cette condition, 'celery' seul ça ne peut pas aller ?

#16

Mis à jour par Nicolas Roche il y a environ 4 ans

C'est nécessaire sinon tout le monde passe en celery 4.

$ tox -r -e py2-coverage-hobo -- tests/test_emails.py -vv
...
plugins: ... celery-4.0.0rc7 ...
...

(Dans le tox.ini je ne peux pas spécifier py35 et py37 car cela implique que ces 2 interpréteurs soient disponibles. Grâce à cette condition j'ai supprimé les précédentes dépendances du tox.ini.)

#17

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

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

Bah oui, si tu retires le "celery<4" du tox.ini. (je me mettais à oublier que tox est également utilisé en local...)

#18

Mis à jour par Nicolas Roche il y a environ 4 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 3811e59b7d76f25d153059929b5a552d8a17888b
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Tue Mar 3 08:36:41 2020 +0100

    tests: remove unused celery option (#40288)

commit fd7baecf9db56706161fb4746c71fbe2597c5a69
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Sun Mar 1 19:01:46 2020 +0100

    python3: use memory broker for tests (#40288)

commit 59b3228dcb4ee2e19640a00c5b5cd8254b0c790c
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Sat Feb 29 13:20:49 2020 +0100

    python3: celery now handle text (#40288)

commit cf4d3d4a466ba972f329be2f175989b09ef202d7
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Fri Feb 28 23:12:53 2020 +0100

    python3: upgrade celery as python3 need kombu >=4.2.0 (#40288)
#19

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

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

Mis à jour par Nicolas Roche il y a environ 4 ans

  • Lié à Bug #41158: La mise à jour en python3 nécessite d'utiliser la version 4 de celery ajouté

Formats disponibles : Atom PDF