webentwicklung-frage-antwort-db.com.de

Airflow-Authentifizierungseinstellungen schlagen mit "AttributeError: Attribut nicht setzen" fehl

Das Setup der Airflow-Version 1.8 für die Kennwortauthentifizierung, wie in docs beschrieben, schlägt beim Schritt fehl 

user.password = 'set_the_password'

mit fehler 

AttributeError: can't set attribute
9
DanT

Dies ist auf ein Update von SqlAlchemy auf eine Version> = 1.2 zurückzuführen, das eine rückwärts inkompatible Änderung eingeführt hat.

Sie können dies beheben, indem Sie explizit eine SqlAlchemy-Version <1.2 installieren.

pip install 'sqlalchemy<1.2'

Oder in einer request.txt

sqlalchemy<1.2
13
DanT

Es ist besser, einfach die neue Methode von PasswordUser _set_password zu verwenden:

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

Fixiert mit 

pip install 'sqlalchemy<1.2'

Ich verwende Apache-Airflow 1.8.2

1
Feng Xu

Falls jemand neugierig ist auf die inkompatible Änderung in SQLAlchemy 1.2 (erwähnt in @ DanTs Antwort) ist, ist dies eine Änderung im Umgang von SQLAlchemy mit hybriden Eigenschaften. Ab 1.2 müssen Methoden denselben Namen haben wie der ursprüngliche Hybrid, der zuvor nicht erforderlich war. Der Fix für Airflow ist sehr einfach. Der Code in contrib/auth/backends/password_auth.py sollte sich davon ändern:

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

zu diesem:

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

Unter https://bitbucket.org/zzzeek/sqlalchemy/issues/4332/hybrid_property-gives-attributeerror finden Sie weitere Einzelheiten.

0
David White