Flask-Settings

Flask settings extension is similar to Django settings.


Keywords
flask, settings
License
MIT
Install
pip install Flask-Settings==0.0.3

Documentation

flask-settings

Flask settings extension is similar to Django settings.

Build Status Coverage Status Code Health PyPI Version

Installation

pip install flask-settings

How to use

File app/settings/default.py

from flask_settings import BasicConfig


class DefaultConfig(BasicConfig):
    SQLALCHEMY_DATABASE_PROTOCOL = 'postgresql'
    SQLALCHEMY_DATABASE_HOST = 'localhost'
    SQLALCHEMY_DATABASE_PORT = 5432
    SQLALCHEMY_DATABASE_USERNAME = 'postgres'
    SQLALCHEMY_DATABASE_PASSWORD = 'postgres'
    SQLALCHEMY_DATABASE_NAME = 'default'

    @property
    def SQLALCHEMY_DATABASE_URI(self):
        # calculated constant
        return '{protocol}://{username}:{password}@{host}:{port}/{db}'.format(
            protocol=self.SQLALCHEMY_DATABASE_PROTOCOL,
            username=self.SQLALCHEMY_DATABASE_USERNAME,
            password=self.SQLALCHEMY_DATABASE_PASSWORD,
            host=self.SQLALCHEMY_DATABASE_HOST,
            port=self.SQLALCHEMY_DATABASE_PORT,
            db=self.SQLALCHEMY_DATABASE_NAME)

File app/settings/development.py

from app.settings.default import DefaultConfig


class DevelopmentConfig(DefaultConfig):
    DEBUG = True

    SQLALCHEMY_DATABASE_NAME = 'development'

File app/settings/testing.py

from app.settings.default import DefaultConfig


class TestingConfig(DefaultConfig):
    TESTING = True

    SQLALCHEMY_DATABASE_NAME = 'testing'

File app/settings/production.py

from app.settings.default import DefaultConfig


class ProductionConfig(DefaultConfig):
    SQLALCHEMY_DATABASE_HOST = '10.0.0.1'
    SQLALCHEMY_DATABASE_USERNAME = 'user'
    SQLALCHEMY_DATABASE_PASSWORD = 'password'
    SQLALCHEMY_DATABASE_NAME = 'production'

File app/application.py

from flask import Flask
from flask_settings import Settings
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)

settings = Settings(app)

db = SQLAlchemy(app)
db.create_all(app=app)


@app.route('/')
def index_page():
    return 'database name: ' + settings.SQLALCHEMY_DATABASE_NAME


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

The global settings variable can be used in any module with application context:

from flask import Blueprint
from flask_settings.globals import settings


bp = Blueprint(__name__, __name__)


@bp.route('/')
def index_page():
    return 'database name: ' + settings.SQLALCHEMY_DATABASE_NAME

Run application in development mode:

FLASK_SETTINGS="development" python app/application.py

Run application tests in testing mode:

FLASK_SETTINGS="testing" nosetests

Run application in production mode:

FLASK_SETTINGS="production" uwsgi --wsgi-file=app/application.py --callable=app --http=0.0.0.0:5000