use Pydantic settings
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2024-09-06 23:12:31 +03:00
parent 72b85257d0
commit 4d3644e437
3 changed files with 40 additions and 157 deletions

View File

@@ -7,23 +7,21 @@ from typing import Literal
import motor.motor_asyncio
from bson import json_util
from bson.objectid import ObjectId
from dotenv import find_dotenv, load_dotenv
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles
from prettytable import PrettyTable
from pydantic import BaseModel
env_file = find_dotenv(".env")
load_dotenv("../.env")
IS_PROD = os.getenv("PRODUCTION", "") == "true"
from pydantic import BaseModel, Field
from pydantic_settings import BaseSettings, SettingsConfigDict
class Config:
MONGO_SERVER: str = os.environ.get("MONGO_SERVER", "")
MONGO_DB: str = os.environ.get("MONGO_DB", "")
class Settings(BaseSettings):
model_config = SettingsConfigDict(env_file="../.env")
is_prod: bool = Field(default=False)
mongo_server: str = Field(default="")
mongo_db: str = Field(default="")
class Document(BaseModel):
@@ -35,18 +33,14 @@ class Document(BaseModel):
async def lifespan(app: FastAPI):
table = PrettyTable()
table.field_names = ["VARIABLE", "VALUE"]
table.add_rows(
[
[env_variable, os.environ.get(env_variable)]
for env_variable in ["MONGO_SERVER", "MONGO_DB"]
]
)
table.add_rows(Settings().__dict__.items())
print(table)
yield
app = FastAPI(openapi_url=("/openapi.json" if not IS_PROD else ""), lifespan=lifespan)
app = FastAPI(
openapi_url=("/openapi.json" if not Settings().is_prod else ""), lifespan=lifespan
)
app.add_middleware(
CORSMiddleware,
@@ -56,8 +50,8 @@ app.add_middleware(
allow_headers=["*"],
)
client = motor.motor_asyncio.AsyncIOMotorClient(Config.MONGO_SERVER, 27017)
db = client[Config.MONGO_DB]
client = motor.motor_asyncio.AsyncIOMotorClient(Settings().mongo_server, 27017)
db = client[Settings().mongo_db]
def object_id_from_date(date: int) -> ObjectId: