power: introduce "force" argument for remote method calls
The "force" argument may be used turn on a device during a print that is otherwise locked for normal requests. Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
parent
a6b8a8a3e9
commit
aeea9a2efd
|
@ -169,7 +169,9 @@ class PrinterPower:
|
|||
result[name] = "device_not_found"
|
||||
return result
|
||||
|
||||
def set_device_power(self, device: str, state: Union[bool, str]) -> None:
|
||||
def set_device_power(
|
||||
self, device: str, state: Union[bool, str], force: bool = False
|
||||
) -> None:
|
||||
request: str = ""
|
||||
if isinstance(state, bool):
|
||||
request = "on" if state else "off"
|
||||
|
@ -185,7 +187,8 @@ class PrinterPower:
|
|||
return
|
||||
event_loop = self.server.get_event_loop()
|
||||
event_loop.register_callback(
|
||||
self.devices[device].process_request, request)
|
||||
self.devices[device].process_request, request, force=force
|
||||
)
|
||||
|
||||
async def add_device(self, name: str, device: PowerDevice) -> None:
|
||||
if name in self.devices:
|
||||
|
@ -361,7 +364,7 @@ class PowerDevice:
|
|||
self.init_task = eventloop.create_task(ret)
|
||||
return self.state != "error"
|
||||
|
||||
async def process_request(self, req: str) -> str:
|
||||
async def process_request(self, req: str, force: bool = False) -> str:
|
||||
if self.state == "init" and self.request_lock.locked():
|
||||
# return immediately if the device is initializing,
|
||||
# otherwise its possible for this to block indefinitely
|
||||
|
@ -381,6 +384,7 @@ class PowerDevice:
|
|||
if base_state != cur_state:
|
||||
self.notify_power_changed()
|
||||
return cur_state
|
||||
if not force:
|
||||
printing = await self._check_klippy_printing()
|
||||
if self.locked_while_printing and printing:
|
||||
raise self.server.error(
|
||||
|
|
Loading…
Reference in New Issue