diff --git a/halfapi/app.py b/halfapi/app.py index 0adf6dd..35509bc 100644 --- a/halfapi/app.py +++ b/halfapi/app.py @@ -1,50 +1,56 @@ #!/usr/bin/env python3 +""" +app.py is the file that is read when launching the application using an asgi +runner. + +It defines the following globals : + + - routes (contains the Route objects for the application) + - d_acl (a dictionnary of the active acls for the current project) + - d_api (a dictionnary of the routes depending on the routers definition in + the project) + - application (the asgi application itself - a starlette object) + +""" # asgi framework from starlette.applications import Starlette from starlette.authentication import UnauthenticatedUser from starlette.middleware import Middleware -from starlette.responses import Response, JSONResponse from starlette.routing import Route from starlette.middleware.authentication import AuthenticationMiddleware -# typing -from typing import Any, Awaitable, Callable, MutableMapping # module libraries -from halfapi.conf import HOST, PORT, DB_NAME, SECRET, PRODUCTION, DOMAINS, DOMAINSDICT +from halfapi.conf import SECRET, PRODUCTION, DOMAINSDICT from halfapi.lib.jwt_middleware import JWTAuthenticationBackend -from halfapi.lib.responses import * +from halfapi.lib.responses import (ORJSONResponse, UnauthorizedResponse, + NotFoundResponse, InternalServerErrorResponse, NotImplementedResponse) + from halfapi.lib.routes import gen_starlette_routes, api_routes from halfapi.lib.schemas import get_api_routes, schema_json, get_acls -""" -Base routes definition - -Only debug or doc routes, that should not be available in production -""" routes = [ Route('/', get_api_routes) ] routes += [ Route('/halfapi/current_user', lambda request, *args, **kwargs: ORJSONResponse({'user':request.user.json}) - if type(request.user) != UnauthenticatedUser + if not isinstance(request.user, UnauthenticatedUser) else ORJSONResponse({'user': None})), Route('/halfapi/schema', schema_json), Route('/halfapi/acls', get_acls) ] +d_api = {} +d_acl = {} + for domain, m_domain in DOMAINSDICT.items(): for route in gen_starlette_routes(m_domain): routes.append(route) - -d_api = {} -d_acl = {} -for domain, m_domain in DOMAINSDICT.items(): d_api[domain], d_acl[domain] = api_routes(m_domain)