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