Files
adventures/src/api.py

62 lines
1.7 KiB
Python

import sys
import os
import asyncio
from aiohttp import web
import logging
from meta import conf
from data import Database
from utils.auth import key_auth_factory
from datamodels import DataModel
from constants import DATA_VERSION
from modules.profiles.data import ProfileData
from routes import dbvar, datamodelsv, profiledatav, register_routes
sys.path.insert(0, os.path.join(os.getcwd()))
sys.path.insert(0, os.path.join(os.getcwd(), "src"))
logger = logging.getLogger(__name__)
async def attach_db(app: web.Application):
db = Database(conf.data['args'])
async with db.open():
version = await db.version()
if version.version != DATA_VERSION:
error = f"Data model version is {version}, required version is {DATA_VERSION}! Please migrate."
logger.critical(error)
raise RuntimeError(error)
datamodel = DataModel()
db.load_registry(datamodel)
await datamodel.init()
profiledata = ProfileData()
db.load_registry(profiledata)
await profiledata.init()
app[dbvar] = db
app[datamodelsv] = datamodel
app[profiledatav] = profiledata
yield
async def test(request: web.Request) -> web.Response:
return web.Response(text="Welcome to the Dreamspace API. Please donate an important childhood memory to continue.")
def app_factory():
auth = key_auth_factory(conf.API['TOKEN'])
app = web.Application(middlewares=[auth])
app.cleanup_ctx.append(attach_db)
app.router.add_get('/', test)
register_routes(app.router)
return app
if __name__ == '__main__':
app = app_factory()
web.run_app(app, port=int(conf.API['PORT']))