Установки проверки подлинности воздушного потока завершаются с ошибкой "AttributeError: не может установить атрибут"

Сбой установки аутентификации пароля Airflow версии 1.8, как описано в документации, на шаге

user.password = 'set_the_password'

с ошибкой

AttributeError: can't set attribute

4 ответа

Решение

Это связано с обновлением SqlAlchemy до версии>= 1.2, которая внесла обратно несовместимое изменение.

Вы можете исправить это, явно установив версию SqlAlchemy <1.2.

pip install 'sqlalchemy<1.2'

Или втребовании.txt

sqlalchemy<1.2

Лучше просто использовать новый метод PasswordUser _set_password:

 # Instead of user.password = 'password'
 user._set_password = 'password'

Исправлено с

pip install 'sqlalchemy<1.2'

Я использую apache-airflow 1.8.2

Если кому-то любопытно узнать, что на самом деле представляет собой несовместимое изменение в SQLAlchemy 1.2 (упомянутое в ответе @DanT), это изменение в том, как SQLAlchemy работает с гибридными свойствами. Начиная с версии 1.2, методы должны иметь то же имя, что и исходный гибрид, что ранее не требовалось. Исправление для Airflow очень просто. Код в contrib/auth/backends/password_auth.py следует изменить из этого:

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

к этому:

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

См. https://bitbucket.org/zzzeek/sqlalchemy/issues/4332/hybrid_property-gives-attributeerror для получения дополнительной информации.

Другие вопросы по тегам