Uncomment below for banners
Flask-Continuum is a lightweight Flask extension for providing data provenance and versioning support to Flask applications using SQLAlchemy. It is built on top of the sqlalchemy-continuum package, and provides a more Flask-y development experience for app configuration. If you'd like to configure your application with sqlalchemy-continuum
directly, consult the sqlalchemy-continuum
documentation.
To install the latest stable release via pip, run:
$ pip install Flask-Continuum
Alternatively with easy_install, run:
$ easy_install Flask-Continuum
To install the bleeding-edge version of the project (not recommended):
$ git clone http://github.com/bprinty/Flask-Continuum.git
$ cd Flask-Continuum
$ python setup.py install
Setting up the flask application with extensions:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_continuum import Continuum
app = Flask(__name__)
db = SQLAlchemy(app)
continuum = Continuum(app, db)
Or, using via the Flask app factory pattern:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_continuum import Continuum
db = SQLAlchemy()
continuum = Continuum(db=db)
app = Flask(__name__)
db.init_app(app)
continuum.init_app(app)
The following is a minimal example highlighting how the extension is used. Much of the example was taken from the SQLAlchemy-Continuum documentation to show how this plugin extends that package for a Flask application:
from flask_continuum import VersioningMixin
# defining database schema
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)
# later in api or request handlers
article = Article(name='Some article', content='Some content')
session.add(article)
session.commit()
# article has now one version stored in database
article.versions[0].name
# 'Some article'
article.name = 'Updated name'
session.commit()
article.versions[1].name
# 'Updated name'
# lets revert back to first version
article.versions[0].revert()
article.name
# 'Some article'
For more detailed documentation, see the Docs.
File an issue in the GitHub issue tracker.