# ========================================================================== # # # # KVMD - The main PiKVM daemon. # # # # Copyright (C) 2018-2024 Maxim Devaev # # # # 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 . # # # # ========================================================================== # from aiohttp.web import Request from aiohttp.web import Response from ....htserver import exposed_http from ....htserver import make_json_response from ....validators.kvm import valid_info_fields from ..info import InfoManager # ===== class InfoApi: def __init__(self, info_manager: InfoManager) -> None: self.__info_manager = info_manager # ===== @exposed_http("GET", "/info") async def __common_state_handler(self, req: Request) -> Response: fields = self.__valid_info_fields(req) return make_json_response(await self.__info_manager.get_state(fields)) def __valid_info_fields(self, req: Request) -> list[str]: available = self.__info_manager.get_subs() return sorted(valid_info_fields( arg=req.query.get("fields", ",".join(available)), variants=available, ) or available)