Esempio n. 1
0
 async def _handle_update_request(self,
                                  web_request: WebRequest
                                  ) -> str:
     await self.initialized_lock.wait()
     if await self._check_klippy_printing():
         raise self.server.error("Update Refused: Klippy is printing")
     app: str = web_request.get_endpoint().split("/")[-1]
     if app == "client":
         app = web_request.get('name')
     if self.cmd_helper.is_app_updating(app):
         return f"Object {app} is currently being updated"
     updater = self.updaters.get(app, None)
     if updater is None:
         raise self.server.error(f"Updater {app} not available", 404)
     async with self.cmd_request_lock:
         self.cmd_helper.set_update_info(app, id(web_request))
         try:
             if not await self._check_need_reinstall(app):
                 await updater.update()
         except Exception as e:
             self.cmd_helper.notify_update_response(
                 f"Error updating {app}")
             self.cmd_helper.notify_update_response(
                 str(e), is_complete=True)
             raise
         finally:
             self.cmd_helper.clear_update_info()
     return "ok"
Esempio n. 2
0
 async def _request_standard(self, web_request: WebRequest) -> Any:
     rpc_method = web_request.get_endpoint()
     args = web_request.get_args()
     # Create a base klippy request
     base_request = KlippyRequest(rpc_method, args)
     self.pending_requests[base_request.id] = base_request
     self.event_loop.register_callback(self._write_request, base_request)
     return await base_request.wait()
Esempio n. 3
0
 async def _handle_machine_request(self, web_request: WebRequest) -> str:
     ep = web_request.get_endpoint()
     if ep == "/machine/shutdown":
         await self.shutdown_machine()
     elif ep == "/machine/reboot":
         await self.reboot_machine()
     else:
         raise self.server.error("Unsupported machine request")
     return "ok"
Esempio n. 4
0
 async def _request_standard(self, web_request: WebRequest) -> Any:
     rpc_method = web_request.get_endpoint()
     args = web_request.get_args()
     # Create a base klippy request
     base_request = BaseRequest(rpc_method, args)
     self.pending_requests[base_request.id] = base_request
     self.ioloop.spawn_callback(self.klippy_connection.send_request,
                                base_request)
     return await base_request.wait()
Esempio n. 5
0
 async def make_request(self, web_request: WebRequest) -> Any:
     rpc_method = web_request.get_endpoint()
     if rpc_method == "objects/subscribe":
         return await self._request_subscripton(web_request)
     else:
         if rpc_method == "gcode/script":
             script = web_request.get_str('script', "")
             data_store: DataStore = self.lookup_component('data_store')
             data_store.store_gcode_command(script)
         return await self._request_standard(web_request)
Esempio n. 6
0
 async def _handle_machine_request(self, web_request: WebRequest) -> str:
     ep = web_request.get_endpoint()
     if self.inside_container:
         raise self.server.error(
             f"Cannot {ep.split('/')[-1]} from within a "
             f"{self.virt_id} container")
     if ep == "/machine/shutdown":
         await self.shutdown_machine()
     elif ep == "/machine/reboot":
         await self.reboot_machine()
     else:
         raise self.server.error("Unsupported machine request")
     return "ok"
Esempio n. 7
0
 async def request(self, web_request: WebRequest) -> Any:
     if not self.is_connected():
         raise ServerError("Klippy Host not connected", 503)
     rpc_method = web_request.get_endpoint()
     if rpc_method == "objects/subscribe":
         return await self._request_subscripton(web_request)
     else:
         if rpc_method == "gcode/script":
             script = web_request.get_str('script', "")
             if script:
                 self.server.send_event(
                     "klippy_connection:gcode_received", script)
         return await self._request_standard(web_request)
Esempio n. 8
0
 async def _handle_machine_request(self, web_request: WebRequest) -> str:
     ep = web_request.get_endpoint()
     if self.inside_container:
         virt_id = self.system_info['virtualization'].get('virt_id', "none")
         raise self.server.error(
             f"Cannot {ep.split('/')[-1]} from within a "
             f"{virt_id} container")
     if ep == "/machine/shutdown":
         await self.sys_provider.shutdown()
     elif ep == "/machine/reboot":
         await self.sys_provider.reboot()
     else:
         raise self.server.error("Unsupported machine request")
     return "ok"
Esempio n. 9
0
 async def _handle_batch_wled_request(
         self: WLED, web_request: WebRequest) -> Dict[str, Any]:
     args = web_request.get_args()
     ep = web_request.get_endpoint()
     if not args:
         raise self.server.error("No arguments provided")
     requested_strips = {k: self.strips.get(k, None) for k in args}
     result = {}
     req = ep.split("/")[-1]
     for name, strip in requested_strips.items():
         if strip is not None:
             result[name] = await self._process_request(strip, req, -1)
         else:
             result[name] = {"error": "strip_not_found"}
     return result
Esempio n. 10
0
 async def _handle_batch_power_request(
         self, web_request: WebRequest) -> Dict[str, Any]:
     args = web_request.get_args()
     ep = web_request.get_endpoint()
     if not args:
         raise self.server.error("No arguments provided")
     requested_devs = {k: self.devices.get(k, None) for k in args}
     result = {}
     req = ep.split("/")[-1]
     for name, device in requested_devs.items():
         if device is not None:
             result[name] = await self._process_request(device, req)
         else:
             result[name] = "device_not_found"
     return result
Esempio n. 11
0
 async def _handle_service_request(self, web_request: WebRequest) -> str:
     name: str = web_request.get('service')
     action = web_request.get_endpoint().split('/')[-1]
     if name == "moonraker":
         if action != "restart":
             raise self.server.error(
                 f"Service action '{action}' not available for moonraker")
         event_loop = self.server.get_event_loop()
         event_loop.register_callback(self.do_service_action, action, name)
     elif self.sys_provider.is_service_available(name):
         await self.do_service_action(action, name)
     else:
         if name in ALLOWED_SERVICES:
             raise self.server.error(f"Service '{name}' not installed")
         raise self.server.error(f"Service '{name}' not allowed")
     return "ok"
Esempio n. 12
0
 async def _handle_service_request(self, web_request: WebRequest) -> str:
     name: str = web_request.get('service')
     action = web_request.get_endpoint().split('/')[-1]
     if name == "moonraker":
         if action != "restart":
             raise self.server.error(
                 f"Service action '{action}' not available for moonraker")
         IOLoop.current().spawn_callback(self.do_service_action, action,
                                         name)
     elif name in self.available_services:
         await self.do_service_action(action, name)
     else:
         if name in ALLOWED_SERVICES and \
                 name not in self.available_services:
             raise self.server.error(f"Service '{name}' not installed")
         raise self.server.error(f"Service '{name}' not allowed")
     return "ok"