mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 17:20:30 +08:00
highlevel atx api
This commit is contained in:
parent
d4c597e945
commit
380b1d15e3
@ -125,19 +125,55 @@ class Atx: # pylint: disable=too-many-instance-attributes
|
|||||||
else:
|
else:
|
||||||
await asyncio.sleep(60)
|
await asyncio.sleep(60)
|
||||||
|
|
||||||
|
# =====
|
||||||
|
|
||||||
|
@_atx_working
|
||||||
|
async def power_on(self) -> bool:
|
||||||
|
if not self.get_state()["leds"]["power"]:
|
||||||
|
await self.click_power()
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
@_atx_working
|
||||||
|
async def power_off(self) -> bool:
|
||||||
|
if self.get_state()["leds"]["power"]:
|
||||||
|
await self.click_power_long()
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
@_atx_working
|
||||||
|
async def power_off_soft(self) -> bool:
|
||||||
|
if self.get_state()["leds"]["power"]:
|
||||||
|
await self.click_power()
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
@_atx_working
|
||||||
|
async def power_reset(self) -> bool:
|
||||||
|
if self.get_state()["leds"]["power"]:
|
||||||
|
await self.click_reset()
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
# =====
|
||||||
|
|
||||||
|
@_atx_working
|
||||||
async def click_power(self) -> None:
|
async def click_power(self) -> None:
|
||||||
get_logger().info("Clicking power ...")
|
get_logger().info("Clicking power ...")
|
||||||
await self.__click(self.__power_switch_pin, self.__click_delay)
|
await self.__click(self.__power_switch_pin, self.__click_delay)
|
||||||
|
|
||||||
|
@_atx_working
|
||||||
async def click_power_long(self) -> None:
|
async def click_power_long(self) -> None:
|
||||||
get_logger().info("Clicking power (long press) ...")
|
get_logger().info("Clicking power (long press) ...")
|
||||||
await self.__click(self.__power_switch_pin, self.__long_click_delay)
|
await self.__click(self.__power_switch_pin, self.__long_click_delay)
|
||||||
|
|
||||||
|
@_atx_working
|
||||||
async def click_reset(self) -> None:
|
async def click_reset(self) -> None:
|
||||||
get_logger().info("Clicking reset")
|
get_logger().info("Clicking reset")
|
||||||
await self.__click(self.__reset_switch_pin, self.__click_delay)
|
await self.__click(self.__reset_switch_pin, self.__click_delay)
|
||||||
|
|
||||||
@_atx_working
|
# =====
|
||||||
|
|
||||||
async def __click(self, pin: int, delay: float) -> None:
|
async def __click(self, pin: int, delay: float) -> None:
|
||||||
self.__region.enter()
|
self.__region.enter()
|
||||||
asyncio.ensure_future(self.__inner_click(pin, delay))
|
asyncio.ensure_future(self.__inner_click(pin, delay))
|
||||||
|
|||||||
@ -52,6 +52,7 @@ from ...validators.auth import valid_user
|
|||||||
from ...validators.auth import valid_passwd
|
from ...validators.auth import valid_passwd
|
||||||
from ...validators.auth import valid_auth_token
|
from ...validators.auth import valid_auth_token
|
||||||
|
|
||||||
|
from ...validators.kvm import valid_atx_power_action
|
||||||
from ...validators.kvm import valid_atx_button
|
from ...validators.kvm import valid_atx_button
|
||||||
from ...validators.kvm import valid_kvm_target
|
from ...validators.kvm import valid_kvm_target
|
||||||
from ...validators.kvm import valid_log_seek
|
from ...validators.kvm import valid_log_seek
|
||||||
@ -430,6 +431,17 @@ class Server: # pylint: disable=too-many-instance-attributes
|
|||||||
async def __atx_state_handler(self, _: aiohttp.web.Request) -> aiohttp.web.Response:
|
async def __atx_state_handler(self, _: aiohttp.web.Request) -> aiohttp.web.Response:
|
||||||
return _json(self.__atx.get_state())
|
return _json(self.__atx.get_state())
|
||||||
|
|
||||||
|
@_exposed("POST", "/atx/power")
|
||||||
|
async def __atx_power_handler(self, request: aiohttp.web.Request) -> aiohttp.web.Response:
|
||||||
|
action = valid_atx_power_action(request.query.get("action"))
|
||||||
|
done = await ({
|
||||||
|
"on": self.__atx.power_on,
|
||||||
|
"off": self.__atx.power_off,
|
||||||
|
"off_soft": self.__atx.power_off_soft,
|
||||||
|
"reset": self.__atx.power_reset,
|
||||||
|
}[action])()
|
||||||
|
return _json({"action": action, "done": done})
|
||||||
|
|
||||||
@_exposed("POST", "/atx/click")
|
@_exposed("POST", "/atx/click")
|
||||||
async def __atx_click_handler(self, request: aiohttp.web.Request) -> aiohttp.web.Response:
|
async def __atx_click_handler(self, request: aiohttp.web.Request) -> aiohttp.web.Response:
|
||||||
button = valid_atx_button(request.query.get("button"))
|
button = valid_atx_button(request.query.get("button"))
|
||||||
|
|||||||
@ -30,6 +30,10 @@ from .basic import valid_number
|
|||||||
|
|
||||||
|
|
||||||
# =====
|
# =====
|
||||||
|
def valid_atx_power_action(arg: Any) -> str:
|
||||||
|
return check_string_in_list(arg, "ATX power action", ["on", "off", "off_soft", "reset"])
|
||||||
|
|
||||||
|
|
||||||
def valid_atx_button(arg: Any) -> str:
|
def valid_atx_button(arg: Any) -> str:
|
||||||
return check_string_in_list(arg, "ATX button", ["power", "power_long", "reset"])
|
return check_string_in_list(arg, "ATX button", ["power", "power_long", "reset"])
|
||||||
|
|
||||||
|
|||||||
@ -27,6 +27,7 @@ import pytest
|
|||||||
from kvmd.keymap import KEYMAP
|
from kvmd.keymap import KEYMAP
|
||||||
|
|
||||||
from kvmd.validators import ValidatorError
|
from kvmd.validators import ValidatorError
|
||||||
|
from kvmd.validators.kvm import valid_atx_power_action
|
||||||
from kvmd.validators.kvm import valid_atx_button
|
from kvmd.validators.kvm import valid_atx_button
|
||||||
from kvmd.validators.kvm import valid_kvm_target
|
from kvmd.validators.kvm import valid_kvm_target
|
||||||
from kvmd.validators.kvm import valid_log_seek
|
from kvmd.validators.kvm import valid_log_seek
|
||||||
@ -38,6 +39,18 @@ from kvmd.validators.kvm import valid_hid_mouse_button
|
|||||||
from kvmd.validators.kvm import valid_hid_mouse_wheel
|
from kvmd.validators.kvm import valid_hid_mouse_wheel
|
||||||
|
|
||||||
|
|
||||||
|
# =====
|
||||||
|
@pytest.mark.parametrize("arg", ["ON ", "OFF ", "OFF_soft ", "RESET "])
|
||||||
|
def test_ok__valid_atx_power_action(arg: Any) -> None:
|
||||||
|
assert valid_atx_power_action(arg) == arg.strip().lower()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("arg", ["test", "", None])
|
||||||
|
def test_fail__valid_atx_power_action(arg: Any) -> None:
|
||||||
|
with pytest.raises(ValidatorError):
|
||||||
|
print(valid_atx_power_action(arg))
|
||||||
|
|
||||||
|
|
||||||
# =====
|
# =====
|
||||||
@pytest.mark.parametrize("arg", ["POWER ", "POWER_LONG ", "RESET "])
|
@pytest.mark.parametrize("arg", ["POWER ", "POWER_LONG ", "RESET "])
|
||||||
def test_ok__valid_atx_button(arg: Any) -> None:
|
def test_ok__valid_atx_button(arg: Any) -> None:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user