61 lines
No EOL
2.7 KiB
Python
61 lines
No EOL
2.7 KiB
Python
from __future__ import annotations
|
|
import os
|
|
|
|
from flask import Flask
|
|
|
|
from crudkit import ProdConfig
|
|
from crudkit.api.flask_api import generate_crud_blueprint
|
|
from crudkit.core.service import CRUDService
|
|
from crudkit.integrations.flask import init_app
|
|
|
|
from .config import DevConfig
|
|
|
|
from .routes.index import init_index_routes
|
|
|
|
def create_app(config_cls=DevConfig) -> Flask:
|
|
app = Flask(__name__)
|
|
|
|
runtime = init_app(app, config=ProdConfig)
|
|
print(f"Effective DB URL: {str(runtime.engine.url)}")
|
|
|
|
from . import models as _models
|
|
_models.Base.metadata.create_all(bind=runtime.engine)
|
|
|
|
Session = app.extensions["crudkit"].get("Session")
|
|
if Session is None:
|
|
SessionFactory = runtime.session_factory
|
|
Session = SessionFactory
|
|
|
|
session = Session
|
|
|
|
area_service = CRUDService(_models.Area, session)
|
|
brand_service = CRUDService(_models.Brand, session)
|
|
device_type_service = CRUDService(_models.DeviceType, session)
|
|
image_service = CRUDService(_models.Image, session)
|
|
inventory_service = CRUDService(_models.Inventory, session)
|
|
room_function_service = CRUDService(_models.RoomFunction, session)
|
|
room_service = CRUDService(_models.Room, session)
|
|
user_service = CRUDService(_models.User, session)
|
|
work_log_service = CRUDService(_models.WorkLog, session)
|
|
work_note_service = CRUDService(_models.WorkNote, session)
|
|
|
|
app.register_blueprint(generate_crud_blueprint(_models.Area, area_service), url_prefix="/api/area")
|
|
app.register_blueprint(generate_crud_blueprint(_models.Brand, brand_service), url_prefix="/api/brand")
|
|
app.register_blueprint(generate_crud_blueprint(_models.DeviceType, device_type_service), url_prefix="/api/device_type")
|
|
app.register_blueprint(generate_crud_blueprint(_models.Image, image_service), url_prefix="/api/image")
|
|
app.register_blueprint(generate_crud_blueprint(_models.Inventory, inventory_service), url_prefix="/api/inventory")
|
|
app.register_blueprint(generate_crud_blueprint(_models.RoomFunction, room_function_service), url_prefix="/api/room_function")
|
|
app.register_blueprint(generate_crud_blueprint(_models.Room, room_service), url_prefix="/api/room")
|
|
app.register_blueprint(generate_crud_blueprint(_models.User, user_service), url_prefix="/api/user")
|
|
app.register_blueprint(generate_crud_blueprint(_models.WorkLog, work_log_service), url_prefix="/api/work_log")
|
|
app.register_blueprint(generate_crud_blueprint(_models.WorkNote, work_note_service), url_prefix="/api/work_note")
|
|
|
|
init_index_routes(app)
|
|
|
|
@app.teardown_appcontext
|
|
def _remove_session(_exc):
|
|
sess = app.extensions["crudkit"].get("Session")
|
|
if sess is not None:
|
|
sess.remove()
|
|
|
|
return app |