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()
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()
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
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
async def _request_subscripton(self, web_request: WebRequest) -> Dict[str, Any]: args = web_request.get_args() conn = web_request.get_connection() # Build the subscription request from a superset of all client # subscriptions sub = args.get('objects', {}) if conn is None: raise self.error( "No connection associated with subscription request") self.subscriptions[conn] = sub all_subs: Dict[str, Any] = {} # request superset of all client subscriptions for sub in self.subscriptions.values(): for obj, items in sub.items(): if obj in all_subs: pi = all_subs[obj] if items is None or pi is None: all_subs[obj] = None else: uitems = list(set(pi) | set(items)) all_subs[obj] = uitems else: all_subs[obj] = items args['objects'] = all_subs args['response_template'] = {'method': "process_status_update"} result = await self._request_standard(web_request) # prune the status response pruned_status = {} all_status = result['status'] sub = self.subscriptions.get(conn, {}) for obj, fields in all_status.items(): if obj in sub: valid_fields = sub[obj] if valid_fields is None: pruned_status[obj] = fields else: pruned_status[obj] = { k: v for k, v in fields.items() if k in valid_fields } result['status'] = pruned_status return result