Uploaded image for project: 'Apache Airflow'
  1. Apache Airflow
  2. AIRFLOW-2799

Filtering UI objects by datetime is broken

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.10.0
    • Fix Version/s: 1.10.1
    • Component/s: ui, webserver
    • Labels:
      None
    • Environment:
      Debian Stretch, Python 3.5.3

      Description

      On master (49fd23a3ee0269e2b974648f4a823c1d0b6c12ec) searching objects via the user interface is broken for datetime fields.

      Create a new installation
      Create a test dag (example_bash_operator)
      Start webserver and scheduler
      Enable dag

      On web UI, go to Browse > Task Instances
      Search for task instances with execution_date greater than 5 days ago
      You will get an exception

                                ____/ (  (    )   )  \___
                               /( (  (  )   _    ))  )   )\
                             ((     (   )(    )  )   (   )  )
                           ((/  ( _(   )   (   _) ) (  () )  )
                          ( (  ( (_)   ((    (   )  .((_ ) .  )_
                         ( (  )    (      (  )    )   ) . ) (   )
                        (  (   (  (   ) (  _  ( _) ).  ) . ) ) ( )
                        ( (  (   ) (  )   (  ))     ) _)(   )  )  )
                       ( (  ( \ ) (    (_  ( ) ( )  )   ) )  )) ( )
                        (  (   (  (   (_ ( ) ( _    )  ) (  )  )   )
                       ( (  ( (  (  )     (_  )  ) )  _)   ) _( ( )
                        ((  (   )(    (     _    )   _) _(_ (  (_ )
                         (_((__(_(__(( ( ( |  ) ) ) )_))__))_)___)
                         ((__)        \\||lll|l||///          \_))
                                  (   /(/ (  )  ) )\   )
                                (    ( ( ( | | ) ) )\   )
                                 (   /(| / ( )) ) ) )) )
                               (     ( ((((_(|)_)))))     )
                                (      ||\(|(|)|/||     )
                              (        |(||(||)||||        )
                                (     //|/l|||)|\\ \     )
                              (/ / //  /|//||||\\  \ \  \ _)
      -------------------------------------------------------------------------------
      Node: wave.diffractive.io
      -------------------------------------------------------------------------------
      Traceback (most recent call last):
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1116, in _execute_context
          context = constructor(dialect, self, conn, *args)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/engine/default.py", line 649, in _init_compiled
          for key in compiled_params
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/engine/default.py", line 649, in <genexpr>
          for key in compiled_params
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/sql/type_api.py", line 1078, in process
          return process_param(value, dialect)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy_utc/sqltypes.py", line 30, in process_bind_param
          raise ValueError('naive datetime is disallowed')
      ValueError: naive datetime is disallowed
      
      The above exception was the direct cause of the following exception:
      
      Traceback (most recent call last):
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/flask/app.py", line 1982, in wsgi_app
          response = self.full_dispatch_request()
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/flask/app.py", line 1614, in full_dispatch_request
          rv = self.handle_user_exception(e)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/flask/app.py", line 1517, in handle_user_exception
          reraise(exc_type, exc_value, tb)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise
          raise value
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/flask/app.py", line 1612, in full_dispatch_request
          rv = self.dispatch_request()
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/flask/app.py", line 1598, in dispatch_request
          return self.view_functions[rule.endpoint](**req.view_args)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/flask_admin/base.py", line 69, in inner
          return self._run_view(f, *args, **kwargs)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/flask_admin/base.py", line 368, in _run_view
          return fn(self, *args, **kwargs)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/flask_admin/model/base.py", line 1818, in index_view
          view_args.search, view_args.filters)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/flask_admin/contrib/sqla/view.py", line 969, in get_list
          count = count_query.scalar() if count_query else None
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/orm/query.py", line 2843, in scalar
          ret = self.one()
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/orm/query.py", line 2814, in one
          ret = self.one_or_none()
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/orm/query.py", line 2784, in one_or_none
          ret = list(self)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/orm/query.py", line 2855, in __iter__
          return self._execute_and_instances(context)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/orm/query.py", line 2878, in _execute_and_instances
          result = conn.execute(querycontext.statement, self._params)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 945, in execute
          return meth(self, multiparams, params)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/sql/elements.py", line 263, in _execute_on_connection
          return connection._execute_clauseelement(self, multiparams, params)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1053, in _execute_clauseelement
          compiled_sql, distilled_params
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1121, in _execute_context
          None, None)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1402, in _handle_dbapi_exception
          exc_info
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
          reraise(type(exception), exception, tb=exc_tb, cause=cause)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/util/compat.py", line 186, in reraise
          raise value.with_traceback(tb)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1116, in _execute_context
          context = constructor(dialect, self, conn, *args)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/engine/default.py", line 649, in _init_compiled
          for key in compiled_params
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/engine/default.py", line 649, in <genexpr>
          for key in compiled_params
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy/sql/type_api.py", line 1078, in process
          return process_param(value, dialect)
        File "/home/kev/.virtualenvs/airflow/local/lib/python3.5/site-packages/sqlalchemy_utc/sqltypes.py", line 30, in process_bind_param
          raise ValueError('naive datetime is disallowed')
      sqlalchemy.exc.StatementError: (builtins.ValueError) naive datetime is disallowed [SQL: 'SELECT count(%(count_2)s) AS count_1 \nFROM task_instance \nWHERE task_instance.execution_date > %(execution_date_1)s'] [parameters: [{}]]
      

      This appears to have been introduced in https://issues.apache.org/jira/browse/AIRFLOW-288

      I've written a patch for this, which appears to resolve the issue. Will raise a PR.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                ash Ash Berlin-Taylor
                Reporter:
                kevcampb Kevin Campbell
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: