core/main.py

50 lines
2.0 KiB
Python
Raw Normal View History

2021-07-13 10:14:48 +00:00
from importlib import import_module
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 starlette.routing import Route
from auth.authenticate import JWTAuthenticate
from auth.oauth import oauth_login, oauth_authorize
2021-08-25 13:39:24 +00:00
from auth.email import email_authorize
2022-08-11 05:53:14 +00:00
from base.redis import redis
from base.resolvers import resolvers
from resolvers.zine import ShoutsCache
2022-08-11 09:09:57 +00:00
from services.stat.viewed import ViewedStorage
from services.zine.gittask import GitTask
from services.stat.topicstat import TopicStat
from services.zine.shoutauthor import ShoutAuthorStorage
from services.zine.reactions import ReactionsStorage
2021-08-08 09:49:15 +00:00
import asyncio
2021-07-13 10:14:48 +00:00
import_module('resolvers')
schema = make_executable_schema(load_schema_from_path("schema.graphql"), resolvers)
middleware = [
Middleware(AuthenticationMiddleware, backend=JWTAuthenticate()),
Middleware(SessionMiddleware, secret_key="!secret")
]
async def start_up():
2021-08-08 09:49:15 +00:00
await redis.connect()
viewed_storage_task = asyncio.create_task(ViewedStorage.worker())
2021-10-31 17:55:59 +00:00
shouts_cache_task = asyncio.create_task(ShoutsCache.worker())
reaction_stat_task = asyncio.create_task(ReactionsStorage.worker())
2021-12-13 18:05:00 +00:00
shout_author_task = asyncio.create_task(ShoutAuthorStorage.worker())
topic_stat_task = asyncio.create_task(TopicStat.worker())
2022-08-11 09:09:57 +00:00
git_task = asyncio.create_task(GitTask.git_task_worker())
2021-07-13 10:14:48 +00:00
async def shutdown():
2021-08-08 09:49:15 +00:00
await redis.disconnect()
2021-07-13 10:14:48 +00:00
routes = [
Route("/oauth/{provider}", endpoint=oauth_login), # TODO: isolate auth microservice
2021-08-25 13:39:24 +00:00
Route("/oauth_authorize", endpoint=oauth_authorize),
Route("/email_authorize", endpoint=email_authorize)
2021-07-13 10:14:48 +00:00
]
app = Starlette(debug=True, on_startup=[start_up], on_shutdown=[shutdown], middleware=middleware, routes=routes)
app.mount("/", GraphQL(schema, debug=True))