Airflow authentication setups fails with "AttributeError: can't set attribute"
Airflow authentication setups fails with "AttributeError: can't set attribute"
docs 中描述的 Airflow 版本 1.8 密码身份验证设置在步骤
失败
user.password = 'set_the_password'
有错误
AttributeError: can't set attribute
这是由于 SqlAlchemy 更新到版本 >= 1.2,引入了向后不兼容的更改。
您可以通过显式安装 <1.2 版的 SqlAlchemy 来解决此问题。
pip install 'sqlalchemy<1.2'
或 requirement.txt
sqlalchemy<1.2
已修复
pip install 'sqlalchemy<1.2'
我正在使用 apache-airflow 1.8.2
最好直接使用PasswordUser的新方法_set_password
:
# Instead of user.password = 'password'
user._set_password = 'password'
如果有人好奇 SQLAlchemy 1.2 中不兼容的变化(在@DanT 的回答中提到)实际上 是 ,这是 SQLAlchemy 处理混合属性的方式的变化。从 1.2 开始,方法必须与原始 hybrid 具有相同的名称,这在以前是没有要求的。 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。
docs 中描述的 Airflow 版本 1.8 密码身份验证设置在步骤
失败user.password = 'set_the_password'
有错误
AttributeError: can't set attribute
这是由于 SqlAlchemy 更新到版本 >= 1.2,引入了向后不兼容的更改。
您可以通过显式安装 <1.2 版的 SqlAlchemy 来解决此问题。
pip install 'sqlalchemy<1.2'
或 requirement.txt
sqlalchemy<1.2
已修复
pip install 'sqlalchemy<1.2'
我正在使用 apache-airflow 1.8.2
最好直接使用PasswordUser的新方法_set_password
:
# Instead of user.password = 'password'
user._set_password = 'password'
如果有人好奇 SQLAlchemy 1.2 中不兼容的变化(在@DanT 的回答中提到)实际上 是 ,这是 SQLAlchemy 处理混合属性的方式的变化。从 1.2 开始,方法必须与原始 hybrid 具有相同的名称,这在以前是没有要求的。 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。