You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by "Michel Goldstein (JIRA)" <ji...@apache.org> on 2019/01/24 17:04:00 UTC

[jira] [Created] (AIRFLOW-3765) Can't create/update xcom values using the admin UI

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)