[Flask] Flask RuntimeError: Working outside of application context.

Arup Rakshit ar at zeit.io
Wed Jun 12 16:31:29 EDT 2019


Hello All,

I have the following factory function.

from flask import Flask, jsonify
import os
import pprint


def create_app(test_config=None):
    """Create and configure an instance of the Flask application."""
    app = Flask(__name__, instance_relative_config=True)

    app.config.from_mapping(
        # a default secret that should be overridden by instance config
        SECRET_KEY="dev",
        # store the database in the instance folder
        DATABASE="awesome_recipes_dev",
    )

    if test_config is None:
        # load the instance config, if it exists, when not testing
        app.config.from_pyfile("config.py", silent=True)
    else:
        # load the test config if passed in
        app.config.update(test_config)

    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    from app import db

    db.init_app(app)

    @app.shell_context_processor
    def shell_context():
        from app.models.recipe import Recipe

        return {
            "app": app,
            "db": db.get_db(),
            "pp": pprint.PrettyPrinter(indent=4).pprint,
            "Recipe": Recipe,
        }

    @app.route("/")
    def index():
        return jsonify({"hello": "World"})

    from .recipes.views import recipes_blueprint

    app.register_blueprint(recipes_blueprint)

    return app

Now when I run flask shell I get error:

Traceback (most recent call last):
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/bin/flask", line 11, in <module>
    sys.exit(main())
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/lib/python3.7/site-packages/flask/cli.py", line 906, in main
    cli.main(args=args, prog_name=name)
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/lib/python3.7/site-packages/flask/cli.py", line 569, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/lib/python3.7/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/lib/python3.7/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/lib/python3.7/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/lib/python3.7/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/lib/python3.7/site-packages/flask/cli.py", line 418, in decorator
    with __ctx.ensure_object(ScriptInfo).load_app().app_context():
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/lib/python3.7/site-packages/flask/cli.py", line 381, in load_app
    app = locate_app(self, import_name, name)
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/lib/python3.7/site-packages/flask/cli.py", line 255, in locate_app
    return find_best_app(script_info, module)
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/lib/python3.7/site-packages/flask/cli.py", line 77, in find_best_app
    app = call_factory(script_info, app_factory)
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/lib/python3.7/site-packages/flask/cli.py", line 117, in call_factory
    return app_factory()
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/app/__init__.py", line 49, in create_app
    from .recipes.views import recipes_blueprint
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/app/recipes/views.py", line 3, in <module>
    from ..models.recipe import Recipe
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/app/models/recipe.py", line 4, in <module>
    class Recipe:
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/app/models/recipe.py", line 6, in Recipe
    __db__ = get_db()
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/app/db.py", line 22, in get_db
    if "db" not in g:
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/lib/python3.7/site-packages/werkzeug/local.py", line 380, in <lambda>
    __contains__ = lambda x, i: i in x._get_current_object()
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/lib/python3.7/site-packages/werkzeug/local.py", line 307, in _get_current_object
    return self.__local()
  File "/Users/aruprakshit/Code/flask/awesome_recipes/backend/venv/lib/python3.7/site-packages/flask/globals.py", line 44, in _lookup_app_object
    raise RuntimeError(_app_ctx_err_msg)
RuntimeError: Working outside of application context.

I am not able to figure out where I need to push the app context to make it work. Can anyone help me? 

My code is https://gitlab.com/aruprakshit/flask_awesome_recipes/tree/master/app 

Thanks,

Arup Rakshit
ar at zeit.io





More information about the Flask mailing list