CRUDKit update.
This commit is contained in:
parent
de29d45106
commit
f1fa1f2407
8 changed files with 391 additions and 44 deletions
24
crudkit/integrations/fastapi.py
Normal file
24
crudkit/integrations/fastapi.py
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
from __future__ import annotations
|
||||
from contextlib import contextmanager
|
||||
from fastapi import Depends
|
||||
from sqlalchemy.orm import Session
|
||||
from ..engines import CRUDKitRuntime
|
||||
|
||||
_runtime = CRUDKitRuntime()
|
||||
|
||||
@contextmanager
|
||||
def _session_scope():
|
||||
SessionLocal = _runtime.session_factory
|
||||
session: Session = SessionLocal()
|
||||
try:
|
||||
yield session
|
||||
session.commit()
|
||||
except Exception:
|
||||
session.rollback()
|
||||
raise
|
||||
finally:
|
||||
session.close()
|
||||
|
||||
def get_db():
|
||||
with _session_scope() as s:
|
||||
yield s
|
||||
20
crudkit/integrations/flask.py
Normal file
20
crudkit/integrations/flask.py
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
from __future__ import annotations
|
||||
from flask import Flask
|
||||
from sqlalchemy.orm import scoped_session
|
||||
from ..engines import CRUDKitRuntime
|
||||
from ..config import Config
|
||||
|
||||
def init_app(app: Flask, *, runtime: CRUDKitRuntime | None = None, config: type[Config] | None == None):
|
||||
"""
|
||||
Initializes CRUDKit for a Flask app. Provies `app.extensions['crudkit']`
|
||||
with a runtime (engine + session_factory). Caller manages session lifecycle.
|
||||
"""
|
||||
runtime = runtime or CRUDKitRuntime(config=config)
|
||||
app.extensions.setdefault("crudkit", {})
|
||||
app.extensions["crudkit"]["runtime"] = runtime
|
||||
|
||||
Session = runtime.session_factory
|
||||
if Session is not None:
|
||||
app.extensions["crudkit"]["Session"] = scoped_session(Session)
|
||||
|
||||
return runtime
|
||||
Loading…
Add table
Add a link
Reference in a new issue