Source code for eventsourcing.example.interface.flaskapp

import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy_utils.types.uuid import UUIDType

from eventsourcing.example.application import get_example_application, init_example_application
from eventsourcing.infrastructure.sqlalchemy.manager import SQLAlchemyRecordManager

# Read DB URI from environment.
uri = os.environ.get('DB_URI', 'sqlite:///:memory:')


# Construct Flask application.
application = Flask(__name__)
application.config['SQLALCHEMY_DATABASE_URI'] = uri
application.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# Define database connection.
db = SQLAlchemy(application)


# Define database tables.
[docs]class IntegerSequencedItem(db.Model): __tablename__ = 'integer_sequenced_items' id = db.Column(db.BigInteger().with_variant(db.Integer, "sqlite"), primary_key=True) sequence_id = db.Column(UUIDType(), nullable=False) position = db.Column(db.BigInteger(), nullable=False) topic = db.Column(db.String(255), nullable=False) state = db.Column(db.Text(), nullable=False) __table_args__ = db.Index('index', 'sequence_id', 'position', unique=True),
# Construct eventsourcing application. @application.before_first_request def init_example_application_with_sqlalchemy(): init_example_application( entity_record_manager=SQLAlchemyRecordManager( record_class=IntegerSequencedItem, session=db.session, ) ) # Define Web application. @application.route("/") def hello(): app = get_example_application() entity_id = app.create_new_example(foo='Hello There!').id entity = app.example_repository[entity_id] return "<h1 style='color:blue'>{}</h1>".format(entity.foo) # Run directly, with uWSGI, or otherwise as a WSGI application. # # uwsgi -H PATH_TO_VIRTUALENV --master --processes 4 --threads 2 --wsgi-file PATH_TO_THIS_FILE --http :5001 # if __name__ == "__main__": # Create tables. db.create_all() # Run the application. application.run(host='0.0.0.0', port=5001)