mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-01-29 00:51:53 +08:00
refactoring
This commit is contained in:
@@ -29,6 +29,7 @@ import logging.config
|
|||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
from typing import List
|
from typing import List
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
from typing import Set
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
import pygments
|
import pygments
|
||||||
@@ -52,8 +53,6 @@ from ..yamlconf import build_raw_from_options
|
|||||||
from ..yamlconf.dumper import make_config_dump
|
from ..yamlconf.dumper import make_config_dump
|
||||||
from ..yamlconf.loader import load_yaml_file
|
from ..yamlconf.loader import load_yaml_file
|
||||||
|
|
||||||
from ..validators import check_string_in_list
|
|
||||||
|
|
||||||
from ..validators.basic import valid_stripped_string
|
from ..validators.basic import valid_stripped_string
|
||||||
from ..validators.basic import valid_stripped_string_not_empty
|
from ..validators.basic import valid_stripped_string_not_empty
|
||||||
from ..validators.basic import valid_bool
|
from ..validators.basic import valid_bool
|
||||||
@@ -181,7 +180,7 @@ def _patch_dynamic( # pylint: disable=too-many-locals
|
|||||||
rebuild = True
|
rebuild = True
|
||||||
|
|
||||||
if load_gpio:
|
if load_gpio:
|
||||||
drivers: List[str] = []
|
drivers: Set[str] = set()
|
||||||
for (driver, params) in { # type: ignore
|
for (driver, params) in { # type: ignore
|
||||||
"__gpio__": {},
|
"__gpio__": {},
|
||||||
**tools.rget(raw_config, "kvmd", "gpio", "drivers"),
|
**tools.rget(raw_config, "kvmd", "gpio", "drivers"),
|
||||||
@@ -192,17 +191,13 @@ def _patch_dynamic( # pylint: disable=too-many-locals
|
|||||||
"type": Option(driver_type, type=valid_stripped_string_not_empty),
|
"type": Option(driver_type, type=valid_stripped_string_not_empty),
|
||||||
**get_ugpio_driver_class(driver_type).get_plugin_options()
|
**get_ugpio_driver_class(driver_type).get_plugin_options()
|
||||||
}
|
}
|
||||||
drivers.append(driver)
|
drivers.add(driver)
|
||||||
|
|
||||||
for (channel, params) in tools.rget(raw_config, "kvmd", "gpio", "scheme").items():
|
for (channel, params) in tools.rget(raw_config, "kvmd", "gpio", "scheme").items():
|
||||||
channel = valid_ugpio_channel(channel)
|
channel = valid_ugpio_channel(channel)
|
||||||
mode = valid_ugpio_mode(params.get("mode", ""))
|
mode = valid_ugpio_mode(params.get("mode", ""))
|
||||||
scheme["kvmd"]["gpio"]["scheme"][channel] = {
|
scheme["kvmd"]["gpio"]["scheme"][channel] = {
|
||||||
"driver": Option("__gpio__", type=(lambda arg: check_string_in_list(
|
"driver": Option("__gpio__", type=(lambda arg: valid_ugpio_driver(arg, drivers))),
|
||||||
arg=valid_stripped_string_not_empty(arg),
|
|
||||||
name="configured GPIO driver",
|
|
||||||
variants=drivers,
|
|
||||||
))),
|
|
||||||
"pin": Option(-1, type=valid_gpio_pin),
|
"pin": Option(-1, type=valid_gpio_pin),
|
||||||
"mode": Option("", type=valid_ugpio_mode),
|
"mode": Option("", type=valid_ugpio_mode),
|
||||||
"inverted": Option(False, type=valid_bool),
|
"inverted": Option(False, type=valid_bool),
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
from typing import List
|
from typing import List
|
||||||
|
from typing import Set
|
||||||
from typing import Mapping
|
from typing import Mapping
|
||||||
from typing import Sequence
|
from typing import Sequence
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
@@ -62,13 +63,19 @@ def check_not_none_string(arg: Any, name: str, strip: bool=True) -> str:
|
|||||||
return arg
|
return arg
|
||||||
|
|
||||||
|
|
||||||
def check_in_list(arg: Any, name: str, variants: Union[Sequence, Mapping]) -> Any:
|
def check_in_list(arg: Any, name: str, variants: Union[Sequence, Mapping, Set]) -> Any:
|
||||||
if arg not in variants:
|
if arg not in variants:
|
||||||
raise_error(arg, name)
|
raise_error(arg, name)
|
||||||
return arg
|
return arg
|
||||||
|
|
||||||
|
|
||||||
def check_string_in_list(arg: Any, name: str, variants: Union[Sequence[str], Mapping[str, Any]], lower: bool=True) -> str:
|
def check_string_in_list(
|
||||||
|
arg: Any,
|
||||||
|
name: str,
|
||||||
|
variants: Union[Sequence[str], Mapping[str, Any], Set[str]],
|
||||||
|
lower: bool=True,
|
||||||
|
) -> str:
|
||||||
|
|
||||||
arg = check_not_none_string(arg, name)
|
arg = check_not_none_string(arg, name)
|
||||||
if lower:
|
if lower:
|
||||||
arg = arg.lower()
|
arg = arg.lower()
|
||||||
|
|||||||
@@ -21,6 +21,8 @@
|
|||||||
|
|
||||||
|
|
||||||
from typing import List
|
from typing import List
|
||||||
|
from typing import Set
|
||||||
|
from typing import Optional
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from ..keyboard.mappings import KEYMAP
|
from ..keyboard.mappings import KEYMAP
|
||||||
@@ -92,9 +94,12 @@ def valid_hid_mouse_wheel(arg: Any) -> int:
|
|||||||
|
|
||||||
|
|
||||||
# =====
|
# =====
|
||||||
def valid_ugpio_driver(arg: Any) -> str:
|
def valid_ugpio_driver(arg: Any, variants: Optional[Set[str]]=None) -> str:
|
||||||
name = "GPIO driver"
|
name = "GPIO driver"
|
||||||
return check_len(check_re_match(arg, name, r"^[a-zA-Z_][a-zA-Z0-9_-]*$"), name, 255)
|
arg = check_len(check_re_match(arg, name, r"^[a-zA-Z_][a-zA-Z0-9_-]*$"), name, 255)
|
||||||
|
if variants is not None:
|
||||||
|
arg = check_string_in_list(arg, f"configured {name}", variants)
|
||||||
|
return arg
|
||||||
|
|
||||||
|
|
||||||
def valid_ugpio_mode(arg: Any) -> str:
|
def valid_ugpio_mode(arg: Any) -> str:
|
||||||
|
|||||||
Reference in New Issue
Block a user