Untitled
unknown
plain_text
3 years ago
1.7 kB
8
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...