气流认证设置失败,因为"属性错误:无法设置属性"

时间:2018-01-03 10:46:06

标签: airflow apache-airflow

docs中描述的Airflow版本1.8密码身份验证设置在步骤

失败
*********Calling transformStream************
ram
sam
Subscriber to Transformed AlterMap: SAM
kam
Subscriber to Transformed AlterMap: KAM
dam
Subscriber to Transformed AlterMap: DAM
-------------------------------------
*********Calling composeStream************
ram
sam
Subscriber to Composed AlterMap :SAM
kam
Subscriber to Composed AlterMap :KAM
dam
Subscriber to Composed AlterMap :DAM
-------------------------------------

有错误

user.password = 'set_the_password'

4 个答案:

答案 0 :(得分:22)

最好简单地使用PasswordUser的新方法_set_password

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

答案 1 :(得分:13)

这是因为SqlAlchemy更新为版本> = 1.2,引入了向后不兼容的更改。

您可以通过显式安装SqlAlchemy版本< 1.2。

来解决此问题
AttributeError: can't set attribute

或者在requirements.txt

pip install 'sqlalchemy<1.2'

答案 2 :(得分:1)

已修复

pip install 'sqlalchemy<1.2'

我正在使用apache-airflow 1.8.2

答案 3 :(得分:0)

如果有人对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