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
|
From version 0.7.6 *Dependency Injector* framework strictly
|
||||||
follows `Semantic versioning`_
|
follows `Semantic versioning`_
|
||||||
|
|
||||||
|
Development version
|
||||||
|
-------------------
|
||||||
|
- Hotfix for version ``4.8.0``: fix side effect in ``Container`` provider overriding.
|
||||||
|
|
||||||
4.8.1
|
4.8.1
|
||||||
-----
|
-----
|
||||||
- Fix declarative container multi-level inheritance issue.
|
- 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'):
|
* if not hasattr(provider, 'providers'):
|
||||||
* raise Error('Container provider {0} can be overridden only by providers container'.format(self)) # <<<<<<<<<<<<<<
|
* 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_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);
|
__Pyx_GOTREF(__pyx_t_4);
|
||||||
|
@ -56850,18 +56850,36 @@ static PyObject *__pyx_pf_19dependency_injector_9providers_9Container_6override(
|
||||||
/* "dependency_injector/providers.pyx":3085
|
/* "dependency_injector/providers.pyx":3085
|
||||||
* raise Error('Container provider {0} can be overridden only by providers container'.format(self))
|
* 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)
|
* 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);
|
__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_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
|
/* "dependency_injector/providers.pyx":3086
|
||||||
*
|
*
|
||||||
* self.__container.override_providers = provider.providers
|
* self.__container.override_providers(**provider.providers)
|
||||||
* super().override(provider) # <<<<<<<<<<<<<<
|
* super().override(provider) # <<<<<<<<<<<<<<
|
||||||
*
|
*
|
||||||
* cpdef object _provide(self, tuple args, dict kwargs):
|
* 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_INCREF(((PyObject *)__pyx_v_self));
|
||||||
__Pyx_GIVEREF(((PyObject *)__pyx_v_self));
|
__Pyx_GIVEREF(((PyObject *)__pyx_v_self));
|
||||||
PyTuple_SET_ITEM(__pyx_t_4, 1, ((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_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_5);
|
__Pyx_GOTREF(__pyx_t_3);
|
||||||
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
|
__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_GOTREF(__pyx_t_4);
|
||||||
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
|
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
|
||||||
__pyx_t_5 = NULL;
|
__pyx_t_3 = NULL;
|
||||||
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
|
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
|
||||||
__pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
|
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
|
||||||
if (likely(__pyx_t_5)) {
|
if (likely(__pyx_t_3)) {
|
||||||
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
|
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
|
||||||
__Pyx_INCREF(__pyx_t_5);
|
__Pyx_INCREF(__pyx_t_3);
|
||||||
__Pyx_INCREF(function);
|
__Pyx_INCREF(function);
|
||||||
__Pyx_DECREF_SET(__pyx_t_4, 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_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_5); __pyx_t_5 = 0;
|
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
|
||||||
if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 3086, __pyx_L1_error)
|
if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 3086, __pyx_L1_error)
|
||||||
__Pyx_GOTREF(__pyx_t_3);
|
__Pyx_GOTREF(__pyx_t_5);
|
||||||
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
|
__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
|
/* "dependency_injector/providers.pyx":3080
|
||||||
* return self.__container
|
* return self.__container
|
||||||
|
|
|
@ -3082,7 +3082,7 @@ cdef class Container(Provider):
|
||||||
if not hasattr(provider, 'providers'):
|
if not hasattr(provider, 'providers'):
|
||||||
raise Error('Container provider {0} can be overridden only by providers container'.format(self))
|
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)
|
super().override(provider)
|
||||||
|
|
||||||
cpdef object _provide(self, tuple args, dict kwargs):
|
cpdef object _provide(self, tuple args, dict kwargs):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user