You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@superset.apache.org by GitBox <gi...@apache.org> on 2019/09/27 23:26:32 UTC

[GitHub] [incubator-superset] craig-rueda opened a new issue #8318: [SIP] Proposal to introduce Flask app factory pattern

craig-rueda opened a new issue #8318: [SIP] Proposal to introduce Flask app factory pattern
URL: https://github.com/apache/incubator-superset/issues/8318
 
 
   ### Motivation
   
   Superset’s singletons are currently configured in the `superset` package’s `__init__.py` python module which means that the app itself (Superset) cannot be configured any other way than is described in the root package. The act of simply importing `superset` for other purposes, such as the `cli` forces the entire app to load, even though all you might need is SqlAlchemy, or some other component. A better approach is to leverage a pattern such as the “Factory Pattern” in which one or more functions can compose several components into a single “app”.  What’s more is that certain portions of the app might need to be overridden in test, or for different use cases. Making the app more composable makes it easier to alter functionality as needed and customize.
   
   ### Proposed Change
   
   In order to get this done, we will need to add a few new modules, clean up `superset.__init__.py` and update the way views are added to FAB. This change is largely a refactor, with no change to functionality.
   
   We should perform this migration in a few phases (likely several PRs):
   	1. Migrate all current direct references to `app` to leverage `flask.current_app` proxy
   	2. Introduce a new `extensions.py` in the base of the `superset` package whose job it will be to instantiate the Flask app, and other singletons, such as AppBuilder.
   	3. Move all logic currently in `superset.__init__.py` into a new `app.py` file which will define a `create_app()` function whose responsibility will be to call `init_app()` on the Flask app, along with other flask app aware objects
   	4. Move all calls to `appbuilder.add_view_xxx()` to `app.py`
   
   ### New or Changed Public Interfaces
   
   The biggest change will be the removal of `superset.app` from the global scope. Instead, we will leverage Flask’s `current_app` proxy in order to reference the current running app. There will be no changes to the set of dependent libraries.
   
   ### New dependencies
   
   n/a
   
   ### Migration Plan and Compatibility
   
   Documentation will likely need to be added which describes the "new way" of doing things once this is merged into `master`. Contributors that are accustomed to the current structure will likely need to spend a little time coming up to speed with the location of various parts.
   
   ### Rejected Alternatives
   
   n/a
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org