Установки проверки подлинности воздушного потока завершаются с ошибкой "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 для получения дополнительной информации.