diff options
author | Devaev Maxim <[email protected]> | 2020-11-23 23:51:26 +0300 |
---|---|---|
committer | Devaev Maxim <[email protected]> | 2020-11-23 23:51:26 +0300 |
commit | 9e92a403c05c387b194961e1e22e3cc121957843 (patch) | |
tree | 363f17f89f172719e91731969304ba4d8515578c | |
parent | 3047114013451c7e6ba54050f550f3fd28433e89 (diff) |
refactoring
-rw-r--r-- | kvmd/apps/__init__.py | 9 | ||||
-rw-r--r-- | kvmd/apps/kvmd/api/ugpio.py | 2 | ||||
-rw-r--r-- | kvmd/validators/kvm.py | 29 | ||||
-rw-r--r-- | kvmd/validators/ugpio.py | 56 | ||||
-rw-r--r-- | testenv/tests/validators/test_kvm.py | 87 | ||||
-rw-r--r-- | testenv/tests/validators/test_ugpio.py | 114 |
6 files changed, 176 insertions, 121 deletions
diff --git a/kvmd/apps/__init__.py b/kvmd/apps/__init__.py index 3190f62c..008f9e08 100644 --- a/kvmd/apps/__init__.py +++ b/kvmd/apps/__init__.py @@ -90,10 +90,11 @@ from ..validators.hid import valid_hid_mouse_move from ..validators.kvm import valid_stream_quality from ..validators.kvm import valid_stream_fps from ..validators.kvm import valid_stream_resolution -from ..validators.kvm import valid_ugpio_driver -from ..validators.kvm import valid_ugpio_channel -from ..validators.kvm import valid_ugpio_mode -from ..validators.kvm import valid_ugpio_view_table + +from ..validators.ugpio import valid_ugpio_driver +from ..validators.ugpio import valid_ugpio_channel +from ..validators.ugpio import valid_ugpio_mode +from ..validators.ugpio import valid_ugpio_view_table from ..validators.hw import valid_tty_speed from ..validators.hw import valid_gpio_pin diff --git a/kvmd/apps/kvmd/api/ugpio.py b/kvmd/apps/kvmd/api/ugpio.py index f98cbc58..4a8b37f1 100644 --- a/kvmd/apps/kvmd/api/ugpio.py +++ b/kvmd/apps/kvmd/api/ugpio.py @@ -25,7 +25,7 @@ from aiohttp.web import Response from ....validators.basic import valid_bool from ....validators.basic import valid_float_f0 -from ....validators.kvm import valid_ugpio_channel +from ....validators.ugpio import valid_ugpio_channel from ..ugpio import UserGpio diff --git a/kvmd/validators/kvm.py b/kvmd/validators/kvm.py index 16f8e59b..c422c352 100644 --- a/kvmd/validators/kvm.py +++ b/kvmd/validators/kvm.py @@ -20,15 +20,11 @@ # ========================================================================== # -from typing import List from typing import Set -from typing import Optional from typing import Any from . import raise_error from . import check_string_in_list -from . import check_re_match -from . import check_len from .basic import valid_stripped_string_not_empty from .basic import valid_number @@ -78,28 +74,3 @@ def valid_stream_resolution(arg: Any) -> str: width = int(valid_number(parts[0], min=1, name=f"{name} (width)")) height = int(valid_number(parts[1], min=1, name=f"{name} (height)")) return f"{width}x{height}" - - -# ===== -def valid_ugpio_driver(arg: Any, variants: Optional[Set[str]]=None) -> str: - name = "GPIO driver" - 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, False) - return arg - - -def valid_ugpio_channel(arg: Any) -> str: - name = "GPIO channel" - return check_len(check_re_match(arg, name, r"^[a-zA-Z_][a-zA-Z0-9_-]*$"), name, 255) - - -def valid_ugpio_mode(arg: Any, variants: Set[str]) -> str: - return check_string_in_list(arg, "GPIO driver's pin mode", variants) - - -def valid_ugpio_view_table(arg: Any) -> List[List[str]]: - try: - return [list(map(str, row)) for row in list(arg)] - except Exception: - raise_error("<skipped>", "GPIO view table") diff --git a/kvmd/validators/ugpio.py b/kvmd/validators/ugpio.py new file mode 100644 index 00000000..61b23d78 --- /dev/null +++ b/kvmd/validators/ugpio.py @@ -0,0 +1,56 @@ +# ========================================================================== # +# # +# KVMD - The main Pi-KVM daemon. # +# # +# Copyright (C) 2018 Maxim Devaev <[email protected]> # +# # +# 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 typing import List +from typing import Set +from typing import Optional +from typing import Any + +from . import raise_error +from . import check_string_in_list +from . import check_re_match +from . import check_len + + +# ===== +def valid_ugpio_driver(arg: Any, variants: Optional[Set[str]]=None) -> str: + name = "GPIO driver" + 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, False) + return arg + + +def valid_ugpio_channel(arg: Any) -> str: + name = "GPIO channel" + return check_len(check_re_match(arg, name, r"^[a-zA-Z_][a-zA-Z0-9_-]*$"), name, 255) + + +def valid_ugpio_mode(arg: Any, variants: Set[str]) -> str: + return check_string_in_list(arg, "GPIO driver's pin mode", variants) + + +def valid_ugpio_view_table(arg: Any) -> List[List[str]]: + try: + return [list(map(str, row)) for row in list(arg)] + except Exception: + raise_error("<skipped>", "GPIO view table") diff --git a/testenv/tests/validators/test_kvm.py b/testenv/tests/validators/test_kvm.py index 95c71d99..bd558e3b 100644 --- a/testenv/tests/validators/test_kvm.py +++ b/testenv/tests/validators/test_kvm.py @@ -20,7 +20,6 @@ # ========================================================================== # -from typing import Callable from typing import Any import pytest @@ -33,12 +32,6 @@ from kvmd.validators.kvm import valid_log_seek from kvmd.validators.kvm import valid_stream_quality from kvmd.validators.kvm import valid_stream_fps from kvmd.validators.kvm import valid_stream_resolution -from kvmd.validators.kvm import valid_ugpio_driver -from kvmd.validators.kvm import valid_ugpio_channel -from kvmd.validators.kvm import valid_ugpio_mode -from kvmd.validators.kvm import valid_ugpio_view_table - -from kvmd.plugins.ugpio import UserGpioModes # ===== @@ -133,83 +126,3 @@ def test_ok__valid_stream_resolution(arg: Any) -> None: def test_fail__valid_stream_resolution(arg: Any) -> None: with pytest.raises(ValidatorError): print(valid_stream_resolution(arg)) - - -# ===== [email protected]("validator", [valid_ugpio_driver, valid_ugpio_channel]) [email protected]("arg", [ - "test-", - "glados", - "test", - "_", - "_foo_bar_", - " aix", - "a" * 255, -]) -def test_ok__valid_ugpio_item(validator: Callable[[Any], str], arg: Any) -> None: - assert validator(arg) == arg.strip() - - [email protected]("validator", [valid_ugpio_driver, valid_ugpio_channel]) [email protected]("arg", [ - "тест", - "-molestia", - "te~st", - "-", - "-foo_bar", - "foo bar", - "a" * 256, - " ", - "", - None, -]) -def test_fail__valid_ugpio_item(validator: Callable[[Any], str], arg: Any) -> None: - with pytest.raises(ValidatorError): - print(validator(arg)) - - -# ===== [email protected]("arg", ["foo", " bar", " baz "]) -def test_ok__valid_ugpio_driver_variants(arg: Any) -> None: - value = valid_ugpio_driver(arg, set(["foo", "bar", "baz"])) - assert type(value) == str # pylint: disable=unidiomatic-typecheck - assert value == str(arg).strip() - - [email protected]("arg", ["BAR", " ", "", None]) -def test_fail__valid_ugpio_driver_variants(arg: Any) -> None: - with pytest.raises(ValidatorError): - print(valid_ugpio_driver(arg, set(["foo", "bar", "baz"]))) - - -# ===== [email protected]("arg", ["Input ", " OUTPUT "]) -def test_ok__valid_ugpio_mode(arg: Any) -> None: - assert valid_ugpio_mode(arg, UserGpioModes.ALL) == arg.strip().lower() - - [email protected]("arg", ["test", "", None]) -def test_fail__valid_ugpio_mode(arg: Any) -> None: - with pytest.raises(ValidatorError): - print(valid_ugpio_mode(arg, UserGpioModes.ALL)) - - -# ===== [email protected]("arg,retval", [ - ([], []), - ({}, []), - ([[]], [[]]), - ([{}], [[]]), - ([[[]]], [["[]"]]), - ("", []), - ("ab", [["a"], ["b"]]), - ([[1, 2], [None], "ab", {}, [3, 4]], [["1", "2"], ["None"], ["a", "b"], [], ["3", "4"]]), -]) -def test_ok__valid_ugpio_view_table(arg: Any, retval: Any) -> None: - assert valid_ugpio_view_table(arg) == retval - - [email protected]("arg", [None, [None], 1]) -def test_fail__valid_ugpio_view_table(arg: Any) -> None: - with pytest.raises(ValidatorError): - print(valid_ugpio_view_table(arg)) diff --git a/testenv/tests/validators/test_ugpio.py b/testenv/tests/validators/test_ugpio.py new file mode 100644 index 00000000..196763cf --- /dev/null +++ b/testenv/tests/validators/test_ugpio.py @@ -0,0 +1,114 @@ +# ========================================================================== # +# # +# KVMD - The main Pi-KVM daemon. # +# # +# Copyright (C) 2018 Maxim Devaev <[email protected]> # +# # +# 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 typing import Callable +from typing import Any + +import pytest + +from kvmd.validators import ValidatorError +from kvmd.validators.ugpio import valid_ugpio_driver +from kvmd.validators.ugpio import valid_ugpio_channel +from kvmd.validators.ugpio import valid_ugpio_mode +from kvmd.validators.ugpio import valid_ugpio_view_table + +from kvmd.plugins.ugpio import UserGpioModes + + +# ===== [email protected]("validator", [valid_ugpio_driver, valid_ugpio_channel]) [email protected]("arg", [ + "test-", + "glados", + "test", + "_", + "_foo_bar_", + " aix", + "a" * 255, +]) +def test_ok__valid_ugpio_item(validator: Callable[[Any], str], arg: Any) -> None: + assert validator(arg) == arg.strip() + + [email protected]("validator", [valid_ugpio_driver, valid_ugpio_channel]) [email protected]("arg", [ + "тест", + "-molestia", + "te~st", + "-", + "-foo_bar", + "foo bar", + "a" * 256, + " ", + "", + None, +]) +def test_fail__valid_ugpio_item(validator: Callable[[Any], str], arg: Any) -> None: + with pytest.raises(ValidatorError): + print(validator(arg)) + + +# ===== [email protected]("arg", ["foo", " bar", " baz "]) +def test_ok__valid_ugpio_driver_variants(arg: Any) -> None: + value = valid_ugpio_driver(arg, set(["foo", "bar", "baz"])) + assert type(value) == str # pylint: disable=unidiomatic-typecheck + assert value == str(arg).strip() + + [email protected]("arg", ["BAR", " ", "", None]) +def test_fail__valid_ugpio_driver_variants(arg: Any) -> None: + with pytest.raises(ValidatorError): + print(valid_ugpio_driver(arg, set(["foo", "bar", "baz"]))) + + +# ===== [email protected]("arg", ["Input ", " OUTPUT "]) +def test_ok__valid_ugpio_mode(arg: Any) -> None: + assert valid_ugpio_mode(arg, UserGpioModes.ALL) == arg.strip().lower() + + [email protected]("arg", ["test", "", None]) +def test_fail__valid_ugpio_mode(arg: Any) -> None: + with pytest.raises(ValidatorError): + print(valid_ugpio_mode(arg, UserGpioModes.ALL)) + + +# ===== [email protected]("arg,retval", [ + ([], []), + ({}, []), + ([[]], [[]]), + ([{}], [[]]), + ([[[]]], [["[]"]]), + ("", []), + ("ab", [["a"], ["b"]]), + ([[1, 2], [None], "ab", {}, [3, 4]], [["1", "2"], ["None"], ["a", "b"], [], ["3", "4"]]), +]) +def test_ok__valid_ugpio_view_table(arg: Any, retval: Any) -> None: + assert valid_ugpio_view_table(arg) == retval + + [email protected]("arg", [None, [None], 1]) +def test_fail__valid_ugpio_view_table(arg: Any) -> None: + with pytest.raises(ValidatorError): + print(valid_ugpio_view_table(arg)) |