def jsonrpc(self) -> Optional[JrpcRequest]: # ignore body and json if HTTP methos is not POST if self.method != 'POST': return None if self._parsed_jsonrpc is _empty: self._parsed_jsonrpc = None from jussi.errors import ParseError from jussi.errors import InvalidRequest from jussi.validators import validate_jsonrpc_request try: # raise ParseError for blank/empty body if self.body is _empty: raise ParseError(http_request=self) # raise ParseError if parsing fails try: self._parsed_json = json_loads(self.body) except Exception as e: raise ParseError(http_request=self, exception=e) # validate jsonrpc jsonrpc_request = self._parsed_json validate_jsonrpc_request(jsonrpc_request) if isinstance(jsonrpc_request, dict): self._parsed_jsonrpc = jsonrpc_from_request( self, 0, jsonrpc_request) self.is_single_jrpc = True elif isinstance(jsonrpc_request, list): self._parsed_jsonrpc = [ jsonrpc_from_request(self, batch_index, req) for batch_index, req in enumerate(jsonrpc_request) ] self.is_batch_jrpc = True except ParseError as e: raise e except Exception as e: raise InvalidRequest(http_request=self, exception=e) return self._parsed_jsonrpc
def test_vaildate_jsonrpc_requests(batch_combined_request): request = batch_combined_request assert validate_jsonrpc_request(request) is None
def test_vaildate_jsonrpc_request_invalid(invalid_jrpc_single_and_batch_request): request = invalid_jrpc_single_and_batch_request with pytest.raises((AssertionError, InvalidRequest, KeyError, AttributeError)): validate_jsonrpc_request(request)