Skip to main content

Flask-AppConfig

Allows you to configure an application using pre-set methods.

from flask_appconfig import AppConfig

def create_app(configfile=None):
    app = Flask('myapp')
    AppConfig(app, configfile)
    return app

The application returned by create_app will, in order:

  1. Load default settings from a module called myapp.default_config, if it exists. (method described in http://flask.pocoo.org/docs/config/#configuring-from-files )

  2. Load settings from a configuration file whose name is given in the environment variable MYAPP_CONFIG (see link from 1.).

  3. Load json or string values directly from environment variables that start with a prefix of MYAPP_, i.e. setting MYAPP_SQLALCHEMY_ECHO=true will cause the setting of SQLALCHEMY_ECHO to be True.

Any of these behaviors can be altered or disabled by passing the appropriate options to the constructor or init_app().

Heroku support

Flask-AppConfig supports configuring a number of services through HerokuConfig:

from flask_appconfig import HerokuConfig

def create_app(configfile=None):
    app = Flask('myapp')
    HerokuConfig(app, configfile)
    return app

Works like the example above, but environment variables set by various Heroku addons will be parsed as json and converted to configuration variables accordingly. Forexample, when enabling Mailgun, the configuration of Flask-Mail will be automatically be set correctly.

Using “ENV-only”

If you only want to use the environment-parsing functions of Flask-AppConfig, the appropriate functions are exposed:

from flask_appconfig.heroku import from_heroku_envvars
from flask_appconfig.env import from_envvars

# from environment variables. note that you need to set the prefix, as
# no auto-detection can be done without an app object
from_envvars(app.config, prefix=app.name.upper() + '_')

# also possible: parse heroku configuration values
# any dict-like object will do as the first parameter
from_heroku_envvars(app.config)

Installation

Via PyPI:

$ pip install flask-appconfig

Requires Python 2.7.

flask utility

If you want to get started quickly without thinking a lot about writing a run script, the flask utility supports the create_app/factory pattern:

$ flask --app=myapp dev

This will import a module myapp, and call myapp.run(debug=True).

Other options can come in handy as well:

$ flask --app=myapp dev -S -p 8000

Runs the app on port 8080, with SSL enabled. You can also set the FLASK_APP environment variable or set FLASK_APP inside .env and omit the --app parameter.

Note that the flask utility is subject to change, as it will conflict with the CLI functionality of Flask 1.0. The API is currently kept close, but it will see changes once Flask 1.0 is released.

Flask-Debug and Flask-DebugToolbar support

flask automatically activates Flask-Debug and Flask-DebugToolbar on your application; this allows to have it installed locally while not having to install any debug code in production. You can suppress this behavior with the -E/--no-flask-debug flag.

Note that these features are only enabled if you install either of these extensions manually; they are not dependencies of Flask-Appconfig.

Thoughts on Configuration

There is a lot of ways to configure a Flask application and often times, less-than-optimal ones are chosen in a hurry.

This extension aims to do three things:

  1. Set a “standard” of doing configuration that is flexible and in-line with the official docs and (what I consider) good practices.

  2. Make it as convenient as possible to provide these configuration methods in an application.

  3. Auto-configure on Heroku as much as possible without sacrificing 1. and 2.

12factor.net seems to capture a good amount of good thoughts on the issue and Flask-Appconfig should aid you in writing an application that follows the principles laid out there.

Providing defaults

Defaults should be included and overridable, without altering the file containing the defaults.

Separate code and configuration

It should be possible to install the app to a read-only (possibly system-wide) location, without having to store configuration files (or, even worse, configuration modules) inside its folders.

Environment variables and instance folders make this possible. As an added benefit, configuration does not need to be stored alongside the code in version control.

No code necessary for most deployments using the factory-method pattern

When deploying with gunicorn, passing myapp:create_app() suffices to create an app instance, no boilerplate code to create the WSGI app should be necessary.

Multiple instances

Running multiple apps inside the same interpreter should also be possible. While this is slightly more complicated and may occasionally violate the “no-code” guideline above, it’s still straightforward by using configuration file parameters.

Development

Flask-AppConfig is under “conceptional development”. The API or semantics may change in the future.

Send pull requests for more Heroku-apps to be supported. Send feedback via mail.

Changelog

Backwards-incompatible changes, as they were introduced:

0.12

0.11

  • The flaskdev tool has been replaced with flask.

  • Using the new flask tool auto-reloading will also change by default. If a syntax error is introduced to the code, the app will try to restart after two seconds by default, instead of crashing. This can be suppressed with the ‘–extended-reload 0’ flag.

  • If the app import fails, flask will add . to sys.path and try to to import once again.

  • Experimental commands serve and db have been added.

0.4

  • Environment variables are no longer prefixed with FLASK_ by default, but rather use APPNAME_ (with APPNAME being the applications name in uppercase).

  • MYAPP_SETTINGS became MYAPP_CONFIG, default_settings became default_config.

Metadata

Release files for flask-appconfig-current 0.13.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for flask-appconfig-current 0.13.2
File Size Uploaded Provenance Actions
flask-appconfig-current-0.13.2.tar.gz 17.4 kB Without provenance Details for flask-appconfig-current-0.13.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for flask-appconfig-current 0.13.2
File Interpreter ABI Platform Actions
flask_appconfig_current-0.13.2-py3-none-any.whl Python 3 none any Details for flask_appconfig_current-0.13.2-py3-none-any.whl

Total release size: 32.4 kB

Release files / flask-appconfig-current-0.13.2.tar.gz

Download URL flask-appconfig-current-0.13.2.tar.gz
Size 17.4 kB
Tags Source
SHA-256 checksum
How to use checksums
7ebef3ed95dfd83833c5663f5ce5dc2a2d2ef26e6e0038d91b048d49897d1c6d
BLAKE2b-256 checksum
How to use checksums
0de2bf703cc343b560f81d814b3b3a514e6cf8a81dd54ce030945789e53c52cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.5

Release files / flask_appconfig_current-0.13.2-py3-none-any.whl

Download URL flask_appconfig_current-0.13.2-py3-none-any.whl
Size 15.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2fed6e61a67879a5aba98ab18995734a6a9b0e9d5fab0e702435b136053d4c81
BLAKE2b-256 checksum
How to use checksums
b450813484b637f0dbb85bbc6fdaccaf93b573aedd5be805cbf4b84dfbc50775
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.5

Security for flask-appconfig-current 0.13.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page