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

@@ -1,41 +0,0 @@
# ========================================================================== #
# #
# KVMD - The main Pi-KVM daemon. #
# #
# Copyright (C) 2018 Maxim Devaev <mdevaev@gmail.com> #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
# #
# ========================================================================== #
from aiohttp.web import Request
from aiohttp.web import Response
from ..hw import HwManager
from ..http import exposed_http
from ..http import make_json_response
# =====
class HwApi:
def __init__(self, hw_manager: HwManager) -> None:
self.__hw_manager = hw_manager
# =====
@exposed_http("GET", "/hw")
async def __state_handler(self, _: Request) -> Response:
return make_json_response(await self.__hw_manager.get_state())

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)