DAS_2024_1/agliullov_daniyar_lab_3/user_service/main.py
2024-12-31 08:10:29 +04:00

81 lines
2.0 KiB
Python

import datetime
import time
import json
# import firebase_admin
import uvicorn
from fastapi import FastAPI, Depends, Body
from fastapi.staticfiles import StaticFiles
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel
from sqlalchemy.exc import DBAPIError
from starlette.requests import Request
from starlette.responses import JSONResponse
from auth import *
app = FastAPI(
title="Smart lock",
root_path="/users"
)
@app.get("/docs", include_in_schema=False)
async def custom_swagger_ui_html(req: Request):
root_path = req.scope.get("root_path", "").rstrip("/")
openapi_url = root_path + app.openapi_url
return get_swagger_ui_html(
openapi_url=openapi_url,
title="API",
)
app.include_router(
fastapi_users.get_auth_router(auth_backend),
prefix="/auth",
tags=["Auth"],
)
app.include_router(
fastapi_users.get_register_router(UserRead, UserCreate),
prefix="/auth",
tags=["Auth"],
)
# firebase
# cred = credentials.Certificate("../serviceAccountKey.json")
# try:
# fire_app = firebase_admin.initialize_app(cred)
# except ValueError:
# pass
class Message(BaseModel):
msg: str
@app.post("/msg")
def debug_message_from_user(msg: Message = Body(), user: User = Depends(current_user_optional)):
print(datetime.datetime.now(), end=' ')
if user is not None:
print(user.__dict__)
print(msg.msg)
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
start_time = time.perf_counter()
response = await call_next(request)
process_time = time.perf_counter() - start_time
print(f"Finished in {process_time:.3f}")
response.headers["X-Process-Time"] = str(process_time)
return response
@app.exception_handler(DBAPIError)
def authjwt_exception_handler(request: Request, exc: DBAPIError):
return JSONResponse(
status_code=500,
content={"detail": jsonable_encoder(exc) | {"args": jsonable_encoder(exc.args)}}
)
if __name__ == '__main__':
uvicorn.run(app=app, host="0.0.0.0", port=8000)