mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-02-07 07:00:49 +03:00
Fix side effect in `Container
` provider overriding
This commit is contained in:
parent
d9f914dfeb
commit
de6c3cda78
|
@ -7,6 +7,10 @@ that were made in every particular version.
|
|||
From version 0.7.6 *Dependency Injector* framework strictly
|
||||
follows `Semantic versioning`_
|
||||
|
||||
Development version
|
||||
-------------------
|
||||
- Hotfix for version ``4.8.0``: fix side effect in ``Container`` provider overriding.
|
||||
|
||||
4.8.1
|
||||
-----
|
||||
- Fix declarative container multi-level inheritance issue.
|
||||
|
|
|
@ -56797,7 +56797,7 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_9Container_6override(
|
|||
* if not hasattr(provider, 'providers'):
|
||||
* raise Error('Container provider {0} can be overridden only by providers container'.format(self)) # <<<<<<<<<<<<<<
|
||||
*
|
||||
* self.__container.override_providers = provider.providers
|
||||
* self.__container.override_providers(**provider.providers)
|
||||
*/
|
||||
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Error); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 3083, __pyx_L1_error)
|
||||
__Pyx_GOTREF(__pyx_t_4);
|
||||
|
@ -56850,18 +56850,36 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_9Container_6override(
|
|||
/* "dependency_injector/providers.pyx":3085
|
||||
* raise Error('Container provider {0} can be overridden only by providers container'.format(self))
|
||||
*
|
||||
* self.__container.override_providers = provider.providers # <<<<<<<<<<<<<<
|
||||
* self.__container.override_providers(**provider.providers) # <<<<<<<<<<<<<<
|
||||
* super().override(provider)
|
||||
*
|
||||
*/
|
||||
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_provider, __pyx_n_s_providers); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 3085, __pyx_L1_error)
|
||||
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->__pyx___container, __pyx_n_s_override_providers_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 3085, __pyx_L1_error)
|
||||
__Pyx_GOTREF(__pyx_t_3);
|
||||
if (__Pyx_PyObject_SetAttrStr(__pyx_v_self->__pyx___container, __pyx_n_s_override_providers_2, __pyx_t_3) < 0) __PYX_ERR(1, 3085, __pyx_L1_error)
|
||||
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_provider, __pyx_n_s_providers); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 3085, __pyx_L1_error)
|
||||
__Pyx_GOTREF(__pyx_t_5);
|
||||
if (unlikely(__pyx_t_5 == Py_None)) {
|
||||
PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
|
||||
__PYX_ERR(1, 3085, __pyx_L1_error)
|
||||
}
|
||||
if (likely(PyDict_CheckExact(__pyx_t_5))) {
|
||||
__pyx_t_4 = PyDict_Copy(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 3085, __pyx_L1_error)
|
||||
__Pyx_GOTREF(__pyx_t_4);
|
||||
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
||||
} else {
|
||||
__pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 3085, __pyx_L1_error)
|
||||
__Pyx_GOTREF(__pyx_t_4);
|
||||
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
||||
}
|
||||
__pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 3085, __pyx_L1_error)
|
||||
__Pyx_GOTREF(__pyx_t_5);
|
||||
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
|
||||
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
|
||||
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
||||
|
||||
/* "dependency_injector/providers.pyx":3086
|
||||
*
|
||||
* self.__container.override_providers = provider.providers
|
||||
* self.__container.override_providers(**provider.providers)
|
||||
* super().override(provider) # <<<<<<<<<<<<<<
|
||||
*
|
||||
* cpdef object _provide(self, tuple args, dict kwargs):
|
||||
|
@ -56874,28 +56892,28 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_9Container_6override(
|
|||
__Pyx_INCREF(((PyObject *)__pyx_v_self));
|
||||
__Pyx_GIVEREF(((PyObject *)__pyx_v_self));
|
||||
PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_self));
|
||||
__pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 3086, __pyx_L1_error)
|
||||
__Pyx_GOTREF(__pyx_t_5);
|
||||
__pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 3086, __pyx_L1_error)
|
||||
__Pyx_GOTREF(__pyx_t_3);
|
||||
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
|
||||
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_override); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 3086, __pyx_L1_error)
|
||||
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_override); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 3086, __pyx_L1_error)
|
||||
__Pyx_GOTREF(__pyx_t_4);
|
||||
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
||||
__pyx_t_5 = NULL;
|
||||
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
|
||||
__pyx_t_3 = NULL;
|
||||
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
|
||||
__pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
|
||||
if (likely(__pyx_t_5)) {
|
||||
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
|
||||
if (likely(__pyx_t_3)) {
|
||||
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
|
||||
__Pyx_INCREF(__pyx_t_5);
|
||||
__Pyx_INCREF(__pyx_t_3);
|
||||
__Pyx_INCREF(function);
|
||||
__Pyx_DECREF_SET(__pyx_t_4, function);
|
||||
}
|
||||
}
|
||||
__pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_provider) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_provider);
|
||||
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
|
||||
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 3086, __pyx_L1_error)
|
||||
__Pyx_GOTREF(__pyx_t_3);
|
||||
__pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_v_provider) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_provider);
|
||||
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
|
||||
if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 3086, __pyx_L1_error)
|
||||
__Pyx_GOTREF(__pyx_t_5);
|
||||
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
|
||||
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
|
||||
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
||||
|
||||
/* "dependency_injector/providers.pyx":3080
|
||||
* return self.__container
|
||||
|
|
|
@ -3082,7 +3082,7 @@ cdef class Container(Provider):
|
|||
if not hasattr(provider, 'providers'):
|
||||
raise Error('Container provider {0} can be overridden only by providers container'.format(self))
|
||||
|
||||
self.__container.override_providers = provider.providers
|
||||
self.__container.override_providers(**provider.providers)
|
||||
super().override(provider)
|
||||
|
||||
cpdef object _provide(self, tuple args, dict kwargs):
|
||||
|
|
Loading…
Reference in New Issue
Block a user