예제 #1
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()
예제 #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 = 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()
예제 #3
0
파일: wled.py 프로젝트: ihrapsa/moonraker
 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
예제 #4
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
예제 #5
0
    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