felicity-lims/felicity/views/__init__.py
2024-01-28 15:17:16 +02:00

47 lines
1.6 KiB
Python

import graphdoc
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from felicity.core import get_settings
from felicity.utils.loader import load_schema_from_path
settings = get_settings()
STATIC_DIR = f"{settings.BASE_DIR}/templates/static/"
def setup_webapp(app: FastAPI, serve_webapp: bool, schema):
backends = "/backends" if serve_webapp else "/"
if serve_webapp:
app.mount(
"/assets", StaticFiles(directory=f"{STATIC_DIR}assets"), name="assets"
)
@app.get("/", response_class=HTMLResponse)
async def handler(request: Request):
return Jinja2Templates(directory=STATIC_DIR).TemplateResponse(
"index.html", context={"request": request}
)
@app.get("/graphql-docs", response_class=HTMLResponse)
async def graphql_docs():
return graphdoc.to_doc(schema)
@app.get(backends, response_class=HTMLResponse)
def api_gql_view():
return """
<!Doctype html>
<html>
<body>
<h1>SecureAPI</h1>
<div class="btn-group">
<a href="/docs"><button>SwaggerUI</button></a>
<a href="/redoc"><button>Redoc</button></a>
<a href="/felicity-gql"><button>GraphQL Playground</button></a>
<a href="/graphql-docs"><button>GraphQL Documentation</button></a>
</div>
</body>
</html>
"""