-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
87 lines (68 loc) · 2.64 KB
/
main.py
File metadata and controls
87 lines (68 loc) · 2.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import os
import time
from pathlib import Path
from typing import Callable
import uvicorn
import redis.asyncio as redis
from fastapi import FastAPI, Depends, HTTPException, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
from fastapi_limiter import FastAPILimiter
from sqlalchemy.orm import Session
from sqlalchemy import text
from starlette.middleware.cors import CORSMiddleware
from src.conf.config import settings
from src.database.db import get_db
from src.routes import owners, cats, auth, users
app = FastAPI()
@app.on_event("startup")
async def startup():
r = await redis.Redis(host=settings.redis_host, port=settings.redis_port, password=settings.redis_password, db=0)
await FastAPILimiter.init(r)
app.add_middleware(
CORSMiddleware,
allow_origins=['http://127.0.0.1:5500', "*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.middleware("http")
async def user_agent_ban_middleware(request: Request, call_next: Callable):
user_agent = request.headers.get("user-agent")
print('----------------------------')
print(user_agent)
print('----------------------------')
response = await call_next(request)
return response
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
start_time = time.time()
print(request.client)
response = await call_next(request)
process_time = time.time() - start_time
response.headers["performance"] = str(process_time)
return response
templates = Jinja2Templates(directory='templates')
BASE_DIR = Path(__file__).parent
app.mount('/static', StaticFiles(directory=BASE_DIR / 'static'), name='static')
@app.get("/", response_class=HTMLResponse)
async def root(request: Request):
return templates.TemplateResponse('index.html', {"request": request})
@app.get("/api/healthchecker")
def healthchecker(db: Session = Depends(get_db)):
try:
# Make request
result = db.execute(text("SELECT 1")).fetchone()
if result is None:
raise HTTPException(status_code=500, detail="Database is not configured correctly")
return {"message": "Welcome to FastAPI!"}
except Exception as e:
print(e)
raise HTTPException(status_code=500, detail="Error connecting to the database")
app.include_router(auth.router, prefix='/api')
app.include_router(owners.router, prefix="/api")
app.include_router(cats.router, prefix="/api")
app.include_router(users.router, prefix='/api')
if __name__ == '__main__':
uvicorn.run("main:app", host="0.0.0.0", port=int(os.environ.get("PORT")))