From 12f99ca3715de113bf963d656f5d1a1acd888812 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Tue, 12 Jan 2021 23:51:33 +0100 Subject: [PATCH] split routing into specific router --- src/Dependencies.py | 9 +++++++ src/main.py | 47 ++++--------------------------------- src/routers/DeviceRouter.py | 34 +++++++++++++++++++++++++++ src/routers/__init__.py | 0 4 files changed, 48 insertions(+), 42 deletions(-) create mode 100644 src/Dependencies.py create mode 100644 src/routers/DeviceRouter.py create mode 100644 src/routers/__init__.py diff --git a/src/Dependencies.py b/src/Dependencies.py new file mode 100644 index 0000000..a96609f --- /dev/null +++ b/src/Dependencies.py @@ -0,0 +1,9 @@ +from logic.databaseNew.Database import SessionLocal + + +def get_database(): + db = SessionLocal() + try: + yield db + finally: + db.close() diff --git a/src/main.py b/src/main.py index 700d056..ca293f7 100644 --- a/src/main.py +++ b/src/main.py @@ -1,56 +1,19 @@ import json -from typing import List import uvicorn -from fastapi import FastAPI, Depends, HTTPException -from pydantic import BaseModel -from sqlalchemy.orm import Session +from fastapi import FastAPI -from logic.databaseNew import Models, Schemas, Crud -from logic.databaseNew.Database import engine, SessionLocal +from logic.databaseNew import Models +from logic.databaseNew.Database import engine +from routers import DeviceRouter Models.Base.metadata.create_all(bind=engine) app = FastAPI() +app.include_router(DeviceRouter.router) with open('../settings.json', 'r', encoding='UTF-8') as f: settings = json.load(f) - -# Dependency -def get_db(): - db = SessionLocal() - try: - yield db - finally: - db.close() - - -class Device(BaseModel): - id: int - name: str - - -@app.get('/devices/', response_model=List[Schemas.Device]) -def read_devices(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): - return Crud.get_devices(db, skip=skip, limit=limit) - - -@app.get('/devices/{deviceId}', response_model=Schemas.Device) -def read_device(deviceId: int, db: Session = Depends(get_db)): - device = Crud.get_device(db, deviceId=deviceId) - if device is None: - raise HTTPException(status_code=404, detail='Device not found') - return device - - -@app.post("/devices/", response_model=Schemas.Device) -def create_user(device: Schemas.DeviceCreate, db: Session = Depends(get_db)): - createdDevice = Crud.get_device_by_name(db, device.name) - if createdDevice: - raise HTTPException(status_code=400, detail="Device with this name already exists") - return Crud.create_device(db=db, device=device) - - if __name__ == '__main__': uvicorn.run(app, host='0.0.0.0', port=8000) diff --git a/src/routers/DeviceRouter.py b/src/routers/DeviceRouter.py new file mode 100644 index 0000000..b560a4f --- /dev/null +++ b/src/routers/DeviceRouter.py @@ -0,0 +1,34 @@ +from typing import List + +from fastapi import APIRouter, HTTPException, Depends +from sqlalchemy.orm import Session + +from Dependencies import get_database +from logic.databaseNew import Schemas, Crud + +router = APIRouter( + prefix='/devices', + tags=['devices'], + responses={404: {'description': 'Not found'}}, +) + + +@router.get('/', response_model=List[Schemas.Device]) +async def read_devices(skip: int = 0, limit: int = 100, db: Session = Depends(get_database)): + return Crud.get_devices(db, skip=skip, limit=limit) + + +@router.get('/{deviceId}', response_model=Schemas.Device, responses={404: {'description': 'Device not found'}}) +async def read_device(deviceId: int, db: Session = Depends(get_database)): + device = Crud.get_device(db, deviceId=deviceId) + if device is None: + raise HTTPException(status_code=404, detail='Device not found') + return device + + +@router.post('/', response_model=Schemas.Device, responses={400: {'description': 'Device with this name already exists'}}) +async def create_user(device: Schemas.DeviceCreate, db: Session = Depends(get_database)): + createdDevice = Crud.get_device_by_name(db, device.name) + if createdDevice: + raise HTTPException(status_code=400, detail='Device with this name already exists') + return Crud.create_device(db=db, device=device) diff --git a/src/routers/__init__.py b/src/routers/__init__.py new file mode 100644 index 0000000..e69de29 -- GitLab