I\'m wondering where the best place would be to create a scoped session for use in falcon.
From reading the flask-sqlalchemy code, it, in a round about way, does somethi
There is a package on pypi, falcon-sqla, that provides a middleware to manage SQLAlchemy sessions with Falcon.
It uses the request context object to add a different session to each http request, avoiding the need to use a scoped session.
You can use middleware
Example.
Create engine, session_factory and scoped_session object.
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session
from sqlalchemy.orm import sessionmaker
import settings
engine = create_engine(
'{engine}://{username}:{password}@{host}:{port}/{db_name}'.format(
**settings.POSTGRESQL
)
)
session_factory = sessionmaker(bind=engine)
Session = scoped_session(session_factory)
Create middleware.
class SQLAlchemySessionManager:
"""
Create a scoped session for every request and close it when the request
ends.
"""
def __init__(self, Session):
self.Session = Session
def process_resource(self, req, resp, resource, params):
resource.session = self.Session()
def process_response(self, req, resp, resource, req_succeeded):
if hasattr(resource, 'session'):
Session.remove()
Register middleware.
import falcon
app = falcon.API(middleware=[
SQLAlchemySessionManager(Session),
])
Session is accessible in every request.
import falcon
class MyAPI:
def on_get(self, req, resp):
# You can access self.session here
# self.session.add(foo)
# self.session.commit()