mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-10-31 16:07:51 +03:00 
			
		
		
		
	Merge branch 'release/3.12.4' into master
This commit is contained in:
		
						commit
						8cc00dee83
					
				|  | @ -7,6 +7,11 @@ 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`_ | ||||||
| 
 | 
 | ||||||
|  | 3.12.4 | ||||||
|  | ------ | ||||||
|  | - Fix bug `#200 <https://github.com/ets-labs/python-dependency-injector/issues/200>`_. | ||||||
|  | - Make some refactoring `#199 <https://github.com/ets-labs/python-dependency-injector/issues/199>`_. | ||||||
|  | 
 | ||||||
| 3.12.3 | 3.12.3 | ||||||
| ------ | ------ | ||||||
| - Fix bug `#198 <https://github.com/ets-labs/python-dependency-injector/issues/198>`_. | - Fix bug `#198 <https://github.com/ets-labs/python-dependency-injector/issues/198>`_. | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| """Dependency injector top-level package.""" | """Dependency injector top-level package.""" | ||||||
| 
 | 
 | ||||||
| __version__ = '3.12.3' | __version__ = '3.12.4' | ||||||
| """Version number that follows semantic versioning. | """Version number that follows semantic versioning. | ||||||
| 
 | 
 | ||||||
| :type: str | :type: str | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -10,7 +10,6 @@ cimport cython | ||||||
| cdef class Provider(object): | cdef class Provider(object): | ||||||
|     cdef tuple __overridden |     cdef tuple __overridden | ||||||
|     cdef Provider __last_overriding |     cdef Provider __last_overriding | ||||||
|     cdef object __overriding_lock |  | ||||||
| 
 | 
 | ||||||
|     cpdef object _provide(self, tuple args, dict kwargs) |     cpdef object _provide(self, tuple args, dict kwargs) | ||||||
|     cpdef void _copy_overridings(self, Provider copied, dict memo) |     cpdef void _copy_overridings(self, Provider copied, dict memo) | ||||||
|  |  | ||||||
|  | @ -87,7 +87,6 @@ cdef class Provider(object): | ||||||
|         """Initializer.""" |         """Initializer.""" | ||||||
|         self.__overridden = tuple() |         self.__overridden = tuple() | ||||||
|         self.__last_overriding = None |         self.__last_overriding = None | ||||||
|         self.__overriding_lock = self.__class__.overriding_lock |  | ||||||
|         super(Provider, self).__init__() |         super(Provider, self).__init__() | ||||||
| 
 | 
 | ||||||
|     def __call__(self, *args, **kwargs): |     def __call__(self, *args, **kwargs): | ||||||
|  | @ -128,7 +127,7 @@ cdef class Provider(object): | ||||||
|     @property |     @property | ||||||
|     def overridden(self): |     def overridden(self): | ||||||
|         """Return tuple of overriding providers.""" |         """Return tuple of overriding providers.""" | ||||||
|         with self.__overriding_lock: |         with self.overriding_lock: | ||||||
|             return self.__overridden |             return self.__overridden | ||||||
| 
 | 
 | ||||||
|     @property |     @property | ||||||
|  | @ -157,7 +156,7 @@ cdef class Provider(object): | ||||||
|         if not is_provider(provider): |         if not is_provider(provider): | ||||||
|             provider = Object(provider) |             provider = Object(provider) | ||||||
| 
 | 
 | ||||||
|         with self.__overriding_lock: |         with self.overriding_lock: | ||||||
|             self.__overridden += (provider,) |             self.__overridden += (provider,) | ||||||
|             self.__last_overriding = provider |             self.__last_overriding = provider | ||||||
| 
 | 
 | ||||||
|  | @ -171,7 +170,7 @@ cdef class Provider(object): | ||||||
| 
 | 
 | ||||||
|         :rtype: None |         :rtype: None | ||||||
|         """ |         """ | ||||||
|         with self.__overriding_lock: |         with self.overriding_lock: | ||||||
|             if len(self.__overridden) == 0: |             if len(self.__overridden) == 0: | ||||||
|                 raise Error('Provider {0} is not overridden'.format(str(self))) |                 raise Error('Provider {0} is not overridden'.format(str(self))) | ||||||
| 
 | 
 | ||||||
|  | @ -186,7 +185,7 @@ cdef class Provider(object): | ||||||
| 
 | 
 | ||||||
|         :rtype: None |         :rtype: None | ||||||
|         """ |         """ | ||||||
|         with self.__overriding_lock: |         with self.overriding_lock: | ||||||
|             self.__overridden = tuple() |             self.__overridden = tuple() | ||||||
|             self.__last_overriding = None |             self.__last_overriding = None | ||||||
| 
 | 
 | ||||||
|  | @ -652,7 +651,11 @@ cdef class Callable(Provider): | ||||||
|         if copied is not None: |         if copied is not None: | ||||||
|             return copied |             return copied | ||||||
| 
 | 
 | ||||||
|         copied = self.__class__(self.provides, |         provides = self.provides | ||||||
|  |         if isinstance(provides, Provider): | ||||||
|  |             provides = deepcopy(provides, memo) | ||||||
|  | 
 | ||||||
|  |         copied = self.__class__(provides, | ||||||
|                                 *deepcopy(self.args, memo), |                                 *deepcopy(self.args, memo), | ||||||
|                                 **deepcopy(self.kwargs, memo)) |                                 **deepcopy(self.kwargs, memo)) | ||||||
| 
 | 
 | ||||||
|  | @ -1098,7 +1101,11 @@ cdef class Factory(Provider): | ||||||
|         if copied is not None: |         if copied is not None: | ||||||
|             return copied |             return copied | ||||||
| 
 | 
 | ||||||
|         copied = self.__class__(self.cls, |         cls = self.cls | ||||||
|  |         if isinstance(cls, Provider): | ||||||
|  |             cls = deepcopy(cls, memo) | ||||||
|  | 
 | ||||||
|  |         copied = self.__class__(cls, | ||||||
|                                 *deepcopy(self.args, memo), |                                 *deepcopy(self.args, memo), | ||||||
|                                 **deepcopy(self.kwargs, memo)) |                                 **deepcopy(self.kwargs, memo)) | ||||||
|         copied.set_attributes(**deepcopy(self.attributes, memo)) |         copied.set_attributes(**deepcopy(self.attributes, memo)) | ||||||
|  | @ -1446,7 +1453,11 @@ cdef class BaseSingleton(Provider): | ||||||
|         if copied is not None: |         if copied is not None: | ||||||
|             return copied |             return copied | ||||||
| 
 | 
 | ||||||
|         copied = self.__class__(self.cls, |         cls = self.cls | ||||||
|  |         if isinstance(cls, Provider): | ||||||
|  |             cls = deepcopy(cls, memo) | ||||||
|  | 
 | ||||||
|  |         copied = self.__class__(cls, | ||||||
|                                 *deepcopy(self.args, memo), |                                 *deepcopy(self.args, memo), | ||||||
|                                 **deepcopy(self.kwargs, memo)) |                                 **deepcopy(self.kwargs, memo)) | ||||||
|         copied.set_attributes(**deepcopy(self.attributes, memo)) |         copied.set_attributes(**deepcopy(self.attributes, memo)) | ||||||
|  |  | ||||||
|  | @ -279,7 +279,7 @@ class DeclarativeContainerTests(unittest.TestCase): | ||||||
|         # Bug: |         # Bug: | ||||||
|         # https://github.com/ets-labs/python-dependency-injector/issues/198 |         # https://github.com/ets-labs/python-dependency-injector/issues/198 | ||||||
|         class _Container(containers.DeclarativeContainer): |         class _Container(containers.DeclarativeContainer): | ||||||
|             p1 = providers.Object(1) |             p1 = providers.Dependency(instance_of=int) | ||||||
| 
 | 
 | ||||||
|             p2 = providers.Dependency(object) |             p2 = providers.Dependency(object) | ||||||
|             p2.override(providers.Factory(dict, p1=p1)) |             p2.override(providers.Factory(dict, p1=p1)) | ||||||
|  | @ -299,3 +299,17 @@ class DeclarativeContainerTests(unittest.TestCase): | ||||||
|             _Container.p2.last_overriding.kwargs['p1'], |             _Container.p2.last_overriding.kwargs['p1'], | ||||||
|             _Container.p1, |             _Container.p1, | ||||||
|         ) |         ) | ||||||
|  | 
 | ||||||
|  |     def test_init_with_chained_dependency(self): | ||||||
|  |         # Bug: | ||||||
|  |         # https://github.com/ets-labs/python-dependency-injector/issues/200 | ||||||
|  |         class _Container(containers.DeclarativeContainer): | ||||||
|  |             p1 = providers.Dependency(instance_of=int) | ||||||
|  |             p2 = providers.Factory(p1) | ||||||
|  | 
 | ||||||
|  |         container = _Container(p1=1) | ||||||
|  | 
 | ||||||
|  |         self.assertEqual(container.p2(), 1) | ||||||
|  |         self.assertIs(container.p2.cls, container.p1) | ||||||
|  |         self.assertIs(_Container.p2.cls, _Container.p1) | ||||||
|  |         self.assertIsNot(container.p2.cls,  _Container.p1) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user