From 35fdd23ec08b222d33f3a6d0d7dda1461e2185ee Mon Sep 17 00:00:00 2001 From: Donkie Date: Sat, 1 Apr 2023 16:46:19 +0200 Subject: [PATCH] Added some test endpoints and server configuration --- .vscode/launch.json | 17 ++++++++ pyproject.toml | 2 +- requirements.txt | 1 + spoolson/api/v1/filament.py | 77 ++++++++++++++++++++++++++++++++++++- spoolson/api/v1/router.py | 16 ++++++-- spoolson/main.py | 6 ++- 6 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..a9c01ee --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python: FastAPI", + "type": "python", + "request": "launch", + "module": "uvicorn", + "args": ["spoolson.main:app"], + "jinja": true, + "justMyCode": true + } + ] +} diff --git a/pyproject.toml b/pyproject.toml index 638d56e..4baf8e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ license = {text = "AGPL-3.0-only"} [tool.ruff] select = ["ALL"] -ignore = ["A003", "D101", "D104"] +ignore = ["A003", "D101", "D104", "S104"] line-length = 120 target-version = "py39" diff --git a/requirements.txt b/requirements.txt index c20c454..dc89a76 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +uvicorn[standard]==0.21.1 fastapi==0.95.0 SQLAlchemy[asyncio]==2.0.8 pydantic==1.10.7 diff --git a/spoolson/api/v1/filament.py b/spoolson/api/v1/filament.py index 9bd8073..7d89715 100644 --- a/spoolson/api/v1/filament.py +++ b/spoolson/api/v1/filament.py @@ -3,9 +3,84 @@ from typing import Union from fastapi import APIRouter -from spoolson.api.v1.models import Filament +from spoolson.api.v1.models import Filament, Vendor router = APIRouter( prefix="/filament", tags=["filament"], ) + +# ruff: noqa: D103 + + +@router.get("/") +async def find(vendor: Union[int, None] = None) -> list[Filament]: + return [] + + +@router.get("/{filament_id}") +async def get(filament_id: int) -> Filament: + return Filament( + id=0, + name=None, + vendor=Vendor( + id=0, + name="asdf", + comment=None, + ), + material=None, + price=None, + density=1, + diameter=1, + weight=None, + spool_weight=None, + article_number=None, + comment=None, + ) + + +@router.post("/") +async def create() -> Filament: + return Filament( + id=0, + name=None, + vendor=Vendor( + id=0, + name="asdf", + comment=None, + ), + material=None, + price=None, + density=1, + diameter=1, + weight=None, + spool_weight=None, + article_number=None, + comment=None, + ) + + +@router.put("/{filament_id}") +async def update() -> Filament: + return Filament( + id=0, + name=None, + vendor=Vendor( + id=0, + name="asdf", + comment=None, + ), + material=None, + price=None, + density=1, + diameter=1, + weight=None, + spool_weight=None, + article_number=None, + comment=None, + ) + + +@router.delete("/{filament_id}") +async def delete(): + pass diff --git a/spoolson/api/v1/router.py b/spoolson/api/v1/router.py index df1c560..845e87e 100644 --- a/spoolson/api/v1/router.py +++ b/spoolson/api/v1/router.py @@ -1,13 +1,21 @@ """Router setup for the v1 version of the API.""" -from fastapi import APIRouter +from fastapi import APIRouter, FastAPI from . import filament, spool, vendor -router = APIRouter( - prefix="/v1", - tags=["v1"], +app = FastAPI( + title="Spoolson REST API v1", + version="1.0.0", + root_path_in_servers=False, ) + +router = APIRouter( + prefix="/api/v1", +) + router.include_router(filament.router) router.include_router(spool.router) router.include_router(vendor.router) + +app.include_router(router) diff --git a/spoolson/main.py b/spoolson/main.py index 09d2239..6901c24 100644 --- a/spoolson/main.py +++ b/spoolson/main.py @@ -1,9 +1,13 @@ """Main entrypoint to the server.""" +import uvicorn from fastapi import FastAPI import spoolson.api.v1.router app = FastAPI() -app.include_router(spoolson.api.v1.router.router) +app.mount("/api/v1", spoolson.api.v1.router.app) + +if __name__ == "__main__": + uvicorn.run(app, host="0.0.0.0", port=8000)