From 7dce53afe30c1e57d60649f938281d9cc2742861 Mon Sep 17 00:00:00 2001 From: Sungkwang Lee Date: Mon, 6 Nov 2017 15:55:50 +0900 Subject: [PATCH] Passing exception type to client --- mprpc/client.c | 416 ++++++++++++++++++++++++++++---------------- mprpc/client.pyx | 5 + mprpc/exceptions.py | 4 +- mprpc/server.c | 158 +++++++++++------ mprpc/server.pyx | 6 +- 5 files changed, 383 insertions(+), 206 deletions(-) diff --git a/mprpc/client.c b/mprpc/client.c index fd9f467..96563d7 100644 --- a/mprpc/client.c +++ b/mprpc/client.c @@ -973,11 +973,13 @@ static const char __pyx_k_MSGPACKRPC_REQUEST[] = "MSGPACKRPC_REQUEST"; static const char __pyx_k_RPCPoolClient_call[] = "RPCPoolClient.call"; static const char __pyx_k_MSGPACKRPC_RESPONSE[] = "MSGPACKRPC_RESPONSE"; static const char __pyx_k_RPCPoolClient___init[] = "RPCPoolClient.__init__"; +static const char __pyx_k_remote_exception_type[] = "remote_exception_type"; static const char __pyx_k_gsocketpool_connection[] = "gsocketpool.connection"; +static const char __pyx_k_remote_exception_module[] = "remote_exception_module"; static const char __pyx_k_RPCPoolClient_is_expired[] = "RPCPoolClient.is_expired"; -static const char __pyx_k_Users_ikuya_dev_projects_mprpc[] = "/Users/ikuya/dev/projects/mprpc/mprpc/client.pyx"; static const char __pyx_k_Closing_a_msgpackrpc_connection[] = "Closing a msgpackrpc connection"; static const char __pyx_k_The_connection_has_already_been[] = "The connection has already been established"; +static const char __pyx_k_home_workspace_mprpc_mprpc_clie[] = "/home/workspace/mprpc/mprpc/client.pyx"; static const char __pyx_k_An_error_has_occurred_while_clos[] = "An error has occurred while closing the socket"; static const char __pyx_k_Attempt_to_close_an_unopened_soc[] = "Attempt to close an unopened socket"; static const char __pyx_k_Lifetime_must_be_a_positive_valu[] = "Lifetime must be a positive value"; @@ -1011,7 +1013,6 @@ static PyObject *__pyx_n_s_StopIteration; static PyObject *__pyx_n_s_TCP_NODELAY; static PyObject *__pyx_kp_s_The_connection_has_already_been; static PyObject *__pyx_n_s_Unpacker; -static PyObject *__pyx_kp_s_Users_ikuya_dev_projects_mprpc; static PyObject *__pyx_kp_s_Wrapper_class_of_class_RPCClient; static PyObject *__pyx_n_s_args; static PyObject *__pyx_n_s_call; @@ -1025,6 +1026,7 @@ static PyObject *__pyx_n_s_feed; static PyObject *__pyx_n_s_format; static PyObject *__pyx_n_s_gevent; static PyObject *__pyx_n_s_gsocketpool_connection; +static PyObject *__pyx_kp_s_home_workspace_mprpc_mprpc_clie; static PyObject *__pyx_n_s_host; static PyObject *__pyx_n_s_import; static PyObject *__pyx_n_s_init; @@ -1055,6 +1057,8 @@ static PyObject *__pyx_n_s_pyx_vtable; static PyObject *__pyx_n_s_qualname; static PyObject *__pyx_n_s_reconnect; static PyObject *__pyx_n_s_recv; +static PyObject *__pyx_n_s_remote_exception_module; +static PyObject *__pyx_n_s_remote_exception_type; static PyObject *__pyx_n_s_self; static PyObject *__pyx_n_s_sendall; static PyObject *__pyx_n_s_setsockopt; @@ -3031,6 +3035,7 @@ static PyObject *__pyx_f_5mprpc_6client_9RPCClient__parse_response(struct __pyx_ CYTHON_UNUSED PyObject *__pyx_v__ = NULL; PyObject *__pyx_v_error = NULL; PyObject *__pyx_v_result = NULL; + PyObject *__pyx_v_exc = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; @@ -3214,8 +3219,8 @@ static PyObject *__pyx_f_5mprpc_6client_9RPCClient__parse_response(struct __pyx_ * raise RPCError('Invalid Message ID') * * if error: # <<<<<<<<<<<<<< - * raise RPCError(str(error)) - * + * if isinstance(error, tuple): + * exc = RPCError(str(error[0])) */ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_error); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 172, __pyx_L1_error) if (__pyx_t_1) { @@ -3223,60 +3228,162 @@ static PyObject *__pyx_f_5mprpc_6client_9RPCClient__parse_response(struct __pyx_ /* "mprpc/client.pyx":173 * * if error: + * if isinstance(error, tuple): # <<<<<<<<<<<<<< + * exc = RPCError(str(error[0])) + * exc.remote_exception_module = error[1] + */ + __pyx_t_1 = PyTuple_Check(__pyx_v_error); + __pyx_t_3 = (__pyx_t_1 != 0); + if (__pyx_t_3) { + + /* "mprpc/client.pyx":174 + * if error: + * if isinstance(error, tuple): + * exc = RPCError(str(error[0])) # <<<<<<<<<<<<<< + * exc.remote_exception_module = error[1] + * exc.remote_exception_type = error[2] + */ + __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_RPCError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_error, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); + __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + } + } + if (!__pyx_t_5) { + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_GOTREF(__pyx_t_4); + } else { + __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL; + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_6); + __pyx_t_6 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_exc = __pyx_t_4; + __pyx_t_4 = 0; + + /* "mprpc/client.pyx":175 + * if isinstance(error, tuple): + * exc = RPCError(str(error[0])) + * exc.remote_exception_module = error[1] # <<<<<<<<<<<<<< + * exc.remote_exception_type = error[2] + * raise exc + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_error, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_n_s_remote_exception_module, __pyx_t_4) < 0) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "mprpc/client.pyx":176 + * exc = RPCError(str(error[0])) + * exc.remote_exception_module = error[1] + * exc.remote_exception_type = error[2] # <<<<<<<<<<<<<< + * raise exc + * raise RPCError(str(error)) + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_error, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_n_s_remote_exception_type, __pyx_t_4) < 0) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "mprpc/client.pyx":177 + * exc.remote_exception_module = error[1] + * exc.remote_exception_type = error[2] + * raise exc # <<<<<<<<<<<<<< + * raise RPCError(str(error)) + * + */ + __Pyx_Raise(__pyx_v_exc, 0, 0, 0); + __PYX_ERR(0, 177, __pyx_L1_error) + + /* "mprpc/client.pyx":173 + * + * if error: + * if isinstance(error, tuple): # <<<<<<<<<<<<<< + * exc = RPCError(str(error[0])) + * exc.remote_exception_module = error[1] + */ + } + + /* "mprpc/client.pyx":178 + * exc.remote_exception_type = error[2] + * raise exc * raise RPCError(str(error)) # <<<<<<<<<<<<<< * * return result */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_RPCError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 173, __pyx_L1_error) + __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_RPCError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 178, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_v_error); __Pyx_GIVEREF(__pyx_v_error); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_error); - __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = NULL; + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_error); + __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_8, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_6)) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_7, function); } } - if (!__pyx_t_6) { - __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (!__pyx_t_8) { + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_GOTREF(__pyx_t_4); } else { - __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL; - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 173, __pyx_L1_error) + __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_8); __pyx_t_8 = NULL; + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_6); + __pyx_t_6 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 178, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(0, 173, __pyx_L1_error) + __PYX_ERR(0, 178, __pyx_L1_error) /* "mprpc/client.pyx":172 * raise RPCError('Invalid Message ID') * * if error: # <<<<<<<<<<<<<< - * raise RPCError(str(error)) - * + * if isinstance(error, tuple): + * exc = RPCError(str(error[0])) */ } - /* "mprpc/client.pyx":175 + /* "mprpc/client.pyx":180 * raise RPCError(str(error)) * * return result # <<<<<<<<<<<<<< @@ -3309,12 +3416,13 @@ static PyObject *__pyx_f_5mprpc_6client_9RPCClient__parse_response(struct __pyx_ __Pyx_XDECREF(__pyx_v__); __Pyx_XDECREF(__pyx_v_error); __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_exc); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "mprpc/client.pyx":206 +/* "mprpc/client.pyx":211 * """ * * def __init__(self, host, port, timeout=None, lifetime=None, # <<<<<<<<<<<<<< @@ -3330,14 +3438,14 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_6__defaults__(CYTHON_UN __Pyx_RefNannySetupContext("__defaults__", 0); __Pyx_XDECREF(__pyx_r); - /* "mprpc/client.pyx":209 + /* "mprpc/client.pyx":214 * pack_encoding='utf-8', unpack_encoding='utf-8', * pack_params=dict(), unpack_params=dict(use_list=False), * tcp_no_delay=False, keep_alive=False): # <<<<<<<<<<<<<< * * if lifetime: */ - __pyx_t_1 = PyTuple_New(8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 206, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 211, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)Py_None)); __Pyx_GIVEREF(((PyObject *)Py_None)); @@ -3364,14 +3472,14 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_6__defaults__(CYTHON_UN __Pyx_GIVEREF(((PyObject *)Py_False)); PyTuple_SET_ITEM(__pyx_t_1, 7, ((PyObject *)Py_False)); - /* "mprpc/client.pyx":206 + /* "mprpc/client.pyx":211 * """ * * def __init__(self, host, port, timeout=None, lifetime=None, # <<<<<<<<<<<<<< * pack_encoding='utf-8', unpack_encoding='utf-8', * pack_params=dict(), unpack_params=dict(use_list=False), */ - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 206, __pyx_L1_error) + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 211, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); @@ -3451,12 +3559,12 @@ static PyObject *__pyx_pw_5mprpc_6client_13RPCPoolClient_1__init__(PyObject *__p case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_host)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, 1); __PYX_ERR(0, 206, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, 1); __PYX_ERR(0, 211, __pyx_L3_error) } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_port)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, 2); __PYX_ERR(0, 206, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, 2); __PYX_ERR(0, 211, __pyx_L3_error) } case 3: if (kw_args > 0) { @@ -3500,7 +3608,7 @@ static PyObject *__pyx_pw_5mprpc_6client_13RPCPoolClient_1__init__(PyObject *__p } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 206, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 211, __pyx_L3_error) } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -3533,7 +3641,7 @@ static PyObject *__pyx_pw_5mprpc_6client_13RPCPoolClient_1__init__(PyObject *__p } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 206, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 211, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("mprpc.client.RPCPoolClient.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); @@ -3556,17 +3664,17 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient___init__(CYTHON_UNUSED PyObject *__pyx_t_5 = NULL; __Pyx_RefNannySetupContext("__init__", 0); - /* "mprpc/client.pyx":211 + /* "mprpc/client.pyx":216 * tcp_no_delay=False, keep_alive=False): * * if lifetime: # <<<<<<<<<<<<<< * assert lifetime > 0, 'Lifetime must be a positive value' * self._lifetime = time.time() + lifetime */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_lifetime); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 211, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_lifetime); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 216, __pyx_L1_error) if (__pyx_t_1) { - /* "mprpc/client.pyx":212 + /* "mprpc/client.pyx":217 * * if lifetime: * assert lifetime > 0, 'Lifetime must be a positive value' # <<<<<<<<<<<<<< @@ -3575,26 +3683,26 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient___init__(CYTHON_UNUSED */ #ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { - __pyx_t_2 = PyObject_RichCompare(__pyx_v_lifetime, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 212, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 212, __pyx_L1_error) + __pyx_t_2 = PyObject_RichCompare(__pyx_v_lifetime, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 217, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 217, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Lifetime_must_be_a_positive_valu); - __PYX_ERR(0, 212, __pyx_L1_error) + __PYX_ERR(0, 217, __pyx_L1_error) } } #endif - /* "mprpc/client.pyx":213 + /* "mprpc/client.pyx":218 * if lifetime: * assert lifetime > 0, 'Lifetime must be a positive value' * self._lifetime = time.time() + lifetime # <<<<<<<<<<<<<< * else: * self._lifetime = None */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 213, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 213, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 218, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = NULL; @@ -3608,20 +3716,20 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient___init__(CYTHON_UNUSED } } if (__pyx_t_3) { - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 213, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { - __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 213, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_2, __pyx_v_lifetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 213, __pyx_L1_error) + __pyx_t_4 = PyNumber_Add(__pyx_t_2, __pyx_v_lifetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 218, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lifetime_2, __pyx_t_4) < 0) __PYX_ERR(0, 213, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lifetime_2, __pyx_t_4) < 0) __PYX_ERR(0, 218, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "mprpc/client.pyx":211 + /* "mprpc/client.pyx":216 * tcp_no_delay=False, keep_alive=False): * * if lifetime: # <<<<<<<<<<<<<< @@ -3631,7 +3739,7 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient___init__(CYTHON_UNUSED goto __pyx_L3; } - /* "mprpc/client.pyx":215 + /* "mprpc/client.pyx":220 * self._lifetime = time.time() + lifetime * else: * self._lifetime = None # <<<<<<<<<<<<<< @@ -3639,28 +3747,28 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient___init__(CYTHON_UNUSED * RPCClient.__init__( */ /*else*/ { - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lifetime_2, Py_None) < 0) __PYX_ERR(0, 215, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_lifetime_2, Py_None) < 0) __PYX_ERR(0, 220, __pyx_L1_error) } __pyx_L3:; - /* "mprpc/client.pyx":217 + /* "mprpc/client.pyx":222 * self._lifetime = None * * RPCClient.__init__( # <<<<<<<<<<<<<< * self, host, port, timeout=timeout, lazy=True, * pack_encoding=pack_encoding, unpack_encoding=unpack_encoding, */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_5mprpc_6client_RPCClient), __pyx_n_s_init); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 217, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_5mprpc_6client_RPCClient), __pyx_n_s_init); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - /* "mprpc/client.pyx":218 + /* "mprpc/client.pyx":223 * * RPCClient.__init__( * self, host, port, timeout=timeout, lazy=True, # <<<<<<<<<<<<<< * pack_encoding=pack_encoding, unpack_encoding=unpack_encoding, * pack_params=pack_params, unpack_params=unpack_params, */ - __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 217, __pyx_L1_error) + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); @@ -3671,56 +3779,56 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient___init__(CYTHON_UNUSED __Pyx_INCREF(__pyx_v_port); __Pyx_GIVEREF(__pyx_v_port); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_port); - __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L1_error) + __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_timeout, __pyx_v_timeout) < 0) __PYX_ERR(0, 218, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_lazy, Py_True) < 0) __PYX_ERR(0, 218, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_timeout, __pyx_v_timeout) < 0) __PYX_ERR(0, 223, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_lazy, Py_True) < 0) __PYX_ERR(0, 223, __pyx_L1_error) - /* "mprpc/client.pyx":219 + /* "mprpc/client.pyx":224 * RPCClient.__init__( * self, host, port, timeout=timeout, lazy=True, * pack_encoding=pack_encoding, unpack_encoding=unpack_encoding, # <<<<<<<<<<<<<< * pack_params=pack_params, unpack_params=unpack_params, * tcp_no_delay=tcp_no_delay, keep_alive=keep_alive) */ - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_pack_encoding, __pyx_v_pack_encoding) < 0) __PYX_ERR(0, 218, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_unpack_encoding, __pyx_v_unpack_encoding) < 0) __PYX_ERR(0, 218, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_pack_encoding, __pyx_v_pack_encoding) < 0) __PYX_ERR(0, 223, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_unpack_encoding, __pyx_v_unpack_encoding) < 0) __PYX_ERR(0, 223, __pyx_L1_error) - /* "mprpc/client.pyx":220 + /* "mprpc/client.pyx":225 * self, host, port, timeout=timeout, lazy=True, * pack_encoding=pack_encoding, unpack_encoding=unpack_encoding, * pack_params=pack_params, unpack_params=unpack_params, # <<<<<<<<<<<<<< * tcp_no_delay=tcp_no_delay, keep_alive=keep_alive) * */ - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_pack_params, __pyx_v_pack_params) < 0) __PYX_ERR(0, 218, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_unpack_params, __pyx_v_unpack_params) < 0) __PYX_ERR(0, 218, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_pack_params, __pyx_v_pack_params) < 0) __PYX_ERR(0, 223, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_unpack_params, __pyx_v_unpack_params) < 0) __PYX_ERR(0, 223, __pyx_L1_error) - /* "mprpc/client.pyx":221 + /* "mprpc/client.pyx":226 * pack_encoding=pack_encoding, unpack_encoding=unpack_encoding, * pack_params=pack_params, unpack_params=unpack_params, * tcp_no_delay=tcp_no_delay, keep_alive=keep_alive) # <<<<<<<<<<<<<< * * def is_expired(self): */ - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_tcp_no_delay, __pyx_v_tcp_no_delay) < 0) __PYX_ERR(0, 218, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_keep_alive, __pyx_v_keep_alive) < 0) __PYX_ERR(0, 218, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_tcp_no_delay, __pyx_v_tcp_no_delay) < 0) __PYX_ERR(0, 223, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_keep_alive, __pyx_v_keep_alive) < 0) __PYX_ERR(0, 223, __pyx_L1_error) - /* "mprpc/client.pyx":217 + /* "mprpc/client.pyx":222 * self._lifetime = None * * RPCClient.__init__( # <<<<<<<<<<<<<< * self, host, port, timeout=timeout, lazy=True, * pack_encoding=pack_encoding, unpack_encoding=unpack_encoding, */ - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 217, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "mprpc/client.pyx":206 + /* "mprpc/client.pyx":211 * """ * * def __init__(self, host, port, timeout=None, lifetime=None, # <<<<<<<<<<<<<< @@ -3744,7 +3852,7 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient___init__(CYTHON_UNUSED return __pyx_r; } -/* "mprpc/client.pyx":223 +/* "mprpc/client.pyx":228 * tcp_no_delay=tcp_no_delay, keep_alive=keep_alive) * * def is_expired(self): # <<<<<<<<<<<<<< @@ -3778,16 +3886,16 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_2is_expired(CYTHON_UNUS PyObject *__pyx_t_6 = NULL; __Pyx_RefNannySetupContext("is_expired", 0); - /* "mprpc/client.pyx":229 + /* "mprpc/client.pyx":234 * """ * * if not self._lifetime or time.time() > self._lifetime: # <<<<<<<<<<<<<< * return True * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lifetime_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 229, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lifetime_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 229, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 234, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = ((!__pyx_t_3) != 0); if (!__pyx_t_4) { @@ -3795,9 +3903,9 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_2is_expired(CYTHON_UNUS __pyx_t_1 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 229, __pyx_L1_error) + __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 229, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = NULL; @@ -3811,25 +3919,25 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_2is_expired(CYTHON_UNUS } } if (__pyx_t_5) { - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 229, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 234, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else { - __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 229, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 234, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lifetime_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 229, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_lifetime_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = PyObject_RichCompare(__pyx_t_2, __pyx_t_6, Py_GT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 229, __pyx_L1_error) + __pyx_t_5 = PyObject_RichCompare(__pyx_t_2, __pyx_t_6, Py_GT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 234, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 229, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 234, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_1 = __pyx_t_4; __pyx_L4_bool_binop_done:; if (__pyx_t_1) { - /* "mprpc/client.pyx":230 + /* "mprpc/client.pyx":235 * * if not self._lifetime or time.time() > self._lifetime: * return True # <<<<<<<<<<<<<< @@ -3841,7 +3949,7 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_2is_expired(CYTHON_UNUS __pyx_r = Py_True; goto __pyx_L0; - /* "mprpc/client.pyx":229 + /* "mprpc/client.pyx":234 * """ * * if not self._lifetime or time.time() > self._lifetime: # <<<<<<<<<<<<<< @@ -3850,7 +3958,7 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_2is_expired(CYTHON_UNUS */ } - /* "mprpc/client.pyx":233 + /* "mprpc/client.pyx":238 * * else: * return False # <<<<<<<<<<<<<< @@ -3864,7 +3972,7 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_2is_expired(CYTHON_UNUS goto __pyx_L0; } - /* "mprpc/client.pyx":223 + /* "mprpc/client.pyx":228 * tcp_no_delay=tcp_no_delay, keep_alive=keep_alive) * * def is_expired(self): # <<<<<<<<<<<<<< @@ -3885,7 +3993,7 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_2is_expired(CYTHON_UNUS return __pyx_r; } -/* "mprpc/client.pyx":235 +/* "mprpc/client.pyx":240 * return False * * def call(self, str method, *args): # <<<<<<<<<<<<<< @@ -3934,12 +4042,12 @@ static PyObject *__pyx_pw_5mprpc_6client_13RPCPoolClient_5call(PyObject *__pyx_s case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("call", 0, 2, 2, 1); __PYX_ERR(0, 235, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("call", 0, 2, 2, 1); __PYX_ERR(0, 240, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 2) ? pos_args : 2; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "call") < 0)) __PYX_ERR(0, 235, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "call") < 0)) __PYX_ERR(0, 240, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) < 2) { goto __pyx_L5_argtuple_error; @@ -3952,14 +4060,14 @@ static PyObject *__pyx_pw_5mprpc_6client_13RPCPoolClient_5call(PyObject *__pyx_s } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("call", 0, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 235, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("call", 0, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 240, __pyx_L3_error) __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_AddTraceback("mprpc.client.RPCPoolClient.call", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyString_Type), 1, "method", 1))) __PYX_ERR(0, 235, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyString_Type), 1, "method", 1))) __PYX_ERR(0, 240, __pyx_L1_error) __pyx_r = __pyx_pf_5mprpc_6client_13RPCPoolClient_4call(__pyx_self, __pyx_v_self, __pyx_v_method, __pyx_v_args); /* function exit code */ @@ -3987,7 +4095,7 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_4call(CYTHON_UNUSED PyO PyObject *__pyx_t_10 = NULL; __Pyx_RefNannySetupContext("call", 0); - /* "mprpc/client.pyx":242 + /* "mprpc/client.pyx":247 * """ * * try: # <<<<<<<<<<<<<< @@ -4003,7 +4111,7 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_4call(CYTHON_UNUSED PyO __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "mprpc/client.pyx":243 + /* "mprpc/client.pyx":248 * * try: * return RPCClient.call(self, method, *args) # <<<<<<<<<<<<<< @@ -4011,9 +4119,9 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_4call(CYTHON_UNUSED PyO * except socket.timeout: */ __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_5mprpc_6client_RPCClient), __pyx_n_s_call); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 243, __pyx_L3_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_5mprpc_6client_RPCClient), __pyx_n_s_call); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 248, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 243, __pyx_L3_error) + __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 248, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); @@ -4021,10 +4129,10 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_4call(CYTHON_UNUSED PyO __Pyx_INCREF(__pyx_v_method); __Pyx_GIVEREF(__pyx_v_method); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_method); - __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 243, __pyx_L3_error) + __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 248, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 243, __pyx_L3_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 248, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; @@ -4032,7 +4140,7 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_4call(CYTHON_UNUSED PyO __pyx_t_5 = 0; goto __pyx_L7_try_return; - /* "mprpc/client.pyx":242 + /* "mprpc/client.pyx":247 * """ * * try: # <<<<<<<<<<<<<< @@ -4046,35 +4154,35 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_4call(CYTHON_UNUSED PyO __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "mprpc/client.pyx":245 + /* "mprpc/client.pyx":250 * return RPCClient.call(self, method, *args) * * except socket.timeout: # <<<<<<<<<<<<<< * self.reconnect() * raise */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_socket); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 245, __pyx_L5_except_error) + __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_socket); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 250, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_timeout); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 245, __pyx_L5_except_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_timeout); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 250, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_t_6); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_7) { __Pyx_AddTraceback("mprpc.client.RPCPoolClient.call", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(0, 245, __pyx_L5_except_error) + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(0, 250, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_4); - /* "mprpc/client.pyx":246 + /* "mprpc/client.pyx":251 * * except socket.timeout: * self.reconnect() # <<<<<<<<<<<<<< * raise * */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reconnect); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 246, __pyx_L5_except_error) + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reconnect); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 251, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) { @@ -4087,16 +4195,16 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_4call(CYTHON_UNUSED PyO } } if (__pyx_t_10) { - __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 246, __pyx_L5_except_error) + __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 251, __pyx_L5_except_error) __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } else { - __pyx_t_8 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 246, __pyx_L5_except_error) + __pyx_t_8 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 251, __pyx_L5_except_error) } __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "mprpc/client.pyx":247 + /* "mprpc/client.pyx":252 * except socket.timeout: * self.reconnect() * raise # <<<<<<<<<<<<<< @@ -4108,10 +4216,10 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_4call(CYTHON_UNUSED PyO __Pyx_XGIVEREF(__pyx_t_4); __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_5, __pyx_t_4); __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_4 = 0; - __PYX_ERR(0, 247, __pyx_L5_except_error) + __PYX_ERR(0, 252, __pyx_L5_except_error) } - /* "mprpc/client.pyx":249 + /* "mprpc/client.pyx":254 * raise * * except IOError: # <<<<<<<<<<<<<< @@ -4121,18 +4229,18 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_4call(CYTHON_UNUSED PyO __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_IOError); if (__pyx_t_7) { __Pyx_AddTraceback("mprpc.client.RPCPoolClient.call", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 249, __pyx_L5_except_error) + if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 254, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_6); - /* "mprpc/client.pyx":250 + /* "mprpc/client.pyx":255 * * except IOError: * self.reconnect() # <<<<<<<<<<<<<< * raise */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reconnect); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 250, __pyx_L5_except_error) + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reconnect); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 255, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) { @@ -4145,16 +4253,16 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_4call(CYTHON_UNUSED PyO } } if (__pyx_t_10) { - __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 250, __pyx_L5_except_error) + __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L5_except_error) __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } else { - __pyx_t_8 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 250, __pyx_L5_except_error) + __pyx_t_8 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 255, __pyx_L5_except_error) } __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "mprpc/client.pyx":251 + /* "mprpc/client.pyx":256 * except IOError: * self.reconnect() * raise # <<<<<<<<<<<<<< @@ -4164,12 +4272,12 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_4call(CYTHON_UNUSED PyO __Pyx_XGIVEREF(__pyx_t_6); __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_5, __pyx_t_6); __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0; - __PYX_ERR(0, 251, __pyx_L5_except_error) + __PYX_ERR(0, 256, __pyx_L5_except_error) } goto __pyx_L5_except_error; __pyx_L5_except_error:; - /* "mprpc/client.pyx":242 + /* "mprpc/client.pyx":247 * """ * * try: # <<<<<<<<<<<<<< @@ -4191,7 +4299,7 @@ static PyObject *__pyx_pf_5mprpc_6client_13RPCPoolClient_4call(CYTHON_UNUSED PyO goto __pyx_L0; } - /* "mprpc/client.pyx":235 + /* "mprpc/client.pyx":240 * return False * * def call(self, str method, *args): # <<<<<<<<<<<<<< @@ -4436,7 +4544,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_TCP_NODELAY, __pyx_k_TCP_NODELAY, sizeof(__pyx_k_TCP_NODELAY), 0, 0, 1, 1}, {&__pyx_kp_s_The_connection_has_already_been, __pyx_k_The_connection_has_already_been, sizeof(__pyx_k_The_connection_has_already_been), 0, 0, 1, 0}, {&__pyx_n_s_Unpacker, __pyx_k_Unpacker, sizeof(__pyx_k_Unpacker), 0, 0, 1, 1}, - {&__pyx_kp_s_Users_ikuya_dev_projects_mprpc, __pyx_k_Users_ikuya_dev_projects_mprpc, sizeof(__pyx_k_Users_ikuya_dev_projects_mprpc), 0, 0, 1, 0}, {&__pyx_kp_s_Wrapper_class_of_class_RPCClient, __pyx_k_Wrapper_class_of_class_RPCClient, sizeof(__pyx_k_Wrapper_class_of_class_RPCClient), 0, 0, 1, 0}, {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, {&__pyx_n_s_call, __pyx_k_call, sizeof(__pyx_k_call), 0, 0, 1, 1}, @@ -4450,6 +4557,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, {&__pyx_n_s_gevent, __pyx_k_gevent, sizeof(__pyx_k_gevent), 0, 0, 1, 1}, {&__pyx_n_s_gsocketpool_connection, __pyx_k_gsocketpool_connection, sizeof(__pyx_k_gsocketpool_connection), 0, 0, 1, 1}, + {&__pyx_kp_s_home_workspace_mprpc_mprpc_clie, __pyx_k_home_workspace_mprpc_mprpc_clie, sizeof(__pyx_k_home_workspace_mprpc_mprpc_clie), 0, 0, 1, 0}, {&__pyx_n_s_host, __pyx_k_host, sizeof(__pyx_k_host), 0, 0, 1, 1}, {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, @@ -4480,6 +4588,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, {&__pyx_n_s_reconnect, __pyx_k_reconnect, sizeof(__pyx_k_reconnect), 0, 0, 1, 1}, {&__pyx_n_s_recv, __pyx_k_recv, sizeof(__pyx_k_recv), 0, 0, 1, 1}, + {&__pyx_n_s_remote_exception_module, __pyx_k_remote_exception_module, sizeof(__pyx_k_remote_exception_module), 0, 0, 1, 1}, + {&__pyx_n_s_remote_exception_type, __pyx_k_remote_exception_type, sizeof(__pyx_k_remote_exception_type), 0, 0, 1, 1}, {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, {&__pyx_n_s_sendall, __pyx_k_sendall, sizeof(__pyx_k_sendall), 0, 0, 1, 1}, {&__pyx_n_s_setsockopt, __pyx_k_setsockopt, sizeof(__pyx_k_setsockopt), 0, 0, 1, 1}, @@ -4584,41 +4694,41 @@ static int __Pyx_InitCachedConstants(void) { __Pyx_GOTREF(__pyx_tuple__7); __Pyx_GIVEREF(__pyx_tuple__7); - /* "mprpc/client.pyx":206 + /* "mprpc/client.pyx":211 * """ * * def __init__(self, host, port, timeout=None, lifetime=None, # <<<<<<<<<<<<<< * pack_encoding='utf-8', unpack_encoding='utf-8', * pack_params=dict(), unpack_params=dict(use_list=False), */ - __pyx_tuple__8 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_host, __pyx_n_s_port, __pyx_n_s_timeout, __pyx_n_s_lifetime, __pyx_n_s_pack_encoding, __pyx_n_s_unpack_encoding, __pyx_n_s_pack_params, __pyx_n_s_unpack_params, __pyx_n_s_tcp_no_delay, __pyx_n_s_keep_alive); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 206, __pyx_L1_error) + __pyx_tuple__8 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_host, __pyx_n_s_port, __pyx_n_s_timeout, __pyx_n_s_lifetime, __pyx_n_s_pack_encoding, __pyx_n_s_unpack_encoding, __pyx_n_s_pack_params, __pyx_n_s_unpack_params, __pyx_n_s_tcp_no_delay, __pyx_n_s_keep_alive); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 211, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__8); __Pyx_GIVEREF(__pyx_tuple__8); - __pyx_codeobj__9 = (PyObject*)__Pyx_PyCode_New(11, 0, 11, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__8, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ikuya_dev_projects_mprpc, __pyx_n_s_init, 206, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__9)) __PYX_ERR(0, 206, __pyx_L1_error) + __pyx_codeobj__9 = (PyObject*)__Pyx_PyCode_New(11, 0, 11, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__8, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_workspace_mprpc_mprpc_clie, __pyx_n_s_init, 211, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__9)) __PYX_ERR(0, 211, __pyx_L1_error) - /* "mprpc/client.pyx":223 + /* "mprpc/client.pyx":228 * tcp_no_delay=tcp_no_delay, keep_alive=keep_alive) * * def is_expired(self): # <<<<<<<<<<<<<< * """Returns whether the connection has been expired. * */ - __pyx_tuple__10 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 223, __pyx_L1_error) + __pyx_tuple__10 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__10); __Pyx_GIVEREF(__pyx_tuple__10); - __pyx_codeobj__11 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__10, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ikuya_dev_projects_mprpc, __pyx_n_s_is_expired, 223, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__11)) __PYX_ERR(0, 223, __pyx_L1_error) + __pyx_codeobj__11 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__10, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_workspace_mprpc_mprpc_clie, __pyx_n_s_is_expired, 228, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__11)) __PYX_ERR(0, 228, __pyx_L1_error) - /* "mprpc/client.pyx":235 + /* "mprpc/client.pyx":240 * return False * * def call(self, str method, *args): # <<<<<<<<<<<<<< * """Calls a RPC method. * */ - __pyx_tuple__12 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_method, __pyx_n_s_args); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 235, __pyx_L1_error) + __pyx_tuple__12 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_method, __pyx_n_s_args); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 240, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__12); __Pyx_GIVEREF(__pyx_tuple__12); - __pyx_codeobj__13 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__12, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ikuya_dev_projects_mprpc, __pyx_n_s_call, 235, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__13)) __PYX_ERR(0, 235, __pyx_L1_error) + __pyx_codeobj__13 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__12, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_workspace_mprpc_mprpc_clie, __pyx_n_s_call, 240, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__13)) __PYX_ERR(0, 240, __pyx_L1_error) __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; @@ -4889,16 +4999,16 @@ PyMODINIT_FUNC PyInit_client(void) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "mprpc/client.pyx":178 + /* "mprpc/client.pyx":183 * * * class RPCPoolClient(RPCClient, Connection): # <<<<<<<<<<<<<< * """Wrapper class of :class:`RPCClient ` for `gsocketpool `_. * */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_Connection); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 178, __pyx_L1_error) + __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_Connection); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_ptype_5mprpc_6client_RPCClient)); __Pyx_GIVEREF(((PyObject *)__pyx_ptype_5mprpc_6client_RPCClient)); @@ -4906,78 +5016,78 @@ PyMODINIT_FUNC PyInit_client(void) __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 178, __pyx_L1_error) + __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_RPCPoolClient, __pyx_n_s_RPCPoolClient, (PyObject *) NULL, __pyx_n_s_mprpc_client, __pyx_kp_s_Wrapper_class_of_class_RPCClient); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 178, __pyx_L1_error) + __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_RPCPoolClient, __pyx_n_s_RPCPoolClient, (PyObject *) NULL, __pyx_n_s_mprpc_client, __pyx_kp_s_Wrapper_class_of_class_RPCClient); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - /* "mprpc/client.pyx":206 + /* "mprpc/client.pyx":211 * """ * * def __init__(self, host, port, timeout=None, lifetime=None, # <<<<<<<<<<<<<< * pack_encoding='utf-8', unpack_encoding='utf-8', * pack_params=dict(), unpack_params=dict(use_list=False), */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5mprpc_6client_13RPCPoolClient_1__init__, 0, __pyx_n_s_RPCPoolClient___init, NULL, __pyx_n_s_mprpc_client, __pyx_d, ((PyObject *)__pyx_codeobj__9)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 206, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5mprpc_6client_13RPCPoolClient_1__init__, 0, __pyx_n_s_RPCPoolClient___init, NULL, __pyx_n_s_mprpc_client, __pyx_d, ((PyObject *)__pyx_codeobj__9)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 211, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults), 2)) __PYX_ERR(0, 206, __pyx_L1_error) + if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults), 2)) __PYX_ERR(0, 211, __pyx_L1_error) - /* "mprpc/client.pyx":208 + /* "mprpc/client.pyx":213 * def __init__(self, host, port, timeout=None, lifetime=None, * pack_encoding='utf-8', unpack_encoding='utf-8', * pack_params=dict(), unpack_params=dict(use_list=False), # <<<<<<<<<<<<<< * tcp_no_delay=False, keep_alive=False): * */ - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 208, __pyx_L1_error) + __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 213, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_4)->__pyx_arg_pack_params = __pyx_t_5; __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 208, __pyx_L1_error) + __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 213, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_use_list, Py_False) < 0) __PYX_ERR(0, 208, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_use_list, Py_False) < 0) __PYX_ERR(0, 213, __pyx_L1_error) __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_4)->__pyx_arg_unpack_params = __pyx_t_5; __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_5mprpc_6client_13RPCPoolClient_6__defaults__); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) __PYX_ERR(0, 206, __pyx_L1_error) + if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) __PYX_ERR(0, 211, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "mprpc/client.pyx":223 + /* "mprpc/client.pyx":228 * tcp_no_delay=tcp_no_delay, keep_alive=keep_alive) * * def is_expired(self): # <<<<<<<<<<<<<< * """Returns whether the connection has been expired. * */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5mprpc_6client_13RPCPoolClient_3is_expired, 0, __pyx_n_s_RPCPoolClient_is_expired, NULL, __pyx_n_s_mprpc_client, __pyx_d, ((PyObject *)__pyx_codeobj__11)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 223, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5mprpc_6client_13RPCPoolClient_3is_expired, 0, __pyx_n_s_RPCPoolClient_is_expired, NULL, __pyx_n_s_mprpc_client, __pyx_d, ((PyObject *)__pyx_codeobj__11)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_is_expired, __pyx_t_4) < 0) __PYX_ERR(0, 223, __pyx_L1_error) + if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_is_expired, __pyx_t_4) < 0) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "mprpc/client.pyx":235 + /* "mprpc/client.pyx":240 * return False * * def call(self, str method, *args): # <<<<<<<<<<<<<< * """Calls a RPC method. * */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5mprpc_6client_13RPCPoolClient_5call, 0, __pyx_n_s_RPCPoolClient_call, NULL, __pyx_n_s_mprpc_client, __pyx_d, ((PyObject *)__pyx_codeobj__13)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 235, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5mprpc_6client_13RPCPoolClient_5call, 0, __pyx_n_s_RPCPoolClient_call, NULL, __pyx_n_s_mprpc_client, __pyx_d, ((PyObject *)__pyx_codeobj__13)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 240, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_call, __pyx_t_4) < 0) __PYX_ERR(0, 235, __pyx_L1_error) + if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_call, __pyx_t_4) < 0) __PYX_ERR(0, 240, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "mprpc/client.pyx":178 + /* "mprpc/client.pyx":183 * * * class RPCPoolClient(RPCClient, Connection): # <<<<<<<<<<<<<< * """Wrapper class of :class:`RPCClient ` for `gsocketpool `_. * */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_RPCPoolClient, __pyx_t_1, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 178, __pyx_L1_error) + __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_RPCPoolClient, __pyx_t_1, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_RPCPoolClient, __pyx_t_4) < 0) __PYX_ERR(0, 178, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_RPCPoolClient, __pyx_t_4) < 0) __PYX_ERR(0, 183, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; diff --git a/mprpc/client.pyx b/mprpc/client.pyx index 13244ec..75f4d28 100644 --- a/mprpc/client.pyx +++ b/mprpc/client.pyx @@ -170,6 +170,11 @@ cdef class RPCClient: raise RPCError('Invalid Message ID') if error: + if isinstance(error, tuple): + exc = RPCError(str(error[0])) + exc.remote_exception_module = error[1] + exc.remote_exception_type = error[2] + raise exc raise RPCError(str(error)) return result diff --git a/mprpc/exceptions.py b/mprpc/exceptions.py index 5583437..f010276 100644 --- a/mprpc/exceptions.py +++ b/mprpc/exceptions.py @@ -10,4 +10,6 @@ class MethodNotFoundError(Exception): class RPCError(Exception): - pass + remote_exception_module = None + remote_exception_type = None + diff --git a/mprpc/server.c b/mprpc/server.c index 6e2f520..7378569 100644 --- a/mprpc/server.c +++ b/mprpc/server.c @@ -481,6 +481,20 @@ static const char *__pyx_f[] = { /*--- Type declarations ---*/ struct __pyx_obj_5mprpc_6server_RPCServer; struct __pyx_obj_5mprpc_6server__RPCConnection; +struct __pyx_opt_args_5mprpc_6server_9RPCServer__send_error; + +/* "mprpc/server.pyx":145 + * conn.send(self._packer.pack(msg)) + * + * cdef _send_error(self, str error, int msg_id, _RPCConnection conn, str exc_mod='', str exc_tp=''): # <<<<<<<<<<<<<< + * msg = (MSGPACKRPC_RESPONSE, msg_id, (error, exc_mod, exc_tp), None) + * conn.send(self._packer.pack(msg)) + */ +struct __pyx_opt_args_5mprpc_6server_9RPCServer__send_error { + int __pyx_n; + PyObject *exc_mod; + PyObject *exc_tp; +}; /* "mprpc/server.pyx":12 * @@ -527,7 +541,7 @@ struct __pyx_obj_5mprpc_6server__RPCConnection { struct __pyx_vtabstruct_5mprpc_6server_RPCServer { PyObject *(*_parse_request)(struct __pyx_obj_5mprpc_6server_RPCServer *, PyObject *); PyObject *(*_send_result)(struct __pyx_obj_5mprpc_6server_RPCServer *, PyObject *, int, struct __pyx_obj_5mprpc_6server__RPCConnection *); - PyObject *(*_send_error)(struct __pyx_obj_5mprpc_6server_RPCServer *, PyObject *, int, struct __pyx_obj_5mprpc_6server__RPCConnection *); + PyObject *(*_send_error)(struct __pyx_obj_5mprpc_6server_RPCServer *, PyObject *, int, struct __pyx_obj_5mprpc_6server__RPCConnection *, struct __pyx_opt_args_5mprpc_6server_9RPCServer__send_error *__pyx_optional_args); }; static struct __pyx_vtabstruct_5mprpc_6server_RPCServer *__pyx_vtabptr_5mprpc_6server_RPCServer; @@ -856,7 +870,7 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); static PyObject *__pyx_f_5mprpc_6server_9RPCServer__parse_request(struct __pyx_obj_5mprpc_6server_RPCServer *__pyx_v_self, PyObject *__pyx_v_req); /* proto*/ static PyObject *__pyx_f_5mprpc_6server_9RPCServer__send_result(struct __pyx_obj_5mprpc_6server_RPCServer *__pyx_v_self, PyObject *__pyx_v_result, int __pyx_v_msg_id, struct __pyx_obj_5mprpc_6server__RPCConnection *__pyx_v_conn); /* proto*/ -static PyObject *__pyx_f_5mprpc_6server_9RPCServer__send_error(struct __pyx_obj_5mprpc_6server_RPCServer *__pyx_v_self, PyObject *__pyx_v_error, int __pyx_v_msg_id, struct __pyx_obj_5mprpc_6server__RPCConnection *__pyx_v_conn); /* proto*/ +static PyObject *__pyx_f_5mprpc_6server_9RPCServer__send_error(struct __pyx_obj_5mprpc_6server_RPCServer *__pyx_v_self, PyObject *__pyx_v_error, int __pyx_v_msg_id, struct __pyx_obj_5mprpc_6server__RPCConnection *__pyx_v_conn, struct __pyx_opt_args_5mprpc_6server_9RPCServer__send_error *__pyx_optional_args); /* proto*/ static PyObject *__pyx_f_5mprpc_6server_14_RPCConnection_recv(struct __pyx_obj_5mprpc_6server__RPCConnection *__pyx_v_self, int __pyx_v_buf_size); /* proto*/ static PyObject *__pyx_f_5mprpc_6server_14_RPCConnection_send(struct __pyx_obj_5mprpc_6server__RPCConnection *__pyx_v_self, PyObject *__pyx_v_msg); /* proto*/ @@ -870,12 +884,14 @@ int __pyx_module_is_main_mprpc__server = 0; static PyObject *__pyx_builtin_StopIteration; static PyObject *__pyx_builtin_Exception; static const char __pyx_k__5[] = "_"; +static const char __pyx_k__7[] = ""; static const char __pyx_k_get[] = "get"; static const char __pyx_k_pop[] = "pop"; static const char __pyx_k_run[] = "_run"; static const char __pyx_k_call[] = "__call__"; static const char __pyx_k_feed[] = "feed"; static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; static const char __pyx_k_pack[] = "pack"; static const char __pyx_k_recv[] = "recv"; static const char __pyx_k_sock[] = "sock"; @@ -887,6 +903,7 @@ static const char __pyx_k_utf_8[] = "utf-8"; static const char __pyx_k_Packer[] = "Packer"; static const char __pyx_k_gevent[] = "gevent"; static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_module[] = "__module__"; static const char __pyx_k_socket[] = "socket"; static const char __pyx_k_address[] = "address"; static const char __pyx_k_msgpack[] = "msgpack"; @@ -936,6 +953,7 @@ static PyObject *__pyx_n_s_StopIteration; static PyObject *__pyx_n_s_TCP_NODELAY; static PyObject *__pyx_n_s_Unpacker; static PyObject *__pyx_n_s__5; +static PyObject *__pyx_kp_s__7; static PyObject *__pyx_n_s_address; static PyObject *__pyx_n_s_call; static PyObject *__pyx_n_s_client_host; @@ -953,7 +971,9 @@ static PyObject *__pyx_n_s_import; static PyObject *__pyx_n_s_items; static PyObject *__pyx_n_s_local; static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_module; static PyObject *__pyx_n_s_msgpack; +static PyObject *__pyx_n_s_name; static PyObject *__pyx_n_s_pack; static PyObject *__pyx_n_s_pack_encoding; static PyObject *__pyx_n_s_pack_params; @@ -1802,6 +1822,9 @@ static PyObject *__pyx_pf_5mprpc_6server_9RPCServer_4_run(struct __pyx_obj_5mprp PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + struct __pyx_opt_args_5mprpc_6server_9RPCServer__send_error __pyx_t_14; __Pyx_RefNannySetupContext("_run", 0); /* "mprpc/server.pyx":85 @@ -2075,7 +2098,7 @@ static PyObject *__pyx_pf_5mprpc_6server_9RPCServer_4_run(struct __pyx_obj_5mprp * # reset unpacker as it might have garbage data * unpacker = msgpack.Unpacker(encoding=self._unpack_encoding, */ - __pyx_t_7 = ((struct __pyx_vtabstruct_5mprpc_6server_RPCServer *)__pyx_v_self->__pyx_vtab)->_send_error(__pyx_v_self, __pyx_kp_s_Invalid_protocol, -1, __pyx_v_conn); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 99, __pyx_L1_error) + __pyx_t_7 = ((struct __pyx_vtabstruct_5mprpc_6server_RPCServer *)__pyx_v_self->__pyx_vtab)->_send_error(__pyx_v_self, __pyx_kp_s_Invalid_protocol, -1, __pyx_v_conn, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 99, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; @@ -2257,7 +2280,7 @@ static PyObject *__pyx_pf_5mprpc_6server_9RPCServer_4_run(struct __pyx_obj_5mprp * ret = method(*args) * * except Exception, e: # <<<<<<<<<<<<<< - * self._send_error(str(e), msg_id, conn) + * self._send_error(str(e), msg_id, conn, type(e).__module__, type(e).__name__) * */ __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_Exception); @@ -2273,7 +2296,7 @@ static PyObject *__pyx_pf_5mprpc_6server_9RPCServer_4_run(struct __pyx_obj_5mprp /* "mprpc/server.pyx":111 * * except Exception, e: - * self._send_error(str(e), msg_id, conn) # <<<<<<<<<<<<<< + * self._send_error(str(e), msg_id, conn, type(e).__module__, type(e).__name__) # <<<<<<<<<<<<<< * * else: */ @@ -2286,10 +2309,21 @@ static PyObject *__pyx_pf_5mprpc_6server_9RPCServer_4_run(struct __pyx_obj_5mprp __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (!(likely(PyString_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_11)->tp_name), 0))) __PYX_ERR(0, 111, __pyx_L21_except_error) - __pyx_t_7 = ((struct __pyx_vtabstruct_5mprpc_6server_RPCServer *)__pyx_v_self->__pyx_vtab)->_send_error(__pyx_v_self, ((PyObject*)__pyx_t_11), __pyx_v_msg_id, __pyx_v_conn); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 111, __pyx_L21_except_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_e)), __pyx_n_s_module); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 111, __pyx_L21_except_error) __Pyx_GOTREF(__pyx_t_7); + if (!(likely(PyString_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 111, __pyx_L21_except_error) + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_e)), __pyx_n_s_name); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 111, __pyx_L21_except_error) + __Pyx_GOTREF(__pyx_t_12); + if (!(likely(PyString_CheckExact(__pyx_t_12))||((__pyx_t_12) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_12)->tp_name), 0))) __PYX_ERR(0, 111, __pyx_L21_except_error) + __pyx_t_14.__pyx_n = 2; + __pyx_t_14.exc_mod = ((PyObject*)__pyx_t_7); + __pyx_t_14.exc_tp = ((PyObject*)__pyx_t_12); + __pyx_t_13 = ((struct __pyx_vtabstruct_5mprpc_6server_RPCServer *)__pyx_v_self->__pyx_vtab)->_send_error(__pyx_v_self, ((PyObject*)__pyx_t_11), __pyx_v_msg_id, __pyx_v_conn, &__pyx_t_14); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 111, __pyx_L21_except_error) + __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; @@ -2340,6 +2374,8 @@ static PyObject *__pyx_pf_5mprpc_6server_9RPCServer_4_run(struct __pyx_obj_5mprp __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); __Pyx_AddTraceback("mprpc.server.RPCServer._run", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -2881,7 +2917,7 @@ static PyObject *__pyx_f_5mprpc_6server_9RPCServer__send_result(struct __pyx_obj * msg = (MSGPACKRPC_RESPONSE, msg_id, None, result) * conn.send(self._packer.pack(msg)) # <<<<<<<<<<<<<< * - * cdef _send_error(self, str error, int msg_id, _RPCConnection conn): + * cdef _send_error(self, str error, int msg_id, _RPCConnection conn, str exc_mod='', str exc_tp=''): */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_packer, __pyx_n_s_pack); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); @@ -2944,12 +2980,14 @@ static PyObject *__pyx_f_5mprpc_6server_9RPCServer__send_result(struct __pyx_obj /* "mprpc/server.pyx":145 * conn.send(self._packer.pack(msg)) * - * cdef _send_error(self, str error, int msg_id, _RPCConnection conn): # <<<<<<<<<<<<<< - * msg = (MSGPACKRPC_RESPONSE, msg_id, error, None) + * cdef _send_error(self, str error, int msg_id, _RPCConnection conn, str exc_mod='', str exc_tp=''): # <<<<<<<<<<<<<< + * msg = (MSGPACKRPC_RESPONSE, msg_id, (error, exc_mod, exc_tp), None) * conn.send(self._packer.pack(msg)) */ -static PyObject *__pyx_f_5mprpc_6server_9RPCServer__send_error(struct __pyx_obj_5mprpc_6server_RPCServer *__pyx_v_self, PyObject *__pyx_v_error, int __pyx_v_msg_id, struct __pyx_obj_5mprpc_6server__RPCConnection *__pyx_v_conn) { +static PyObject *__pyx_f_5mprpc_6server_9RPCServer__send_error(struct __pyx_obj_5mprpc_6server_RPCServer *__pyx_v_self, PyObject *__pyx_v_error, int __pyx_v_msg_id, struct __pyx_obj_5mprpc_6server__RPCConnection *__pyx_v_conn, struct __pyx_opt_args_5mprpc_6server_9RPCServer__send_error *__pyx_optional_args) { + PyObject *__pyx_v_exc_mod = ((PyObject*)__pyx_kp_s__7); + PyObject *__pyx_v_exc_tp = ((PyObject*)__pyx_kp_s__7); PyObject *__pyx_v_msg = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations @@ -2958,11 +2996,19 @@ static PyObject *__pyx_f_5mprpc_6server_9RPCServer__send_error(struct __pyx_obj_ PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; __Pyx_RefNannySetupContext("_send_error", 0); + if (__pyx_optional_args) { + if (__pyx_optional_args->__pyx_n > 0) { + __pyx_v_exc_mod = __pyx_optional_args->exc_mod; + if (__pyx_optional_args->__pyx_n > 1) { + __pyx_v_exc_tp = __pyx_optional_args->exc_tp; + } + } + } /* "mprpc/server.pyx":146 * - * cdef _send_error(self, str error, int msg_id, _RPCConnection conn): - * msg = (MSGPACKRPC_RESPONSE, msg_id, error, None) # <<<<<<<<<<<<<< + * cdef _send_error(self, str error, int msg_id, _RPCConnection conn, str exc_mod='', str exc_tp=''): + * msg = (MSGPACKRPC_RESPONSE, msg_id, (error, exc_mod, exc_tp), None) # <<<<<<<<<<<<<< * conn.send(self._packer.pack(msg)) * */ @@ -2970,68 +3016,79 @@ static PyObject *__pyx_f_5mprpc_6server_9RPCServer__send_error(struct __pyx_obj_ __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_msg_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 146, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 146, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 146, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); __Pyx_INCREF(__pyx_v_error); __Pyx_GIVEREF(__pyx_v_error); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_error); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_error); + __Pyx_INCREF(__pyx_v_exc_mod); + __Pyx_GIVEREF(__pyx_v_exc_mod); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_exc_mod); + __Pyx_INCREF(__pyx_v_exc_tp); + __Pyx_GIVEREF(__pyx_v_exc_tp); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_exc_tp); + __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 146, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_3, 3, Py_None); + PyTuple_SET_ITEM(__pyx_t_4, 3, Py_None); __pyx_t_1 = 0; __pyx_t_2 = 0; - __pyx_v_msg = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_msg = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; /* "mprpc/server.pyx":147 - * cdef _send_error(self, str error, int msg_id, _RPCConnection conn): - * msg = (MSGPACKRPC_RESPONSE, msg_id, error, None) + * cdef _send_error(self, str error, int msg_id, _RPCConnection conn, str exc_mod='', str exc_tp=''): + * msg = (MSGPACKRPC_RESPONSE, msg_id, (error, exc_mod, exc_tp), None) * conn.send(self._packer.pack(msg)) # <<<<<<<<<<<<<< * * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_packer, __pyx_n_s_pack); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = NULL; - if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_packer, __pyx_n_s_pack); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __Pyx_DECREF_SET(__pyx_t_3, function); } } - if (!__pyx_t_1) { - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_msg); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - } else { - __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 147, __pyx_L1_error) + if (!__pyx_t_2) { + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_msg); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 147, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __pyx_t_1 = NULL; + } else { + __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = NULL; __Pyx_INCREF(__pyx_v_msg); __Pyx_GIVEREF(__pyx_v_msg); - PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_msg); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + PyTuple_SET_ITEM(__pyx_t_1, 0+1, __pyx_v_msg); + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(PyBytes_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 147, __pyx_L1_error) - __pyx_t_2 = ((struct __pyx_vtabstruct_5mprpc_6server__RPCConnection *)__pyx_v_conn->__pyx_vtab)->send(__pyx_v_conn, ((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 147, __pyx_L1_error) + __pyx_t_3 = ((struct __pyx_vtabstruct_5mprpc_6server__RPCConnection *)__pyx_v_conn->__pyx_vtab)->send(__pyx_v_conn, ((PyObject*)__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "mprpc/server.pyx":145 * conn.send(self._packer.pack(msg)) * - * cdef _send_error(self, str error, int msg_id, _RPCConnection conn): # <<<<<<<<<<<<<< - * msg = (MSGPACKRPC_RESPONSE, msg_id, error, None) + * cdef _send_error(self, str error, int msg_id, _RPCConnection conn, str exc_mod='', str exc_tp=''): # <<<<<<<<<<<<<< + * msg = (MSGPACKRPC_RESPONSE, msg_id, (error, exc_mod, exc_tp), None) * conn.send(self._packer.pack(msg)) */ @@ -3740,6 +3797,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_TCP_NODELAY, __pyx_k_TCP_NODELAY, sizeof(__pyx_k_TCP_NODELAY), 0, 0, 1, 1}, {&__pyx_n_s_Unpacker, __pyx_k_Unpacker, sizeof(__pyx_k_Unpacker), 0, 0, 1, 1}, {&__pyx_n_s__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 0, 1, 1}, + {&__pyx_kp_s__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 0, 1, 0}, {&__pyx_n_s_address, __pyx_k_address, sizeof(__pyx_k_address), 0, 0, 1, 1}, {&__pyx_n_s_call, __pyx_k_call, sizeof(__pyx_k_call), 0, 0, 1, 1}, {&__pyx_n_s_client_host, __pyx_k_client_host, sizeof(__pyx_k_client_host), 0, 0, 1, 1}, @@ -3757,7 +3815,9 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1}, {&__pyx_n_s_local, __pyx_k_local, sizeof(__pyx_k_local), 0, 0, 1, 1}, {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, {&__pyx_n_s_msgpack, __pyx_k_msgpack, sizeof(__pyx_k_msgpack), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, {&__pyx_n_s_pack, __pyx_k_pack, sizeof(__pyx_k_pack), 0, 0, 1, 1}, {&__pyx_n_s_pack_encoding, __pyx_k_pack_encoding, sizeof(__pyx_k_pack_encoding), 0, 0, 1, 1}, {&__pyx_n_s_pack_params, __pyx_k_pack_params, sizeof(__pyx_k_pack_params), 0, 0, 1, 1}, @@ -3948,7 +4008,7 @@ PyMODINIT_FUNC PyInit_server(void) __pyx_vtabptr_5mprpc_6server_RPCServer = &__pyx_vtable_5mprpc_6server_RPCServer; __pyx_vtable_5mprpc_6server_RPCServer._parse_request = (PyObject *(*)(struct __pyx_obj_5mprpc_6server_RPCServer *, PyObject *))__pyx_f_5mprpc_6server_9RPCServer__parse_request; __pyx_vtable_5mprpc_6server_RPCServer._send_result = (PyObject *(*)(struct __pyx_obj_5mprpc_6server_RPCServer *, PyObject *, int, struct __pyx_obj_5mprpc_6server__RPCConnection *))__pyx_f_5mprpc_6server_9RPCServer__send_result; - __pyx_vtable_5mprpc_6server_RPCServer._send_error = (PyObject *(*)(struct __pyx_obj_5mprpc_6server_RPCServer *, PyObject *, int, struct __pyx_obj_5mprpc_6server__RPCConnection *))__pyx_f_5mprpc_6server_9RPCServer__send_error; + __pyx_vtable_5mprpc_6server_RPCServer._send_error = (PyObject *(*)(struct __pyx_obj_5mprpc_6server_RPCServer *, PyObject *, int, struct __pyx_obj_5mprpc_6server__RPCConnection *, struct __pyx_opt_args_5mprpc_6server_9RPCServer__send_error *__pyx_optional_args))__pyx_f_5mprpc_6server_9RPCServer__send_error; if (PyType_Ready(&__pyx_type_5mprpc_6server_RPCServer) < 0) __PYX_ERR(0, 12, __pyx_L1_error) __pyx_type_5mprpc_6server_RPCServer.tp_print = 0; if (__Pyx_SetVtable(__pyx_type_5mprpc_6server_RPCServer.tp_dict, __pyx_vtabptr_5mprpc_6server_RPCServer) < 0) __PYX_ERR(0, 12, __pyx_L1_error) diff --git a/mprpc/server.pyx b/mprpc/server.pyx index c9dda88..b0378e7 100644 --- a/mprpc/server.pyx +++ b/mprpc/server.pyx @@ -108,7 +108,7 @@ cdef class RPCServer: ret = method(*args) except Exception, e: - self._send_error(str(e), msg_id, conn) + self._send_error(str(e), msg_id, conn, type(e).__module__, type(e).__name__) else: self._send_result(ret, msg_id, conn) @@ -142,8 +142,8 @@ cdef class RPCServer: msg = (MSGPACKRPC_RESPONSE, msg_id, None, result) conn.send(self._packer.pack(msg)) - cdef _send_error(self, str error, int msg_id, _RPCConnection conn): - msg = (MSGPACKRPC_RESPONSE, msg_id, error, None) + cdef _send_error(self, str error, int msg_id, _RPCConnection conn, str exc_mod='', str exc_tp=''): + msg = (MSGPACKRPC_RESPONSE, msg_id, (error, exc_mod, exc_tp), None) conn.send(self._packer.pack(msg))