import os from os.path import exists from ariadne import load_schema_from_path, make_executable_schema from ariadne.asgi import GraphQL from starlette.applications import Starlette from starlette.middleware import Middleware from starlette.middleware.authentication import AuthenticationMiddleware from starlette.middleware.sessions import SessionMiddleware from services.auth import JWTAuthenticate from services.redis import redis from resolvers import resolvers from settings import DEV_SERVER_PID_FILE_NAME, SENTRY_DSN, SESSION_SECRET_KEY, MODE schema = make_executable_schema(load_schema_from_path("schema.graphql"), resolvers) # type: ignore middleware = [ Middleware(AuthenticationMiddleware, backend=JWTAuthenticate()), Middleware(SessionMiddleware, secret_key=SESSION_SECRET_KEY), ] async def start_up(): if MODE == "dev": if exists(DEV_SERVER_PID_FILE_NAME): await redis.connect() return else: with open(DEV_SERVER_PID_FILE_NAME, "w", encoding="utf-8") as f: f.write(str(os.getpid())) else: await redis.connect() try: import sentry_sdk sentry_sdk.init(SENTRY_DSN) except Exception as e: print("[sentry] init error") print(e) async def shutdown(): await redis.disconnect() app = Starlette(debug=True, on_startup=[start_up], on_shutdown=[shutdown]) app.mount("/", GraphQL(schema, debug=True))