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
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
Il est préférable d'utiliser simplement la nouvelle méthode PasswordUser _set_password
:
# Instead of user.password = 'password'
user._set_password = 'password'
Fixe avec
pip install 'sqlalchemy<1.2'
J'utilise Apache-airflow 1.8.2
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.