62 lines
1.7 KiB
Python
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']))
|
|
|