No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

83 líneas
2.8 KiB

¡Este archivo contiene caracteres Unicode ambiguos!

Este archivo contiene caracteres Unicode ambiguos que pueden confundirse con otros en tu idioma actual. Si tu caso de uso es intencional y legítimo, puedes ignorar esta advertencia. Usa el botón de Escape para resaltar estos caracteres.

from fastapi import FastAPI, Depends
from starlette.requests import Request
from .server_data import ServerData
from .database.db import database
# from .utils.dependencies import right_checkers, get_current_user
from .utils.dependencies import get_current_user
from .utils.responses import (
ResponseStructure,
get_base_url,
validate_response,
)
from .utils.users import check_user_rights
from .schemas.responses import GetRootResponse
from .schemas.users import User
from .routers.users import router as users_router
from .routers.commands import router as commands_router
# TODO
# 1. Добавить список отклоняемых токенов и их обработку.
# 2. Добавить предварительный вариант генерации access_tokens.
# 3. Продумать, наконец, концепцию cid и wid, в ключе их применения при
# настройке команд и запуске воркеров.
# 4. Решить сколько команд может запускать пользователь единовременно.
# 5. Добавить способ указания принадлежности воркеров и команд пользователям.
# 6. Разобраться с местом раcположения базы данных.
data = ServerData()
app = FastAPI()
@app.on_event("startup")
async def startup():
await database.connect()
@app.on_event("shutdown")
async def shutdown():
await database.disconnect()
@app.get("/", response_model=GetRootResponse, tags=["Home"])
async def get_primary_commands(request: Request,
user: User = Depends(get_current_user)):
check_user_rights(user, "read")
resp = ResponseStructure(get_base_url(request))
resp.add_data(name="Calculate Server", version="0.1")
resp.add_link("commands", "/commands?gui={is_gui}", templated=True)
resp.add_link("find_command", "/commands/{console_command}?gui={is_gui}",
templated=True)
resp.add_link("workers", "/workers")
return validate_response(resp.get_dict(), GetRootResponse,
media_type="application/hal+json")
# @app.get("/workers/{wid}", tags=["Workers management"],
# dependencies=[Depends(right_checkers["write"])])
# async def get_worker(wid: int):
# '''Тестовый обработчик.'''
# worker = data.get_worker_object(wid=wid)
# worker.run()
# print(f"worker: {type(worker)} object {worker}")
# await worker.send({"text": "INFO"})
# worker_data = await worker.get()
# if worker_data['type'] == 'log':
# data.log_message[data['level']](data['msg'])
# return worker_data
# Authentification and users management.
app.include_router(users_router)
# Commands running and management.
app.include_router(commands_router)