Add template fastapi app, test, README.md, this can be used for future extension
This commit is contained in:
parent
50087c95be
commit
c4c34e6cd7
@ -2,12 +2,19 @@ This is a template backend service based on fastapi + mongodb app
|
||||
|
||||
To start development in local, go to the root directory of the project YOUR_WORKSPACE_PATH/devops/
|
||||
```bash
|
||||
cd scripts/mongodb
|
||||
docker compose -f scripts/mongodb/docker-compose.yml up -d
|
||||
docker compose -f app/scripts/mongodb/docker-compose.yml up -d
|
||||
```
|
||||
|
||||
|
||||
Then run the app
|
||||
```bash
|
||||
uvicorn main:app --reload
|
||||
uvicorn app.main:app --reload
|
||||
```
|
||||
|
||||
In case a new dependency is added, run the following command to update the requirements.txt file
|
||||
```bash
|
||||
# optional: if you have not installed pipreqs
|
||||
pip3 install pipreqs
|
||||
|
||||
# generate requirements.txt
|
||||
pipreqs . --force
|
||||
```
|
||||
|
||||
@ -2,14 +2,14 @@ import logging
|
||||
from fastapi import FastAPI
|
||||
from fastapi.openapi.utils import get_openapi
|
||||
|
||||
from providers import common
|
||||
from providers.logger import register_logger
|
||||
from providers import router
|
||||
from providers import database
|
||||
from providers import metrics
|
||||
from providers import probes
|
||||
from providers import exception_handler
|
||||
from common.config.app_settings import app_settings
|
||||
from app.providers import common
|
||||
from app.providers.logger import register_logger
|
||||
from app.providers import router
|
||||
from app.providers import database
|
||||
from app.providers import metrics
|
||||
from app.providers import probes
|
||||
from app.providers import exception_handler
|
||||
from app.common.config.app_settings import app_settings
|
||||
|
||||
def create_app() -> FastAPI:
|
||||
logging.info("App initializing")
|
||||
3
apps/devops/app/common/daos/hello_world/__init__.py
Normal file
3
apps/devops/app/common/daos/hello_world/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
from app.common.daos.hello_world.hello_world_dao import HelloWorldDao
|
||||
|
||||
hello_world_dao = HelloWorldDao()
|
||||
@ -1,4 +1,4 @@
|
||||
from common.models.hello_world.hello_world import HelloWorld
|
||||
from app.common.models.hello_world.hello_world import HelloWorld
|
||||
|
||||
class HelloWorldDao:
|
||||
def __init__(self):
|
||||
@ -1,5 +1,5 @@
|
||||
from .base_logger import LoggerBase
|
||||
from common.config.app_settings import app_settings
|
||||
from app.common.config.app_settings import app_settings
|
||||
|
||||
class ApplicationLogger(LoggerBase):
|
||||
def __init__(self, application_activities: dict[str, any] = {}) -> None:
|
||||
@ -1,5 +1,5 @@
|
||||
from loguru import logger as guru_logger
|
||||
from common.config.log_settings import log_settings
|
||||
from app.common.config.log_settings import log_settings
|
||||
from typing import Dict, Any, Optional
|
||||
import socket
|
||||
import json
|
||||
@ -9,7 +9,7 @@ import sys
|
||||
import inspect
|
||||
import logging
|
||||
|
||||
from common.log.json_sink import JsonSink
|
||||
from app.common.log.json_sink import JsonSink
|
||||
|
||||
class LoggerBase:
|
||||
binded_loggers = {}
|
||||
4
apps/devops/app/common/models/__init__.py
Normal file
4
apps/devops/app/common/models/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
from app.common.models.hello_world.hello_world import HelloWorld
|
||||
|
||||
# list of beanie document models
|
||||
db_models = [HelloWorld]
|
||||
0
apps/devops/app/envs/alpha.yml
Normal file
0
apps/devops/app/envs/alpha.yml
Normal file
0
apps/devops/app/envs/prod.yml
Normal file
0
apps/devops/app/envs/prod.yml
Normal file
@ -1,6 +1,6 @@
|
||||
from fastapi.responses import RedirectResponse
|
||||
from common.config.site_settings import site_settings
|
||||
from bootstrap.application import create_app
|
||||
from app.common.config.site_settings import site_settings
|
||||
from app.bootstrap.application import create_app
|
||||
|
||||
app = create_app()
|
||||
|
||||
0
apps/devops/app/providers/__init__.py
Normal file
0
apps/devops/app/providers/__init__.py
Normal file
@ -1,5 +1,5 @@
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from common.config.site_settings import site_settings
|
||||
from app.common.config.site_settings import site_settings
|
||||
|
||||
|
||||
def register(app):
|
||||
@ -1,9 +1,9 @@
|
||||
import asyncio
|
||||
from common.config.app_settings import app_settings
|
||||
from app.common.config.app_settings import app_settings
|
||||
from beanie import init_beanie
|
||||
from motor.motor_asyncio import AsyncIOMotorClient
|
||||
from common.models import db_models
|
||||
from common.probes import ProbeResult
|
||||
from app.common.models import db_models
|
||||
from app.common.probes import ProbeResult
|
||||
|
||||
client = AsyncIOMotorClient(
|
||||
app_settings.APP_MONGODB_URI,
|
||||
@ -1,5 +1,4 @@
|
||||
from loguru import logger as guru_logger
|
||||
from common.log.base_logger import LoggerBase
|
||||
from app.common.log.base_logger import LoggerBase
|
||||
|
||||
|
||||
def register_logger():
|
||||
@ -1,6 +1,6 @@
|
||||
import logging
|
||||
from prometheus_fastapi_instrumentator import Instrumentator
|
||||
from common.config.app_settings import app_settings
|
||||
from app.common.config.app_settings import app_settings
|
||||
|
||||
def register(app):
|
||||
instrumentator = (
|
||||
@ -1,5 +1,5 @@
|
||||
from common.probes import ProbeManager, ProbeType
|
||||
from common.probes.adapters import FastAPIAdapter
|
||||
from app.common.probes import ProbeManager, ProbeType
|
||||
from app.common.probes.adapters import FastAPIAdapter
|
||||
from .database import check_database_initialized
|
||||
|
||||
def register(app):
|
||||
@ -1,4 +1,4 @@
|
||||
from routes import api_router
|
||||
from app.routes import api_router
|
||||
|
||||
from starlette import routing
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
from fastapi import APIRouter
|
||||
from routes.hello_world import router as hello_world_router
|
||||
from app.routes.hello_world import router as hello_world_router
|
||||
|
||||
|
||||
api_router = APIRouter()
|
||||
@ -1,7 +1,7 @@
|
||||
from fastapi import APIRouter
|
||||
from loguru import logger
|
||||
|
||||
from common.daos.hello_world import hello_world_dao
|
||||
from app.common.daos.hello_world import hello_world_dao
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@ -1,3 +0,0 @@
|
||||
from common.daos.hello_world.hello_world_dao import HelloWorldDao
|
||||
|
||||
hello_world_dao = HelloWorldDao()
|
||||
@ -1,4 +0,0 @@
|
||||
from common.models.hello_world.hello_world import HelloWorld
|
||||
|
||||
# list of beanie document models
|
||||
db_models = [HelloWorld]
|
||||
@ -1,30 +1,10 @@
|
||||
annotated-types==0.7.0
|
||||
anyio==4.9.0
|
||||
beanie==1.29.0
|
||||
click==8.2.0
|
||||
dnspython==2.7.0
|
||||
exceptiongroup==1.3.0
|
||||
fastapi==0.115.12
|
||||
h11==0.16.0
|
||||
httptools==0.6.4
|
||||
idna==3.10
|
||||
lazy-model==0.2.0
|
||||
loguru==0.7.3
|
||||
motor==3.7.0
|
||||
prometheus-fastapi-instrumentator==7.1.0
|
||||
prometheus_client==0.21.1
|
||||
pydantic==2.11.4
|
||||
pydantic-settings==2.9.1
|
||||
pydantic_core==2.33.2
|
||||
pymongo==4.12.1
|
||||
python-dotenv==1.1.0
|
||||
PyYAML==6.0.2
|
||||
sniffio==1.3.1
|
||||
prometheus_fastapi_instrumentator==7.1.0
|
||||
pydantic_settings==2.9.1
|
||||
pytest==7.1.2
|
||||
starlette==0.46.2
|
||||
toml==0.10.2
|
||||
typing-inspection==0.4.0
|
||||
typing_extensions==4.13.2
|
||||
uvicorn==0.34.2
|
||||
uvloop==0.21.0
|
||||
watchfiles==1.0.5
|
||||
websockets==15.0.1
|
||||
httpx==0.24.0
|
||||
0
apps/devops/tests/__init__.py
Normal file
0
apps/devops/tests/__init__.py
Normal file
Loading…
Reference in New Issue
Block a user