more validation

This commit is contained in:
Devaev Maxim
2020-09-08 10:41:28 +03:00
parent 7990bf7e54
commit 1ea68f3e9a
2 changed files with 26 additions and 23 deletions

View File

@@ -81,7 +81,9 @@ from ..validators.kvm import valid_stream_fps
from ..validators.kvm import valid_stream_resolution from ..validators.kvm import valid_stream_resolution
from ..validators.kvm import valid_hid_key from ..validators.kvm import valid_hid_key
from ..validators.kvm import valid_hid_mouse_move from ..validators.kvm import valid_hid_mouse_move
from ..validators.kvm import valid_ugpio_driver
from ..validators.kvm import valid_ugpio_mode from ..validators.kvm import valid_ugpio_mode
from ..validators.kvm import valid_ugpio_channel
from ..validators.kvm import valid_ugpio_view_table from ..validators.kvm import valid_ugpio_view_table
from ..validators.hw import valid_gpio_pin from ..validators.hw import valid_gpio_pin
@@ -181,6 +183,7 @@ def _patch_dynamic( # pylint: disable=too-many-locals
"gpio": {}, "gpio": {},
**tools.rget(raw_config, "kvmd", "gpio", "drivers"), **tools.rget(raw_config, "kvmd", "gpio", "drivers"),
}.items(): }.items():
driver = valid_ugpio_driver(driver)
driver_type = valid_stripped_string_not_empty(params.get("type", "gpio")) driver_type = valid_stripped_string_not_empty(params.get("type", "gpio"))
scheme["kvmd"]["gpio"]["drivers"][driver] = { scheme["kvmd"]["gpio"]["drivers"][driver] = {
"type": Option(driver_type, type=valid_stripped_string_not_empty), "type": Option(driver_type, type=valid_stripped_string_not_empty),
@@ -188,29 +191,25 @@ def _patch_dynamic( # pylint: disable=too-many-locals
} }
for (channel, params) in tools.rget(raw_config, "kvmd", "gpio", "scheme").items(): for (channel, params) in tools.rget(raw_config, "kvmd", "gpio", "scheme").items():
try: channel = valid_ugpio_channel(channel)
mode = valid_ugpio_mode(params.get("mode", "")) mode = valid_ugpio_mode(params.get("mode", ""))
except Exception: scheme["kvmd"]["gpio"]["scheme"][channel] = {
pass "driver": Option("gpio"),
finally: "pin": Option(-1, type=valid_gpio_pin),
ch_scheme: Dict = { "mode": Option("", type=valid_ugpio_mode),
"driver": Option("gpio"), "inverted": Option(False, type=valid_bool),
"pin": Option(-1, type=valid_gpio_pin), **({
"mode": Option("", type=valid_ugpio_mode), "busy_delay": Option(0.2, type=valid_float_f01),
"inverted": Option(False, type=valid_bool), "initial": Option(False, type=(lambda arg: (None if arg is None else valid_bool(arg)))),
} "switch": Option(True, type=valid_bool),
if mode == "output": "pulse": { # type: ignore
ch_scheme.update({ "delay": Option(0.1, type=valid_float_f0),
"busy_delay": Option(0.2, type=valid_float_f01), "min_delay": Option(0.1, type=valid_float_f01),
"initial": Option(False, type=(lambda arg: (None if arg is None else valid_bool(arg)))), "max_delay": Option(0.1, type=valid_float_f01),
"switch": Option(True, type=valid_bool), },
"pulse": { } if mode == "output" else {})
"delay": Option(0.1, type=valid_float_f0), }
"min_delay": Option(0.1, type=valid_float_f01),
"max_delay": Option(0.1, type=valid_float_f01),
},
})
scheme["kvmd"]["gpio"]["scheme"][channel] = ch_scheme
rebuild = True rebuild = True
return rebuild return rebuild

View File

@@ -91,6 +91,10 @@ def valid_hid_mouse_wheel(arg: Any) -> int:
# ===== # =====
def valid_ugpio_driver(arg: Any) -> str:
return check_re_match(arg, "GPIO driver", r"^[a-zA-Z_][a-zA-Z0-9_-]*$")[:255]
def valid_ugpio_mode(arg: Any) -> str: def valid_ugpio_mode(arg: Any) -> str:
return check_string_in_list(arg, "GPIO mode", ["input", "output"]) return check_string_in_list(arg, "GPIO mode", ["input", "output"])