💩(summary) init a FastAPI app

Bootsrap a generic FastAPI app to kick-start the microservice.
This commit is contained in:
lebaudantoine
2024-11-21 12:08:49 +01:00
committed by aleb_the_flash
parent 0f70b544ed
commit 16bee00eb4
4 changed files with 103 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
[project]
name = "summary"
version = "0.1.0"
dependencies = [
"fastapi[standard]>=0.105.0",
"uvicorn>=0.24.0",
"pydantic>=2.5.0",
"pydantic-settings>=2.1.0",
]
[project.optional-dependencies]
dev = [
"ruff==0.7.4",
]
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[tool.ruff]
target-version = "py310"
[tool.ruff.lint]
select = [
"B", # flake8-bugbear
"C4", # flake8-comprehensions
"D", # pydocstyle
"E", # pycodestyle error
"F", # Pyflakes
"I", # Isort
"ISC", # flake8-implicit-str-concat
"PLC", # Pylint Convention
"PLE", # Pylint Error
"PLR", # Pylint Refactor
"PLW", # Pylint Warning
"RUF100", # Ruff unused-noqa
"S", # flake8-bandit
"T20", # flake8-print
"W", # pycodestyle warning
]
[tool.ruff.lint.per-file-ignores]
"tests/*" = [
"S101", # use of assert
]
[tool.ruff.lint.pydocstyle]
# Use Google-style docstrings.
convention = "google"
[tool.ruff.lint.flake8-bugbear]
extend-immutable-calls = [
"fastapi.Depends",
"fastapi.params.Depends",
"fastapi.params.Query",
"fastapi.Query",
]

View File

@@ -0,0 +1 @@
"""Summary package."""

View File

@@ -0,0 +1,10 @@
"""Module for managing application configuration and settings."""
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
"""Configuration settings loaded from environment variables and .env file."""
app_name: str = "Awesome API"
model_config = SettingsConfigDict(env_file=".env")

View File

@@ -0,0 +1,33 @@
"""Application entry point."""
from functools import lru_cache
from typing import Annotated
from config import Settings
from fastapi import Depends, FastAPI
app = FastAPI()
@lru_cache
def get_settings():
"""Load and cache application settings."""
return Settings()
@app.get("/")
async def root(settings: Annotated[Settings, Depends(get_settings)]):
"""Root endpoint that returns app name."""
return {"message": f"Hello World, using {settings.app_name}"}
@app.get("/__heartbeat__")
async def heartbeat():
"""Health check endpoint for monitoring."""
return {"status": "ok"}
@app.get("/__lbheartbeat__")
async def lbheartbeat():
"""Health check endpoint for load balancer."""
return {"status": "ok"}