Post refactor of FastAPI's router; uvicorns server

This commit is contained in:
th3r00t
2022-11-25 14:44:03 -05:00
parent 49fd7dd417
commit 578fe10a92
3 changed files with 61 additions and 54 deletions

57
pyShelf.py vendored
View File

@@ -5,16 +5,10 @@ import sys
from pathlib import Path
from threading import Thread
import uvicorn
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.routing import APIRoute
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from src.backend.lib.config import Config
from src.backend.pyShelf_MakeCollections import MakeCollections
from src.backend.pyShelf_ScanLibrary import execute_scan
from src.frontend.lib.frontend import FrontendServer
# import websockets
@@ -22,9 +16,6 @@ root = Path.cwd()
config = Config(root)
PRG_PATH = Path.cwd().__str__()
sys.path.insert(0, PRG_PATH)
app = FastAPI()
app.mount("/static", StaticFiles(directory="src/frontend/static"), name="static")
templates = Jinja2Templates(directory="src/frontend/templates")
def RunImport():
"""Begin live import of books."""
@@ -35,57 +26,15 @@ def RunImport():
return "Import Complete"
def use_route_names_as_operation_ids(app: FastAPI) -> None:
"""Use route name as operation id."""
for route in app.routes:
if isinstance(route, APIRoute):
route.operation_id = route.name
@app.get("/", response_class=HTMLResponse)
async def index(request: Request):
"""Home page responder."""
return templates.TemplateResponse(
"index.html",
{"request": request})
@app.get("/users/me")
async def about_me():
"""About me page responder."""
return {"user_id": "CurrentUser"}
@app.get("/users/{user_id}")
async def about_user(user_id: int):
"""About user page responder."""
return {"user_id": user_id}
@app.get("/dev/test/echo/{_test_item_}")
async def echo_test(_test_item_):
"""Test echo responder function."""
return {"Test Object": _test_item_}
async def fe_server():
"""Front end server entrypoint."""
config.logger.info("Starting FastAPI server.")
fe_config = uvicorn.Config("__main__:app", port=8080,
log_level="info", reload=True)
fe_server = uvicorn.Server(fe_config)
await fe_server.serve()
async def main():
"""Program entrypoint."""
_import_thread = Thread(target=RunImport)
_import_thread.start()
_task = await asyncio.create_task(fe_server())
fe_server = FrontendServer(config)
_task = await asyncio.create_task(fe_server.run())
return [_task, _import_thread]
if __name__ == "__main__":
use_route_names_as_operation_ids(app)
asyncio.run(main())
sys.exit(0)

58
src/frontend/lib/frontend.py vendored Normal file
View File

@@ -0,0 +1,58 @@
"""pyShelf's main frontend library."""
import uvicorn
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.routing import APIRoute
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory="src/frontend/templates")
class FrontendServer():
def __init__(self, config):
self.config = config
app.mount("/static", StaticFiles(directory="src/frontend/static"), name="static")
def use_route_names_as_operation_ids(self, app: FastAPI) -> None:
"""Use route name as operation id."""
for route in app.routes:
if isinstance(route, APIRoute):
route.operation_id = route.name
@app.get("/", response_class=HTMLResponse)
async def index(request: Request):
"""Home page responder."""
return templates.TemplateResponse(
"index.html",
{"request": request})
@app.get("/users/me")
async def about_me():
"""About me page responder."""
return {"user_id": "CurrentUser"}
@app.get("/users/{user_id}")
async def about_user(user_id: int):
"""About user page responder."""
return {"user_id": user_id}
@app.get("/dev/test/echo/{_test_item_}")
async def echo_test(_test_item_):
"""Test echo responder function."""
return {"Test Object": _test_item_}
async def run(self):
"""Front end server entrypoint."""
self.config.logger.info("Starting FastAPI server.")
self.use_route_names_as_operation_ids(app)
self.fe_config = uvicorn.Config(app, port=8080,
log_level="info", reload=True)
self.fe_server = uvicorn.Server(self.fe_config)
await self.fe_server.serve()

0
src/frontend/static/styles.css vendored Normal file
View File