api refactoring

This commit is contained in:
Devaev Maxim 2020-12-25 08:35:02 +03:00
parent 08fc413044
commit 4447e49abb
4 changed files with 25 additions and 19 deletions

View File

@ -69,14 +69,17 @@ class HidApi:
async def __state_handler(self, _: Request) -> Response: async def __state_handler(self, _: Request) -> Response:
return make_json_response(await self.__hid.get_state()) return make_json_response(await self.__hid.get_state())
@exposed_http("POST", "/hid/keyboard/set_params") @exposed_http("POST", "/hid/set_params")
async def __keyboard_set_params_handler(self, request: Request) -> Response: async def __set_params_handler(self, request: Request) -> Response:
self.__hid.set_keyboard_output(valid_hid_keyboard_output(request.query.get("output"))) params = {
return make_json_response() key: validator(request.query.get(key))
for (key, validator) in [
@exposed_http("POST", "/hid/mouse/set_params") ("keyboard_output", valid_hid_keyboard_output),
async def __mouse_set_params_handler(self, request: Request) -> Response: ("mouse_output", valid_hid_mouse_output),
self.__hid.set_mouse_output(valid_hid_mouse_output(request.query.get("output"))) ]
if request.query.get(key) is not None
}
await self.__hid.set_params(**params) # type: ignore
return make_json_response() return make_json_response()
@exposed_http("POST", "/hid/set_connected") @exposed_http("POST", "/hid/set_connected")

View File

@ -25,6 +25,7 @@ from typing import Dict
from typing import Iterable from typing import Iterable
from typing import AsyncGenerator from typing import AsyncGenerator
from typing import Type from typing import Type
from typing import Optional
from .. import BasePlugin from .. import BasePlugin
from .. import get_plugin_class from .. import get_plugin_class
@ -67,11 +68,9 @@ class BaseHid(BasePlugin):
def send_mouse_wheel_event(self, delta_x: int, delta_y: int) -> None: def send_mouse_wheel_event(self, delta_x: int, delta_y: int) -> None:
raise NotImplementedError raise NotImplementedError
def set_keyboard_output(self, output: str) -> None: def set_params(self, keyboard_output: Optional[str]=None, mouse_output: Optional[str]=None) -> None:
_ = output _ = keyboard_output
_ = mouse_output
def set_mouse_output(self, output: str) -> None:
_ = output
def set_connected(self, connected: bool) -> None: def set_connected(self, connected: bool) -> None:
_ = connected _ = connected

View File

@ -31,6 +31,7 @@ from typing import Dict
from typing import Iterable from typing import Iterable
from typing import Generator from typing import Generator
from typing import AsyncGenerator from typing import AsyncGenerator
from typing import Optional
from ....logging import get_logger from ....logging import get_logger
@ -252,11 +253,14 @@ class BaseMcuHid(BaseHid, multiprocessing.Process): # pylint: disable=too-many-
def send_mouse_wheel_event(self, delta_x: int, delta_y: int) -> None: def send_mouse_wheel_event(self, delta_x: int, delta_y: int) -> None:
self.__queue_event(MouseWheelEvent(delta_x, delta_y)) self.__queue_event(MouseWheelEvent(delta_x, delta_y))
def set_keyboard_output(self, output: str) -> None: def set_params(self, keyboard_output: Optional[str]=None, mouse_output: Optional[str]=None) -> None:
self.__queue_event(SetKeyboardOutputEvent(output), clear=True) events: List[BaseEvent] = []
if keyboard_output is not None:
def set_mouse_output(self, output: str) -> None: events.append(SetKeyboardOutputEvent(keyboard_output))
self.__queue_event(SetMouseOutputEvent(output), clear=True) if mouse_output is not None:
events.append(SetMouseOutputEvent(mouse_output))
for (index, event) in enumerate(events, 1):
self.__queue_event(event, clear=(index == len(events)))
def set_connected(self, connected: bool) -> None: def set_connected(self, connected: bool) -> None:
self.__queue_event(SetConnectedEvent(connected), clear=True) self.__queue_event(SetConnectedEvent(connected), clear=True)

View File

@ -231,7 +231,7 @@ export function Hid() {
var __clickOutputsRadio = function(hid) { var __clickOutputsRadio = function(hid) {
let output = tools.radioGetValue(`hid-outputs-${hid}-radio`); let output = tools.radioGetValue(`hid-outputs-${hid}-radio`);
let http = tools.makeRequest("POST", `/api/hid/${hid}/set_params?output=${output}`, function() { let http = tools.makeRequest("POST", `/api/hid/set_params?${hid}_output=${output}`, function() {
if (http.readyState === 4) { if (http.readyState === 4) {
if (http.status !== 200) { if (http.status !== 200) {
wm.error("Can't configure HID:<br>", http.responseText); wm.error("Can't configure HID:<br>", http.responseText);