mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-24 10:34:01 +03:00
Fix async mode mode exception handling issue in `Dependency
` provider
This commit is contained in:
parent
26571e805a
commit
346451819e
|
@ -9,6 +9,9 @@ follows `Semantic versioning`_
|
|||
|
||||
Development version
|
||||
-------------------
|
||||
- Fix async mode mode exception handling issue in ``Dependency`` provider.
|
||||
See issue: `#409 <https://github.com/ets-labs/python-dependency-injector/issues/409>`_.
|
||||
Thanks to `@wackazong <https://github.com/wackazong>`_ for reporting the issue.
|
||||
- Fix links to ``boto3`` example.
|
||||
|
||||
4.28.0
|
||||
|
|
|
@ -2932,19 +2932,6 @@ static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *
|
|||
static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength,
|
||||
Py_UCS4 max_char);
|
||||
|
||||
/* FastTypeChecks.proto */
|
||||
#if CYTHON_COMPILING_IN_CPYTHON
|
||||
#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
|
||||
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
|
||||
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
|
||||
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
|
||||
#else
|
||||
#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
|
||||
#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
|
||||
#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2))
|
||||
#endif
|
||||
#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
|
||||
|
||||
/* py_dict_values.proto */
|
||||
static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d);
|
||||
|
||||
|
@ -2996,6 +2983,19 @@ static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *
|
|||
#define __Pyx_CallUnboundCMethod2(cfunc, self, arg1, arg2) __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2)
|
||||
#endif
|
||||
|
||||
/* FastTypeChecks.proto */
|
||||
#if CYTHON_COMPILING_IN_CPYTHON
|
||||
#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
|
||||
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
|
||||
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
|
||||
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
|
||||
#else
|
||||
#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
|
||||
#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
|
||||
#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2))
|
||||
#endif
|
||||
#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
|
||||
|
||||
/* RaiseTooManyValuesToUnpack.proto */
|
||||
static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
|
||||
|
||||
|
@ -17067,8 +17067,8 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_10Dependency_16_copy_
|
|||
* _copy_parent(self, copied, memo)
|
||||
*
|
||||
* def _async_provide(self, future_result, future): # <<<<<<<<<<<<<<
|
||||
* instance = future.result()
|
||||
* try:
|
||||
* instance = future.result()
|
||||
*/
|
||||
|
||||
/* Python wrapper */
|
||||
|
@ -17146,8 +17146,8 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_10Dependency_18_async
|
|||
PyObject *__pyx_t_4 = NULL;
|
||||
PyObject *__pyx_t_5 = NULL;
|
||||
PyObject *__pyx_t_6 = NULL;
|
||||
PyObject *__pyx_t_7 = NULL;
|
||||
int __pyx_t_8;
|
||||
int __pyx_t_7;
|
||||
PyObject *__pyx_t_8 = NULL;
|
||||
PyObject *__pyx_t_9 = NULL;
|
||||
PyObject *__pyx_t_10 = NULL;
|
||||
int __pyx_lineno = 0;
|
||||
|
@ -17158,78 +17158,78 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_10Dependency_18_async
|
|||
/* "dependency_injector/providers.pyx":767
|
||||
*
|
||||
* def _async_provide(self, future_result, future):
|
||||
* instance = future.result() # <<<<<<<<<<<<<<
|
||||
* try:
|
||||
* self._check_instance_type(instance)
|
||||
*/
|
||||
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_future, __pyx_n_s_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 767, __pyx_L1_error)
|
||||
__Pyx_GOTREF(__pyx_t_2);
|
||||
__pyx_t_3 = NULL;
|
||||
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
|
||||
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
|
||||
if (likely(__pyx_t_3)) {
|
||||
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
|
||||
__Pyx_INCREF(__pyx_t_3);
|
||||
__Pyx_INCREF(function);
|
||||
__Pyx_DECREF_SET(__pyx_t_2, function);
|
||||
}
|
||||
}
|
||||
__pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
|
||||
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
|
||||
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 767, __pyx_L1_error)
|
||||
__Pyx_GOTREF(__pyx_t_1);
|
||||
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
|
||||
__pyx_v_instance = __pyx_t_1;
|
||||
__pyx_t_1 = 0;
|
||||
|
||||
/* "dependency_injector/providers.pyx":768
|
||||
* def _async_provide(self, future_result, future):
|
||||
* instance = future.result()
|
||||
* try: # <<<<<<<<<<<<<<
|
||||
* instance = future.result()
|
||||
* self._check_instance_type(instance)
|
||||
* except Error as exception:
|
||||
*/
|
||||
{
|
||||
__Pyx_PyThreadState_declare
|
||||
__Pyx_PyThreadState_assign
|
||||
__Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
|
||||
__Pyx_XGOTREF(__pyx_t_4);
|
||||
__Pyx_XGOTREF(__pyx_t_5);
|
||||
__Pyx_XGOTREF(__pyx_t_6);
|
||||
__Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
|
||||
__Pyx_XGOTREF(__pyx_t_1);
|
||||
__Pyx_XGOTREF(__pyx_t_2);
|
||||
__Pyx_XGOTREF(__pyx_t_3);
|
||||
/*try:*/ {
|
||||
|
||||
/* "dependency_injector/providers.pyx":769
|
||||
* instance = future.result()
|
||||
* try:
|
||||
* self._check_instance_type(instance) # <<<<<<<<<<<<<<
|
||||
* except Error as exception:
|
||||
* future_result.set_exception(exception)
|
||||
*/
|
||||
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_check_instance_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 769, __pyx_L3_error)
|
||||
__Pyx_GOTREF(__pyx_t_2);
|
||||
__pyx_t_3 = NULL;
|
||||
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
|
||||
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
|
||||
if (likely(__pyx_t_3)) {
|
||||
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
|
||||
__Pyx_INCREF(__pyx_t_3);
|
||||
__Pyx_INCREF(function);
|
||||
__Pyx_DECREF_SET(__pyx_t_2, function);
|
||||
}
|
||||
}
|
||||
__pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_instance) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_instance);
|
||||
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
|
||||
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 769, __pyx_L3_error)
|
||||
__Pyx_GOTREF(__pyx_t_1);
|
||||
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
|
||||
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
|
||||
|
||||
/* "dependency_injector/providers.pyx":768
|
||||
* def _async_provide(self, future_result, future):
|
||||
* instance = future.result()
|
||||
* try: # <<<<<<<<<<<<<<
|
||||
* try:
|
||||
* instance = future.result() # <<<<<<<<<<<<<<
|
||||
* self._check_instance_type(instance)
|
||||
* except Exception as exception:
|
||||
*/
|
||||
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_future, __pyx_n_s_result); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 768, __pyx_L3_error)
|
||||
__Pyx_GOTREF(__pyx_t_5);
|
||||
__pyx_t_6 = NULL;
|
||||
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
|
||||
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
|
||||
if (likely(__pyx_t_6)) {
|
||||
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
|
||||
__Pyx_INCREF(__pyx_t_6);
|
||||
__Pyx_INCREF(function);
|
||||
__Pyx_DECREF_SET(__pyx_t_5, function);
|
||||
}
|
||||
}
|
||||
__pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
|
||||
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
|
||||
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 768, __pyx_L3_error)
|
||||
__Pyx_GOTREF(__pyx_t_4);
|
||||
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
||||
__pyx_v_instance = __pyx_t_4;
|
||||
__pyx_t_4 = 0;
|
||||
|
||||
/* "dependency_injector/providers.pyx":769
|
||||
* try:
|
||||
* instance = future.result()
|
||||
* self._check_instance_type(instance) # <<<<<<<<<<<<<<
|
||||
* except Exception as exception:
|
||||
* future_result.set_exception(exception)
|
||||
*/
|
||||
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_check_instance_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 769, __pyx_L3_error)
|
||||
__Pyx_GOTREF(__pyx_t_5);
|
||||
__pyx_t_6 = NULL;
|
||||
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
|
||||
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
|
||||
if (likely(__pyx_t_6)) {
|
||||
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
|
||||
__Pyx_INCREF(__pyx_t_6);
|
||||
__Pyx_INCREF(function);
|
||||
__Pyx_DECREF_SET(__pyx_t_5, function);
|
||||
}
|
||||
}
|
||||
__pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_instance) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_instance);
|
||||
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
|
||||
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 769, __pyx_L3_error)
|
||||
__Pyx_GOTREF(__pyx_t_4);
|
||||
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
||||
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
|
||||
|
||||
/* "dependency_injector/providers.pyx":767
|
||||
*
|
||||
* def _async_provide(self, future_result, future):
|
||||
* try: # <<<<<<<<<<<<<<
|
||||
* instance = future.result()
|
||||
* self._check_instance_type(instance)
|
||||
* except Error as exception:
|
||||
*/
|
||||
}
|
||||
|
||||
|
@ -17241,60 +17241,54 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_10Dependency_18_async
|
|||
* def _check_instance_type(self, instance):
|
||||
*/
|
||||
/*else:*/ {
|
||||
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_future_result, __pyx_n_s_set_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 773, __pyx_L5_except_error)
|
||||
__Pyx_GOTREF(__pyx_t_2);
|
||||
__pyx_t_3 = NULL;
|
||||
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
|
||||
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
|
||||
if (likely(__pyx_t_3)) {
|
||||
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
|
||||
__Pyx_INCREF(__pyx_t_3);
|
||||
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_future_result, __pyx_n_s_set_result); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 773, __pyx_L5_except_error)
|
||||
__Pyx_GOTREF(__pyx_t_5);
|
||||
__pyx_t_6 = NULL;
|
||||
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
|
||||
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
|
||||
if (likely(__pyx_t_6)) {
|
||||
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
|
||||
__Pyx_INCREF(__pyx_t_6);
|
||||
__Pyx_INCREF(function);
|
||||
__Pyx_DECREF_SET(__pyx_t_2, function);
|
||||
__Pyx_DECREF_SET(__pyx_t_5, function);
|
||||
}
|
||||
}
|
||||
__pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_instance) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_instance);
|
||||
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
|
||||
if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 773, __pyx_L5_except_error)
|
||||
__Pyx_GOTREF(__pyx_t_1);
|
||||
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
|
||||
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
|
||||
__pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_instance) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_instance);
|
||||
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
|
||||
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 773, __pyx_L5_except_error)
|
||||
__Pyx_GOTREF(__pyx_t_4);
|
||||
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
||||
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
|
||||
}
|
||||
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
|
||||
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
|
||||
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
|
||||
goto __pyx_L8_try_end;
|
||||
__pyx_L3_error:;
|
||||
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
|
||||
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
|
||||
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
|
||||
goto __pyx_L8_try_end;
|
||||
__pyx_L3_error:;
|
||||
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
|
||||
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
|
||||
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
|
||||
|
||||
/* "dependency_injector/providers.pyx":770
|
||||
* try:
|
||||
* instance = future.result()
|
||||
* self._check_instance_type(instance)
|
||||
* except Error as exception: # <<<<<<<<<<<<<<
|
||||
* except Exception as exception: # <<<<<<<<<<<<<<
|
||||
* future_result.set_exception(exception)
|
||||
* else:
|
||||
*/
|
||||
__Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
|
||||
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_Error); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 770, __pyx_L5_except_error)
|
||||
__Pyx_GOTREF(__pyx_t_7);
|
||||
__pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_7);
|
||||
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
|
||||
__Pyx_ErrRestore(__pyx_t_1, __pyx_t_2, __pyx_t_3);
|
||||
__pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0;
|
||||
if (__pyx_t_8) {
|
||||
__pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
|
||||
if (__pyx_t_7) {
|
||||
__Pyx_AddTraceback("dependency_injector.providers.Dependency._async_provide", __pyx_clineno, __pyx_lineno, __pyx_filename);
|
||||
if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1) < 0) __PYX_ERR(1, 770, __pyx_L5_except_error)
|
||||
__Pyx_GOTREF(__pyx_t_3);
|
||||
__Pyx_GOTREF(__pyx_t_2);
|
||||
__Pyx_GOTREF(__pyx_t_1);
|
||||
__Pyx_INCREF(__pyx_t_2);
|
||||
__pyx_v_exception = __pyx_t_2;
|
||||
if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(1, 770, __pyx_L5_except_error)
|
||||
__Pyx_GOTREF(__pyx_t_4);
|
||||
__Pyx_GOTREF(__pyx_t_5);
|
||||
__Pyx_GOTREF(__pyx_t_6);
|
||||
__Pyx_INCREF(__pyx_t_5);
|
||||
__pyx_v_exception = __pyx_t_5;
|
||||
|
||||
/* "dependency_injector/providers.pyx":771
|
||||
* self._check_instance_type(instance)
|
||||
* except Error as exception:
|
||||
* except Exception as exception:
|
||||
* future_result.set_exception(exception) # <<<<<<<<<<<<<<
|
||||
* else:
|
||||
* future_result.set_result(instance)
|
||||
|
@ -17311,37 +17305,37 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_10Dependency_18_async
|
|||
__Pyx_DECREF_SET(__pyx_t_9, function);
|
||||
}
|
||||
}
|
||||
__pyx_t_7 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_v_exception) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_exception);
|
||||
__pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_v_exception) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_exception);
|
||||
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
|
||||
if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 771, __pyx_L5_except_error)
|
||||
__Pyx_GOTREF(__pyx_t_7);
|
||||
if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 771, __pyx_L5_except_error)
|
||||
__Pyx_GOTREF(__pyx_t_8);
|
||||
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
|
||||
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
|
||||
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
|
||||
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
|
||||
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
|
||||
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
|
||||
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
|
||||
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
|
||||
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
|
||||
goto __pyx_L4_exception_handled;
|
||||
}
|
||||
goto __pyx_L5_except_error;
|
||||
__pyx_L5_except_error:;
|
||||
|
||||
/* "dependency_injector/providers.pyx":768
|
||||
/* "dependency_injector/providers.pyx":767
|
||||
*
|
||||
* def _async_provide(self, future_result, future):
|
||||
* instance = future.result()
|
||||
* try: # <<<<<<<<<<<<<<
|
||||
* instance = future.result()
|
||||
* self._check_instance_type(instance)
|
||||
* except Error as exception:
|
||||
*/
|
||||
__Pyx_XGIVEREF(__pyx_t_4);
|
||||
__Pyx_XGIVEREF(__pyx_t_5);
|
||||
__Pyx_XGIVEREF(__pyx_t_6);
|
||||
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
|
||||
__Pyx_XGIVEREF(__pyx_t_1);
|
||||
__Pyx_XGIVEREF(__pyx_t_2);
|
||||
__Pyx_XGIVEREF(__pyx_t_3);
|
||||
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
|
||||
goto __pyx_L1_error;
|
||||
__pyx_L4_exception_handled:;
|
||||
__Pyx_XGIVEREF(__pyx_t_4);
|
||||
__Pyx_XGIVEREF(__pyx_t_5);
|
||||
__Pyx_XGIVEREF(__pyx_t_6);
|
||||
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
|
||||
__Pyx_XGIVEREF(__pyx_t_1);
|
||||
__Pyx_XGIVEREF(__pyx_t_2);
|
||||
__Pyx_XGIVEREF(__pyx_t_3);
|
||||
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
|
||||
__pyx_L8_try_end:;
|
||||
}
|
||||
|
||||
|
@ -17349,18 +17343,18 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_10Dependency_18_async
|
|||
* _copy_parent(self, copied, memo)
|
||||
*
|
||||
* def _async_provide(self, future_result, future): # <<<<<<<<<<<<<<
|
||||
* instance = future.result()
|
||||
* try:
|
||||
* instance = future.result()
|
||||
*/
|
||||
|
||||
/* function exit code */
|
||||
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
|
||||
goto __pyx_L0;
|
||||
__pyx_L1_error:;
|
||||
__Pyx_XDECREF(__pyx_t_1);
|
||||
__Pyx_XDECREF(__pyx_t_2);
|
||||
__Pyx_XDECREF(__pyx_t_3);
|
||||
__Pyx_XDECREF(__pyx_t_7);
|
||||
__Pyx_XDECREF(__pyx_t_4);
|
||||
__Pyx_XDECREF(__pyx_t_5);
|
||||
__Pyx_XDECREF(__pyx_t_6);
|
||||
__Pyx_XDECREF(__pyx_t_8);
|
||||
__Pyx_XDECREF(__pyx_t_9);
|
||||
__Pyx_XDECREF(__pyx_t_10);
|
||||
__Pyx_AddTraceback("dependency_injector.providers.Dependency._async_provide", __pyx_clineno, __pyx_lineno, __pyx_filename);
|
||||
|
@ -128538,106 +128532,6 @@ bad:
|
|||
#endif
|
||||
}
|
||||
|
||||
/* FastTypeChecks */
|
||||
#if CYTHON_COMPILING_IN_CPYTHON
|
||||
static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
|
||||
while (a) {
|
||||
a = a->tp_base;
|
||||
if (a == b)
|
||||
return 1;
|
||||
}
|
||||
return b == &PyBaseObject_Type;
|
||||
}
|
||||
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) {
|
||||
PyObject *mro;
|
||||
if (a == b) return 1;
|
||||
mro = a->tp_mro;
|
||||
if (likely(mro)) {
|
||||
Py_ssize_t i, n;
|
||||
n = PyTuple_GET_SIZE(mro);
|
||||
for (i = 0; i < n; i++) {
|
||||
if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return __Pyx_InBases(a, b);
|
||||
}
|
||||
#if PY_MAJOR_VERSION == 2
|
||||
static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) {
|
||||
PyObject *exception, *value, *tb;
|
||||
int res;
|
||||
__Pyx_PyThreadState_declare
|
||||
__Pyx_PyThreadState_assign
|
||||
__Pyx_ErrFetch(&exception, &value, &tb);
|
||||
res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0;
|
||||
if (unlikely(res == -1)) {
|
||||
PyErr_WriteUnraisable(err);
|
||||
res = 0;
|
||||
}
|
||||
if (!res) {
|
||||
res = PyObject_IsSubclass(err, exc_type2);
|
||||
if (unlikely(res == -1)) {
|
||||
PyErr_WriteUnraisable(err);
|
||||
res = 0;
|
||||
}
|
||||
}
|
||||
__Pyx_ErrRestore(exception, value, tb);
|
||||
return res;
|
||||
}
|
||||
#else
|
||||
static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) {
|
||||
int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0;
|
||||
if (!res) {
|
||||
res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
#endif
|
||||
static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
|
||||
Py_ssize_t i, n;
|
||||
assert(PyExceptionClass_Check(exc_type));
|
||||
n = PyTuple_GET_SIZE(tuple);
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
for (i=0; i<n; i++) {
|
||||
if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
|
||||
}
|
||||
#endif
|
||||
for (i=0; i<n; i++) {
|
||||
PyObject *t = PyTuple_GET_ITEM(tuple, i);
|
||||
#if PY_MAJOR_VERSION < 3
|
||||
if (likely(exc_type == t)) return 1;
|
||||
#endif
|
||||
if (likely(PyExceptionClass_Check(t))) {
|
||||
if (__Pyx_inner_PyErr_GivenExceptionMatches2(exc_type, NULL, t)) return 1;
|
||||
} else {
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) {
|
||||
if (likely(err == exc_type)) return 1;
|
||||
if (likely(PyExceptionClass_Check(err))) {
|
||||
if (likely(PyExceptionClass_Check(exc_type))) {
|
||||
return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type);
|
||||
} else if (likely(PyTuple_Check(exc_type))) {
|
||||
return __Pyx_PyErr_GivenExceptionMatchesTuple(err, exc_type);
|
||||
} else {
|
||||
}
|
||||
}
|
||||
return PyErr_GivenExceptionMatches(err, exc_type);
|
||||
}
|
||||
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) {
|
||||
assert(PyExceptionClass_Check(exc_type1));
|
||||
assert(PyExceptionClass_Check(exc_type2));
|
||||
if (likely(err == exc_type1 || err == exc_type2)) return 1;
|
||||
if (likely(PyExceptionClass_Check(err))) {
|
||||
return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2);
|
||||
}
|
||||
return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2));
|
||||
}
|
||||
#endif
|
||||
|
||||
/* UnpackUnboundCMethod */
|
||||
static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) {
|
||||
PyObject *method;
|
||||
|
@ -128823,6 +128717,106 @@ static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObjec
|
|||
return value;
|
||||
}
|
||||
|
||||
/* FastTypeChecks */
|
||||
#if CYTHON_COMPILING_IN_CPYTHON
|
||||
static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
|
||||
while (a) {
|
||||
a = a->tp_base;
|
||||
if (a == b)
|
||||
return 1;
|
||||
}
|
||||
return b == &PyBaseObject_Type;
|
||||
}
|
||||
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) {
|
||||
PyObject *mro;
|
||||
if (a == b) return 1;
|
||||
mro = a->tp_mro;
|
||||
if (likely(mro)) {
|
||||
Py_ssize_t i, n;
|
||||
n = PyTuple_GET_SIZE(mro);
|
||||
for (i = 0; i < n; i++) {
|
||||
if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return __Pyx_InBases(a, b);
|
||||
}
|
||||
#if PY_MAJOR_VERSION == 2
|
||||
static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) {
|
||||
PyObject *exception, *value, *tb;
|
||||
int res;
|
||||
__Pyx_PyThreadState_declare
|
||||
__Pyx_PyThreadState_assign
|
||||
__Pyx_ErrFetch(&exception, &value, &tb);
|
||||
res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0;
|
||||
if (unlikely(res == -1)) {
|
||||
PyErr_WriteUnraisable(err);
|
||||
res = 0;
|
||||
}
|
||||
if (!res) {
|
||||
res = PyObject_IsSubclass(err, exc_type2);
|
||||
if (unlikely(res == -1)) {
|
||||
PyErr_WriteUnraisable(err);
|
||||
res = 0;
|
||||
}
|
||||
}
|
||||
__Pyx_ErrRestore(exception, value, tb);
|
||||
return res;
|
||||
}
|
||||
#else
|
||||
static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) {
|
||||
int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0;
|
||||
if (!res) {
|
||||
res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
#endif
|
||||
static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
|
||||
Py_ssize_t i, n;
|
||||
assert(PyExceptionClass_Check(exc_type));
|
||||
n = PyTuple_GET_SIZE(tuple);
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
for (i=0; i<n; i++) {
|
||||
if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
|
||||
}
|
||||
#endif
|
||||
for (i=0; i<n; i++) {
|
||||
PyObject *t = PyTuple_GET_ITEM(tuple, i);
|
||||
#if PY_MAJOR_VERSION < 3
|
||||
if (likely(exc_type == t)) return 1;
|
||||
#endif
|
||||
if (likely(PyExceptionClass_Check(t))) {
|
||||
if (__Pyx_inner_PyErr_GivenExceptionMatches2(exc_type, NULL, t)) return 1;
|
||||
} else {
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) {
|
||||
if (likely(err == exc_type)) return 1;
|
||||
if (likely(PyExceptionClass_Check(err))) {
|
||||
if (likely(PyExceptionClass_Check(exc_type))) {
|
||||
return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type);
|
||||
} else if (likely(PyTuple_Check(exc_type))) {
|
||||
return __Pyx_PyErr_GivenExceptionMatchesTuple(err, exc_type);
|
||||
} else {
|
||||
}
|
||||
}
|
||||
return PyErr_GivenExceptionMatches(err, exc_type);
|
||||
}
|
||||
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) {
|
||||
assert(PyExceptionClass_Check(exc_type1));
|
||||
assert(PyExceptionClass_Check(exc_type2));
|
||||
if (likely(err == exc_type1 || err == exc_type2)) return 1;
|
||||
if (likely(PyExceptionClass_Check(err))) {
|
||||
return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2);
|
||||
}
|
||||
return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2));
|
||||
}
|
||||
#endif
|
||||
|
||||
/* RaiseTooManyValuesToUnpack */
|
||||
static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
|
||||
PyErr_Format(PyExc_ValueError,
|
||||
|
|
|
@ -764,10 +764,10 @@ cdef class Dependency(Provider):
|
|||
_copy_parent(self, copied, memo)
|
||||
|
||||
def _async_provide(self, future_result, future):
|
||||
instance = future.result()
|
||||
try:
|
||||
instance = future.result()
|
||||
self._check_instance_type(instance)
|
||||
except Error as exception:
|
||||
except Exception as exception:
|
||||
future_result.set_exception(exception)
|
||||
else:
|
||||
future_result.set_result(instance)
|
||||
|
|
|
@ -718,6 +718,16 @@ class ProvidedInstanceTests(AsyncTestCase):
|
|||
|
||||
class DependencyTests(AsyncTestCase):
|
||||
|
||||
def test_provide_error(self):
|
||||
async def get_async():
|
||||
raise Exception
|
||||
|
||||
provider = providers.Dependency()
|
||||
provider.override(providers.Callable(get_async))
|
||||
|
||||
with self.assertRaises(Exception):
|
||||
self._run(provider())
|
||||
|
||||
def test_isinstance(self):
|
||||
dependency = 1.0
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user