web-dev-qa-db-fra.com

Echec de la configuration de l'authentification Airflow avec "AttributeError: impossible de définir l'attribut"

La configuration de l’authentification du mot de passe Airflow version 1.8 décrite dans le document docs échoue à l’étape. 

user.password = 'set_the_password'

avec erreur 

AttributeError: can't set attribute
9
DanT

Cela est dû à une mise à jour de SqlAlchemy vers une version> = 1.2 qui introduisait une modification incompatible avec les versions antérieures.

Vous pouvez résoudre ce problème en installant explicitement une version <1.2 de SqlAlchemy.

pip install 'sqlalchemy<1.2'

Ou dans un require.txt

sqlalchemy<1.2
13
DanT

Il est préférable d'utiliser simplement la nouvelle méthode PasswordUser _set_password:

 # Instead of user.password = 'password'
 user._set_password = 'password'
22
Toni Piza

Fixe avec 

pip install 'sqlalchemy<1.2'

J'utilise Apache-airflow 1.8.2

1
Feng Xu

Si vous êtes curieux de savoir ce que le changement incompatible dans SQLAlchemy 1.2 (mentionné dans la réponse de @DanT) est en fait is, il s'agit d'un changement dans la manière dont SQLAlchemy traite les propriétés hybrides. À partir de la version 1.2, les méthodes doivent porter le même nom que l'hybride d'origine, ce qui n'était pas nécessaire auparavant. La solution pour Airflow est très simple. Le code dans contrib/auth/backends/password_auth.py devrait changer de ceci:

@password.setter
    def _set_password(self, plaintext):
        self._password = generate_password_hash(plaintext, 12)
        if PY3:
            self._password = str(self._password, 'utf-8')

pour ça:

@password.setter
    def password(self, plaintext):
        self._password = generate_password_hash(plaintext, 12)
        if PY3:
            self._password = str(self._password, 'utf-8')

Voir https://bitbucket.org/zzzeek/sqlalchemy/issues/4332/hybrid_property-gives-attributeerror pour plus de détails.

0
David White