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/
|
To start development in local, go to the root directory of the project YOUR_WORKSPACE_PATH/devops/
|
||||||
```bash
|
```bash
|
||||||
cd scripts/mongodb
|
docker compose -f app/scripts/mongodb/docker-compose.yml up -d
|
||||||
docker compose -f scripts/mongodb/docker-compose.yml up -d
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
Then run the app
|
Then run the app
|
||||||
```bash
|
```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 import FastAPI
|
||||||
from fastapi.openapi.utils import get_openapi
|
from fastapi.openapi.utils import get_openapi
|
||||||
|
|
||||||
from providers import common
|
from app.providers import common
|
||||||
from providers.logger import register_logger
|
from app.providers.logger import register_logger
|
||||||
from providers import router
|
from app.providers import router
|
||||||
from providers import database
|
from app.providers import database
|
||||||
from providers import metrics
|
from app.providers import metrics
|
||||||
from providers import probes
|
from app.providers import probes
|
||||||
from providers import exception_handler
|
from app.providers import exception_handler
|
||||||
from common.config.app_settings import app_settings
|
from app.common.config.app_settings import app_settings
|
||||||
|
|
||||||
def create_app() -> FastAPI:
|
def create_app() -> FastAPI:
|
||||||
logging.info("App initializing")
|
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:
|
class HelloWorldDao:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -1,5 +1,5 @@
|
|||||||
from .base_logger import LoggerBase
|
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):
|
class ApplicationLogger(LoggerBase):
|
||||||
def __init__(self, application_activities: dict[str, any] = {}) -> None:
|
def __init__(self, application_activities: dict[str, any] = {}) -> None:
|
||||||
@ -1,5 +1,5 @@
|
|||||||
from loguru import logger as guru_logger
|
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
|
from typing import Dict, Any, Optional
|
||||||
import socket
|
import socket
|
||||||
import json
|
import json
|
||||||
@ -9,7 +9,7 @@ import sys
|
|||||||
import inspect
|
import inspect
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from common.log.json_sink import JsonSink
|
from app.common.log.json_sink import JsonSink
|
||||||
|
|
||||||
class LoggerBase:
|
class LoggerBase:
|
||||||
binded_loggers = {}
|
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 fastapi.responses import RedirectResponse
|
||||||
from common.config.site_settings import site_settings
|
from app.common.config.site_settings import site_settings
|
||||||
from bootstrap.application import create_app
|
from app.bootstrap.application import create_app
|
||||||
|
|
||||||
app = 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 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):
|
def register(app):
|
||||||
@ -1,9 +1,9 @@
|
|||||||
import asyncio
|
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 beanie import init_beanie
|
||||||
from motor.motor_asyncio import AsyncIOMotorClient
|
from motor.motor_asyncio import AsyncIOMotorClient
|
||||||
from common.models import db_models
|
from app.common.models import db_models
|
||||||
from common.probes import ProbeResult
|
from app.common.probes import ProbeResult
|
||||||
|
|
||||||
client = AsyncIOMotorClient(
|
client = AsyncIOMotorClient(
|
||||||
app_settings.APP_MONGODB_URI,
|
app_settings.APP_MONGODB_URI,
|
||||||
@ -1,5 +1,4 @@
|
|||||||
from loguru import logger as guru_logger
|
from app.common.log.base_logger import LoggerBase
|
||||||
from common.log.base_logger import LoggerBase
|
|
||||||
|
|
||||||
|
|
||||||
def register_logger():
|
def register_logger():
|
||||||
@ -1,6 +1,6 @@
|
|||||||
import logging
|
import logging
|
||||||
from prometheus_fastapi_instrumentator import Instrumentator
|
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):
|
def register(app):
|
||||||
instrumentator = (
|
instrumentator = (
|
||||||
@ -1,5 +1,5 @@
|
|||||||
from common.probes import ProbeManager, ProbeType
|
from app.common.probes import ProbeManager, ProbeType
|
||||||
from common.probes.adapters import FastAPIAdapter
|
from app.common.probes.adapters import FastAPIAdapter
|
||||||
from .database import check_database_initialized
|
from .database import check_database_initialized
|
||||||
|
|
||||||
def register(app):
|
def register(app):
|
||||||
@ -1,4 +1,4 @@
|
|||||||
from routes import api_router
|
from app.routes import api_router
|
||||||
|
|
||||||
from starlette import routing
|
from starlette import routing
|
||||||
|
|
||||||
@ -1,5 +1,5 @@
|
|||||||
from fastapi import APIRouter
|
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()
|
api_router = APIRouter()
|
||||||
@ -1,7 +1,7 @@
|
|||||||
from fastapi import APIRouter
|
from fastapi import APIRouter
|
||||||
from loguru import logger
|
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()
|
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
|
beanie==1.29.0
|
||||||
click==8.2.0
|
|
||||||
dnspython==2.7.0
|
|
||||||
exceptiongroup==1.3.0
|
|
||||||
fastapi==0.115.12
|
fastapi==0.115.12
|
||||||
h11==0.16.0
|
|
||||||
httptools==0.6.4
|
|
||||||
idna==3.10
|
|
||||||
lazy-model==0.2.0
|
|
||||||
loguru==0.7.3
|
loguru==0.7.3
|
||||||
motor==3.7.0
|
motor==3.7.0
|
||||||
prometheus-fastapi-instrumentator==7.1.0
|
prometheus_fastapi_instrumentator==7.1.0
|
||||||
prometheus_client==0.21.1
|
pydantic_settings==2.9.1
|
||||||
pydantic==2.11.4
|
pytest==7.1.2
|
||||||
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
|
|
||||||
starlette==0.46.2
|
starlette==0.46.2
|
||||||
toml==0.10.2
|
|
||||||
typing-inspection==0.4.0
|
|
||||||
typing_extensions==4.13.2
|
|
||||||
uvicorn==0.34.2
|
uvicorn==0.34.2
|
||||||
uvloop==0.21.0
|
httpx==0.24.0
|
||||||
watchfiles==1.0.5
|
|
||||||
websockets==15.0.1
|
|
||||||
0
apps/devops/tests/__init__.py
Normal file
0
apps/devops/tests/__init__.py
Normal file
Loading…
Reference in New Issue
Block a user