def decode(cls, msg): try: obj = json.loads(msg) except: raise exception.JsonRpcParseError() return cls.fromRawObject(obj)
def _parseMessage(self, obj): client, server_address, context, msg = obj ctx = _JsonRpcServeRequestContext(client, server_address, context) try: rawRequests = json.loads(msg) except: ctx.addResponse( JsonRpcResponse(None, exception.JsonRpcParseError(), None)) ctx.sendReply() return if isinstance(rawRequests, list): # Empty batch request if len(rawRequests) == 0: ctx.addResponse( JsonRpcResponse( None, exception.JsonRpcInvalidRequestError( "request batch is empty", request=rawRequests), None)) ctx.sendReply() return else: # From this point on we know it's always a list rawRequests = [rawRequests] # JSON Parsed handling each request requests = [] for rawRequest in rawRequests: try: req = JsonRpcRequest.fromRawObject(rawRequest) requests.append(req) except vdsmexception.VdsmException as err: ctx.addResponse(JsonRpcResponse(None, err, None)) except: ctx.addResponse( JsonRpcResponse(None, exception.JsonRpcInternalError(), None)) ctx.setRequests(requests) # No request was built successfully or is only notifications if ctx.counter == 0: ctx.sendReply() for request in requests: self._runRequest(ctx, request)