Untitled
unknown
plain_text
3 years ago
1.7 kB
5
Indexable
import logging from fastapi import Depends, FastAPI from sqlalchemy import text from sqlalchemy.orm import Session from starlette.middleware.cors import CORSMiddleware from starlette.responses import JSONResponse from property_rater.valuations_tool import models from property_rater.api_versions.api_v1.api import api_router_v1 from property_rater.config import get_app_settings from property_rater.database.session import get_database_session, get_engine logger = logging.getLogger(__name__) description = """ A Property Rater Service built on FastAPI. Served on Azure Functions: https://github.com/Azure-Samples/fastapi-on-azure-functions/ """ app = FastAPI( title="Property Rater Service", description=description, default_response_class=JSONResponse, openapi_url=f"/api/v1/openapi.json", version="1" ) models.Base.metadata.create_all(bind=get_engine()) # I'd propose wrapping this in a function, # # so it can be only called in a controlled manner. @app.on_event("startup") async def startup(session: Session = Depends(get_database_session)) -> None: logger.info("Starting service.") session.execute(text("SELECT 1")) logger.info("Service initialization completed.") @app.on_event("shutdown") async def shutdown(session: Session = Depends(get_database_session)) -> None: logger.info("Shutting down service.") session.close_all() logger.info("Service shutdown completed.") app.add_middleware( CORSMiddleware, allow_origins=[str(origin) for origin in get_app_settings().BACKEND_CORS_ORIGINS], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(api_router_v1, prefix="/api/v1")
Editor is loading...