def testSlowMethod(self, ssl): bridge = _DummyBridge() with constructClient(self.log, bridge, ssl) as clientFactory: with self._client(clientFactory) as client: with self.assertRaises(JsonRpcErrorBase) as cm: self._callTimeout(client, "slow_response", [], CALL_ID) self.assertEqual(cm.exception.code, JsonRpcNoResponseError().code)
def _callTimeout(self, client, methodName, params=None, rid=None, timeout=None): responses = client.call(JsonRpcRequest(methodName, params, rid), timeout=CALL_TIMEOUT) if not responses: raise JsonRpcNoResponseError(method=methodName) resp = responses[0] if resp.error is not None: raise resp.error return resp.result
def _callMethod(self, methodName, *args, **kwargs): try: method = _COMMAND_CONVERTER[methodName] except KeyError as e: raise Exception("Attempt to call function: %s with " "arguments: %s error: %s" % (methodName, args, e)) class_name, method_name = method.split('.') timeout = kwargs.pop('_transport_timeout', self._default_timeout) params = self._prepare_args(class_name, method_name, args, kwargs) req = JsonRpcRequest(method, params, reqId=str(uuid4())) responses = self._client.call( req, timeout=self._timeouts.get(method_name, timeout)) if responses: resp = responses[0] else: raise JsonRpcNoResponseError(method=method) if resp.error is not None: return response.error_raw(resp.error.code, str(resp.error)) if not self._xml_compat: return response.success_raw(resp.result) if resp.result and resp.result is not True: # None is translated to True inside our JSONRPC implementation if isinstance(resp.result, list): return response.success(items=resp.result) elif isinstance(resp.result, six.string_types): return response.success(resp.result) else: return response.success(**resp.result) return response.success()