From de8b84b46e62fc84d079eda6bca66408bf97ab3b Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Wed, 18 Aug 2021 22:01:33 +0200 Subject: [PATCH] moved general routes to own router --- src/Settings.py | 3 ++ src/StorageLeaf.py | 39 ++++------------------ src/logic/database/DatabaseInfoProvider.py | 16 +++++++++ src/logic/routers/GeneralRouter.py | 25 ++++++++++++++ 4 files changed, 51 insertions(+), 32 deletions(-) create mode 100644 src/logic/database/DatabaseInfoProvider.py create mode 100644 src/logic/routers/GeneralRouter.py diff --git a/src/Settings.py b/src/Settings.py index 5b76c1d..fb1f8ef 100644 --- a/src/Settings.py +++ b/src/Settings.py @@ -2,3 +2,6 @@ import json with open('../settings.json', 'r', encoding='UTF-8') as f: SETTINGS = json.load(f) + +with open('version.json', 'r', encoding='UTF-8') as f: + VERSION = json.load(f)['version'] diff --git a/src/StorageLeaf.py b/src/StorageLeaf.py index a42fb06..4bf7fc6 100644 --- a/src/StorageLeaf.py +++ b/src/StorageLeaf.py @@ -3,27 +3,23 @@ import os import uvicorn from TheCodeLabs_BaseUtils.DefaultLogger import DefaultLogger -from fastapi import FastAPI, Depends -from fastapi.openapi.docs import get_swagger_ui_html, get_redoc_html +from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware -from sqlalchemy.orm import Session +from fastapi.openapi.docs import get_swagger_ui_html, get_redoc_html from starlette.responses import RedirectResponse, FileResponse -from Settings import SETTINGS +from Settings import SETTINGS, VERSION from logic import Constants -from logic.Dependencies import get_database from logic.DiscoveryService import DiscoveryService -from logic.database import Models, Schemas, Crud +from logic.database import Models from logic.database.Database import engine -from logic.routers import DeviceRouter +from logic.routers import DeviceRouter, GeneralRouter from logic.routers import SensorRouter, MeasurementRouter LOGGER = DefaultLogger().create_logger_if_not_exists(Constants.APP_NAME) -databaseSettings = SETTINGS['database'] +DATABASE_SETTINGS = SETTINGS['database'] -with open('version.json', 'r', encoding='UTF-8') as f: - VERSION = json.load(f)['version'] # create database tables Models.Base.metadata.create_all(bind=engine) @@ -54,14 +50,6 @@ def favicon(): return FileResponse(os.path.join(app.root_path, 'static', 'favicon.ico'), media_type='image/vnd.microsoft.icon') -@app.get('/version', - summary='Gets information about the server version', - tags=['general'], - response_model=Schemas.Version) -async def version(): - return Schemas.Version(**VERSION) - - @app.get('/docs', include_in_schema=False) def overridden_swagger(): return get_swagger_ui_html(openapi_url='/openapi.json', title='The StorageLeaf API', @@ -74,20 +62,7 @@ def overridden_redoc(): redoc_favicon_url=app.url_path_for('favicon')) -@app.get('/databaseInfo', - summary='Gets information about the database version', - tags=['general'], - response_model=Schemas.DatabaseInfo) -async def databaseInfo(db: Session = Depends(get_database)): - numberOfMeasurements = Crud.get_total_number_of_measurements(db) - - sizeInBytes = os.path.getsize(databaseSettings['databasePath']) - sizeInMegaBytes = sizeInBytes // 1024 // 1024 - - return Schemas.DatabaseInfo(number_of_measurements=numberOfMeasurements, - size_on_disk_in_mb=sizeInMegaBytes) - - +app.include_router(GeneralRouter.router) app.include_router(DeviceRouter.router) app.include_router(SensorRouter.router) app.include_router(MeasurementRouter.router) diff --git a/src/logic/database/DatabaseInfoProvider.py b/src/logic/database/DatabaseInfoProvider.py new file mode 100644 index 0000000..4089791 --- /dev/null +++ b/src/logic/database/DatabaseInfoProvider.py @@ -0,0 +1,16 @@ +import os + +from sqlalchemy.orm import Session + +from Settings import SETTINGS +from logic.database import Schemas, Crud + + +def get_database_info(db: Session) -> Schemas.DatabaseInfo: + numberOfMeasurements = Crud.get_total_number_of_measurements(db) + + sizeInBytes = os.path.getsize(SETTINGS['database']['databasePath']) + sizeInMegaBytes = sizeInBytes // 1024 // 1024 + + return Schemas.DatabaseInfo(number_of_measurements=numberOfMeasurements, + size_on_disk_in_mb=sizeInMegaBytes) \ No newline at end of file diff --git a/src/logic/routers/GeneralRouter.py b/src/logic/routers/GeneralRouter.py new file mode 100644 index 0000000..81938bc --- /dev/null +++ b/src/logic/routers/GeneralRouter.py @@ -0,0 +1,25 @@ +from fastapi import APIRouter, Depends +from sqlalchemy.orm import Session + +from Settings import VERSION +from logic.Dependencies import get_database +from logic.database import Schemas, DatabaseInfoProvider + +router = APIRouter( + prefix='/general', + tags=['general'] +) + + +@router.get('/version', + summary='Gets information about the server version', + response_model=Schemas.Version) +async def version(): + return Schemas.Version(**VERSION) + + +@router.get('/databaseInfo', + summary='Gets information about the database', + response_model=Schemas.DatabaseInfo) +async def databaseInfo(db: Session = Depends(get_database)): + return DatabaseInfoProvider.get_database_info(db) -- GitLab