Michel Goldstein created AIRFLOW-3765: -----------------------------------------
Summary: Can't create/update xcom values using the admin UI Key: AIRFLOW-3765 URL: https://issues.apache.org/jira/browse/AIRFLOW-3765 Project: Apache Airflow Issue Type: Bug Components: ui Affects Versions: 1.10.2, 1.10.1, 1.10.0 Reporter: Michel Goldstein Attachments: Screen Shot 2019-01-24 at 8.46.08 AM.png When I try to create or update an xcom value using the admin UI I get an error saying: {noformat} Failed to create record. can't escape str to binary{noformat} Here is the full stack trace: {noformat} [2019-01-24 16:50:23,781] {{view.py:1087}} ERROR - Failed to create record. Traceback (most recent call last): File "/usr/local/airflow/.local/lib/python3.6/site-packages/flask_admin/contrib/sqla/view.py", line 1083, in create_model self.session.commit() File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/scoping.py", line 157, in do return getattr(self.registry(), name)(*args, **kwargs) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/session.py", line 927, in commit self.transaction.commit() File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/session.py", line 467, in commit self._prepare_impl() File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/session.py", line 447, in _prepare_impl self.session.flush() File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/session.py", line 2209, in flush self._flush(objects) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/session.py", line 2329, in _flush transaction.rollback(_capture_exception=True) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py", line 66, in __exit__ compat.reraise(exc_type, exc_value, exc_tb) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 187, in reraise raise value File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/session.py", line 2293, in _flush flush_context.execute() File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/unitofwork.py", line 389, in execute rec.execute(self) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/unitofwork.py", line 548, in execute uow File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/persistence.py", line 181, in save_obj mapper, table, insert) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/persistence.py", line 835, in _emit_insert_statements execute(statement, params) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 945, in execute return meth(self, multiparams, params) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/sql/elements.py", line 263, in _execute_on_connection return connection._execute_clauseelement(self, multiparams, params) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1053, in _execute_clauseelement compiled_sql, distilled_params File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1189, in _execute_context context) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1405, in _handle_dbapi_exception util.reraise(*exc_info) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 187, in reraise raise value File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context context) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute cursor.execute(statement, parameters) TypeError: can't escape str to binary{noformat} This seems to be related to how flask-admin and SQLAlchemy integration works. All the other ways to set xcom values go through XCom.set() which will handle the pickling of the values before passing it onto the standard SQLAlchemy model. However, flask-admin does not call that method and will then try to add a string to a binary value within the model, thus the error above. I think the solution is to instead of provide a different "set" method, to declare the value type instead of a LargeBinary to provide a custom type that will then handle the serialization to binary (https://docs.sqlalchemy.org/en/rel_1_1/core/custom_types.html?highlight=typedecorator#sqlalchemy.types.TypeDecorator). -- This message was sent by Atlassian JIRA (v7.6.3#76005)