mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 01:00:29 +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:
|
||||
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:
|
||||
get_logger().info("Clicking power ...")
|
||||
await self.__click(self.__power_switch_pin, self.__click_delay)
|
||||
|
||||
@_atx_working
|
||||
async def click_power_long(self) -> None:
|
||||
get_logger().info("Clicking power (long press) ...")
|
||||
await self.__click(self.__power_switch_pin, self.__long_click_delay)
|
||||
|
||||
@_atx_working
|
||||
async def click_reset(self) -> None:
|
||||
get_logger().info("Clicking reset")
|
||||
await self.__click(self.__reset_switch_pin, self.__click_delay)
|
||||
|
||||
@_atx_working
|
||||
# =====
|
||||
|
||||
async def __click(self, pin: int, delay: float) -> None:
|
||||
self.__region.enter()
|
||||
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_auth_token
|
||||
|
||||
from ...validators.kvm import valid_atx_power_action
|
||||
from ...validators.kvm import valid_atx_button
|
||||
from ...validators.kvm import valid_kvm_target
|
||||
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:
|
||||
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")
|
||||
async def __atx_click_handler(self, request: aiohttp.web.Request) -> aiohttp.web.Response:
|
||||
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:
|
||||
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.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_kvm_target
|
||||
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
|
||||
|
||||
|
||||
# =====
|
||||
@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 "])
|
||||
def test_ok__valid_atx_button(arg: Any) -> None:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user