Quickstart

Installation

WaffleConf only has Flask as a hard requirement. You can install the extension by running:

pip install Flask-WaffleConf

Configuration

Simple usage of the extension requires the following configuration variables (e.g., in your application’s config.py):

  • WAFFLE_CONFS: used for specifying the configuration variables that are

    going to be stored in the database. It has the following structure:

WAFFLE_CONFS = {
     'MAX_FILESIZE': {
         'desc': 'Max upload filesize (in bytes)',
         'default': 1000
     },

     'SITENAME': {
         'desc': 'Name of the site appearing in the header',
         'default': 'Waffle'
     }
 }

For more detailed information, check Configuration.

Example Application using SQLAlchemy as ORM

    from flask import Flask, current_app
    from flask_waffleconf import WaffleConf, AlchemyWaffleStore, \
            WaffleMixin
    from flask_sqlalchemy import SQLAlchemy

    app = Flask(__name__)
    app.config['WAFFLE_CONFS'] = {
            'MAX_FILESIZE': {
                    'desc': 'Max upload filesize (in bytes)',
                    'default': 1000
            },

            'SITENAME': {
                    'desc': 'Name of the site appearing in the header',
                    'default': 'Waffle'
            }
    }

    # Define your database
    # db = ...

    # Define model
    class ConfModel(db.Model, WaffleMixin):
    __tablename__ = 'confs'

    id = db.Column(db.Integer, primary_key=True)
            key = db.Column(db.String(255), unique=True)
            value = db.Column(db.Text)

    # Create database tables
    # ...

    # Initialize WaffleConf
    configstore = AlchemyWaffleStore(db=db, model=ConfModel)
    waffle = WaffleConf(app, configstore)

@app.before_first_request
def do_before():
    """Update stored configurations."""
    waffle.state.update_conf()

    @app.route('/')
    def index():
            """Display content of configured variable 'SITENAME'."""
            state = current_app.extensions['waffleconf']

            parsed = state.parse_conf()
            # {'MAX_FILESIZE': 1000, 'SITENAME': 'Waffle'}

            return parsed['SITENAME']

Example Application using peewee as ORM

    from flask import Flask, current_app
    from flask_waffleconf import WaffleConf, PeeweeWaffleStore, \
            WaffleMixin
    import peewee

    app = Flask(__name__)
    app.config['WAFFLE_CONFS'] = {
            'MAX_FILESIZE': {
                    'desc': 'Max upload filesize (in bytes)',
                    'default': 1000
            },

            'SITENAME': {
                    'desc': 'Name of the site appearing in the header',
                    'default': 'Waffle'
            }
    }

    # Define your database
    # db = ...

    # Define model
    class ConfModel(peewee.Model, WaffleMixin):
            class Meta:
                    database = db

            key = peewee.CharField(unique=True)
            value = peewee.TextField()

    # Create database tables
    # ...

    # Initialize WaffleConf
    configstore = PeeweeWaffleStore(model=ConfModel)
    waffle = WaffleConf(app, configstore)

@app.before_first_request
def do_before():
    """Update stored configurations."""
    waffle.state.update_conf()


    @app.route('/')
    def index():
            """Display content of configured variable 'SITENAME'."""
            state = current_app.extensions['waffleconf']

            parsed = state.parse_conf()
            # {'MAX_FILESIZE': 1000, 'SITENAME': 'Waffle'}

            return parsed['SITENAME']