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:42:00 UTC
[jira] [Updated] (AIRFLOW-4304) App.py Flask Blueprint registration
causes webserver shutdown
[ https://issues.apache.org/jira/browse/AIRFLOW-4304?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andrew Piermarini updated AIRFLOW-4304:
---------------------------------------
Description:
Flask Blueprint objects are treated as subscriptable in `app.py`, which raises 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}
was:
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}
> 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
> Priority: Major
> Labels: blueprint, flask, ui
> Fix For: 1.10.4
>
>
> Flask Blueprint objects are treated as subscriptable in `app.py`, which raises 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)