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

[jira] [Created] (AIRFLOW-4304) App.py Flask Blueprint registration causes webserver shutdown

Andrew Piermarini created AIRFLOW-4304:
------------------------------------------

             Summary: App.py Flask Blueprint registration causes webserver shutdown
                 Key: AIRFLOW-4304
                 URL: https://issues.apache.org/jira/browse/AIRFLOW-4304
             Project: Apache Airflow
          Issue Type: Bug
          Components: ui
    Affects Versions: 1.10.3
         Environment: macosx
            Reporter: Andrew Piermarini
             Fix For: 1.10.4


Flask Blueprint objects are treated as subscriptable in `app.py`, causing an exception that causes the webserver to shut down.

The exception is raised on line 147 of /airflow/www/app.py. In prior versions, the Blueprint object was retrieved from a dictionary-like flask_blueprints object by calling bp["blueprint"]. As of 10.3, it appears that flask_blueprints is loaded as an array of non-subscriptable Blueprint objects on which `name` and `import_name` can be called directly. 

 

*Exception:*
{code:java}
[2019-04-11 15:09:02 -0700] [54143] [ERROR] Exception in worker process
Traceback (most recent call last):
File "/Users/andrew/.asdf/installs/python/3.6.6/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
worker.init_process()
File "/Users/andrew/.asdf/installs/python/3.6.6/lib/python3.6/site-packages/gunicorn/workers/base.py", line 129, in init_process
self.load_wsgi()
File "/Users/andrew/.asdf/installs/python/3.6.6/lib/python3.6/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
self.wsgi = self.app.wsgi()
File "/Users/andrew/.asdf/installs/python/3.6.6/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/Users/andrew/.asdf/installs/python/3.6.6/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
return self.load_wsgiapp()
File "/Users/andrew/.asdf/installs/python/3.6.6/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
return util.import_app(self.app_uri)
File "/Users/andrew/.asdf/installs/python/3.6.6/lib/python3.6/site-packages/gunicorn/util.py", line 362, in import_app
app = eval(obj, vars(mod))
File "<string>", line 1, in <module>
File "/Users/andrew/.asdf/installs/python/3.6.6/lib/python3.6/site-packages/airflow/www/app.py", line 192, in cached_app
app = create_app(config, testing)
File "/Users/andrew/.asdf/installs/python/3.6.6/lib/python3.6/site-packages/airflow/www/app.py", line 153, in create_app
integrate_plugins()
File "/Users/andrew/.asdf/installs/python/3.6.6/lib/python3.6/site-packages/airflow/www/app.py", line 147, in integrate_plugins
log.debug("Adding blueprint %s:%s", bp["name"], bp["blueprint"].import_name)
TypeError: 'Blueprint' object is not subscriptable
{code}
*Existing Codeblock:*

 
{code:java}
# www/app.py, lines 138-153

def integrate_plugins():
  """Integrate plugins to the context"""
  log = LoggingMixin().log
  from airflow.plugins_manager import (
  admin_views, flask_blueprints, menu_links)
  for v in admin_views:
    log.debug('Adding view %s', v.name)
    admin.add_view(v)
  for bp in flask_blueprints:
    log.debug("Adding blueprint %s:%s", bp["name"],  bp["blueprint"].import_name)
    app.register_blueprint(bp["blueprint"])
  for ml in sorted(menu_links, key=lambda x: x.name):
    log.debug('Adding menu link %s', ml.name)
    admin.add_link(ml)

integrate_plugins()

{code}
 

Corrected Codeblock:
{code:java}
# www/app.py, lines 138-153

def integrate_plugins():
  """Integrate plugins to the context"""
  log = LoggingMixin().log
  from airflow.plugins_manager import (
  admin_views, flask_blueprints, menu_links)
  for v in admin_views:
    log.debug('Adding view %s', v.name)
    admin.add_view(v)
  for bp in flask_blueprints:
    log.debug("Adding blueprint %s:%s", bp.name, bp.import_name)
    app.register_blueprint(bp)
  for ml in sorted(menu_links, key=lambda x: x.name):
    log.debug('Adding menu link %s', ml.name)
    admin.add_link(ml)

integrate_plugins(){code}
 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)