complex info handle

This commit is contained in:
Devaev Maxim
2020-07-09 09:41:05 +03:00
parent 53eb74670d
commit 5f1733d002
16 changed files with 270 additions and 138 deletions

View File

@@ -20,9 +20,16 @@
# ========================================================================== #
import asyncio
from typing import List
from aiohttp.web import Request
from aiohttp.web import Response
from ....validators import check_string_in_list
from ....validators.basic import valid_string_list
from ..info import InfoManager
from ..http import exposed_http
@@ -37,5 +44,18 @@ class InfoApi:
# =====
@exposed_http("GET", "/info")
async def __state_handler(self, _: Request) -> Response:
return make_json_response(await self.__info_manager.get_state())
async def __common_state_handler(self, request: Request) -> Response:
fields = self.__valid_info_fields(request)
results = dict(zip(fields, await asyncio.gather(*[
self.__info_manager.get_submanager(field).get_state()
for field in fields
])))
return make_json_response(results)
def __valid_info_fields(self, request: Request) -> List[str]:
subs = self.__info_manager.get_subs()
return (sorted(set(valid_string_list(
arg=request.query.get("fields", ",".join(subs)),
subval=(lambda field: check_string_in_list(field, "info field", subs)),
name="info fields list",
))) or subs)