#!/usr/bin/env python3 """ Main executable of `kiwi-vpn-api`. Creates the main `FastAPI` app, mounts endpoints and connects to the configured database. If run directly, uses `uvicorn` to run the app. """ import uvicorn from fastapi import FastAPI from .config import Config, Settings from .db import Connection from .db.schemata import User from .db_new import connection, user from .routers import main_router settings = Settings.get() app = FastAPI( title="kiwi-vpn API", description="This API enables the `kiwi-vpn` service.", contact={ "name": "Jörn-Michael Miehe", "email": "40151420+ldericher@users.noreply.github.com", }, license_info={ "name": "MIT License", "url": "https://opensource.org/licenses/mit-license.php", }, openapi_url=settings.openapi_url, docs_url=settings.docs_url if not settings.production_mode else None, redoc_url=settings.redoc_url if not settings.production_mode else None, ) app.include_router(main_router) @app.on_event("startup") async def on_startup() -> None: # check if configured if (current_config := await Config.load()) is not None: # connect to database Connection.connect(await current_config.db.db_engine) # some testing with Connection.use() as db: print(User.from_db(db, "admin")) print(User.from_db(db, "nonexistent")) connection.Connection.connect("sqlite:///tmp/v2.db") user.User.create( name="Uwe", password_clear="ulf", email="uwe@feh.de", ) print(user.User.get("Uwe")) def main() -> None: uvicorn.run( "kiwi_vpn_api.main:app", host="0.0.0.0", port=8000, reload=True, ) if __name__ == "__main__": main()