API

Base

class flask_continuum.Continuum(app=None, db=None, migrate=None, user_cls=None, engine=None, current_user=<function fetch_current_user_id>, plugins=[])

Flask extension class for module, which sets up all flask-related capabilities provided by the module. This object can be initialized directly:

from flask import Flask
from flask_version import Version

app = Flask(__name__)
db = SQLAlchemy()
continuum = Continuum(app, db)

Or lazily via factory pattern:

db = SQLAlchemy()
continuum = Continuum(db=db)
app = Flask(__name__)
continuum.init_app(app)

To configure SQLAlchemy-Continuum with additional plugins, use the plugins argument to the extension:

from sqlalchemy.continuum.plugins import PropertyModTrackerPlugin

db = SQLAlchemy()
continuum = Continuum(db=db, plugins=[PropertyModTrackerPlugin()])
app = Flask(__name__)
continuum.init_app(app)

You can also use this plugin with sqlalchemy directly (i.e. not using Flask-SQLAlchemy). To do so, simply pass the database engine to this plugin upon instantiation:

engine = create_engine('postgresql://...')
continuum = Continuum(engine=engine)
app = Flask(__name__)
continuum.init_app(app)

Finally, to associate all transactions with users from a user table in the application database, you can set the user_cls parameter to the name of the table where users are stored:

app = Flask(__name__)
db = SQLAlchemy(app)
continuum = Continuum(app, db, user_cls='Users')
Arguments:

app (Flask): Flask application to associate with plugin. db (SQLAlchemy): SQLAlchemy extension to associate with plugin. user_cls (str): Name of user class used in application. engine (Engine): SQLAlchemy engine to associate with plugin. current_user (callable): Callable object to determine user associated

with request.
plugins (list): List of other SQLAlchemy-Continuum plugins to install.
See: `https://sqlalchemy-continuum.readthedocs.io/en/latest/plugins.html`_ for more information.
init_app(app, db=None)

Initialize application via lazy factory pattern.

Args:
app (Flask): Flask application. db (SQAlchemy): Flask SQLAlchemy extension.

Databse Mixins

class flask_continuum.VersioningMixin

Database mixin adding versioning support and additional helper methods to content models in application. To use this mixin in a model, you can configure it like so:

class Article(db.Model, VersioningMixin):
    __tablename__ = 'article'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.Unicode(255))
    content = db.Column(db.UnicodeText)
    updated_at = db.Column(db.DateTime, default=datetime.now)
    created_at = db.Column(db.DateTime, onupdate=datetime.now)

This will implicitly add versioning support to the model.

changeset

Return SQLAlchemy-Continuum changeset for object.

modified

Return boolean describing if object has been modified.

records

Return list of records in versioning history.