mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-10-31 16:07:51 +03:00 
			
		
		
		
	Refactor dependency_injector.providers package internals
This commit is contained in:
		
							parent
							
								
									f595b7f670
								
							
						
					
					
						commit
						3a7b9c1e98
					
				|  | @ -6,8 +6,6 @@ from dependency_injector.providers.base import ( | |||
|     Static, | ||||
|     StaticProvider, | ||||
|     ExternalDependency, | ||||
|     OverridingContext, | ||||
|     override, | ||||
| ) | ||||
| from dependency_injector.providers.callable import ( | ||||
|     Callable, | ||||
|  | @ -29,6 +27,10 @@ from dependency_injector.providers.config import ( | |||
|     Config, | ||||
|     ChildConfig, | ||||
| ) | ||||
| from dependency_injector.providers.utils import ( | ||||
|     OverridingContext, | ||||
|     override, | ||||
| ) | ||||
| 
 | ||||
| 
 | ||||
| __all__ = ( | ||||
|  |  | |||
|  | @ -2,8 +2,8 @@ | |||
| 
 | ||||
| import six | ||||
| 
 | ||||
| from dependency_injector.providers.utils import OverridingContext | ||||
| from dependency_injector.errors import Error | ||||
| 
 | ||||
| from dependency_injector.utils import ( | ||||
|     is_provider, | ||||
|     ensure_is_provider, | ||||
|  | @ -356,67 +356,3 @@ class ExternalDependency(Provider): | |||
|         return represent_provider(provider=self, provides=self.instance_of) | ||||
| 
 | ||||
|     __repr__ = __str__ | ||||
| 
 | ||||
| 
 | ||||
| class OverridingContext(object): | ||||
|     """Provider overriding context. | ||||
| 
 | ||||
|     :py:class:`OverridingContext` is used by :py:meth:`Provider.override` for | ||||
|     implemeting ``with`` contexts. When :py:class:`OverridingContext` is | ||||
|     closed, overriding that was created in this context is dropped also. | ||||
| 
 | ||||
|     .. code-block:: python | ||||
| 
 | ||||
|         with provider.override(another_provider): | ||||
|             assert provider.is_overridden | ||||
|         assert not provider.is_overridden | ||||
|     """ | ||||
| 
 | ||||
|     def __init__(self, overridden, overriding): | ||||
|         """Initializer. | ||||
| 
 | ||||
|         :param overridden: Overridden provider. | ||||
|         :type overridden: :py:class:`Provider` | ||||
| 
 | ||||
|         :param overriding: Overriding provider. | ||||
|         :type overriding: :py:class:`Provider` | ||||
|         """ | ||||
|         self.overridden = overridden | ||||
|         self.overriding = overriding | ||||
| 
 | ||||
|     def __enter__(self): | ||||
|         """Do nothing.""" | ||||
|         return self.overriding | ||||
| 
 | ||||
|     def __exit__(self, *_): | ||||
|         """Exit overriding context.""" | ||||
|         self.overridden.reset_last_overriding() | ||||
| 
 | ||||
| 
 | ||||
| def override(overridden): | ||||
|     """Decorator for overriding providers. | ||||
| 
 | ||||
|     This decorator overrides ``overridden`` provider by decorated one. | ||||
| 
 | ||||
|     .. code-block:: python | ||||
| 
 | ||||
|         @Factory | ||||
|         class SomeClass(object): | ||||
|             pass | ||||
| 
 | ||||
| 
 | ||||
|         @override(SomeClass) | ||||
|         @Factory | ||||
|         class ExtendedSomeClass(SomeClass.cls): | ||||
|             pass | ||||
| 
 | ||||
|     :param overridden: Provider that should be overridden. | ||||
|     :type overridden: :py:class:`Provider` | ||||
| 
 | ||||
|     :return: Overriding provider. | ||||
|     :rtype: :py:class:`Provider` | ||||
|     """ | ||||
|     def decorator(overriding): | ||||
|         overridden.override(overriding) | ||||
|         return overriding | ||||
|     return decorator | ||||
|  |  | |||
|  | @ -3,14 +3,11 @@ | |||
| import six | ||||
| 
 | ||||
| from dependency_injector.providers.base import Provider | ||||
| 
 | ||||
| from dependency_injector.injections import ( | ||||
|     _parse_args_injections, | ||||
|     _parse_kwargs_injections, | ||||
| ) | ||||
| 
 | ||||
| from dependency_injector.utils import represent_provider | ||||
| 
 | ||||
| from dependency_injector.errors import Error | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,10 +3,8 @@ | |||
| import six | ||||
| 
 | ||||
| from dependency_injector.providers.base import Provider | ||||
| 
 | ||||
| from dependency_injector.errors import Error | ||||
| 
 | ||||
| from dependency_injector.utils import represent_provider | ||||
| from dependency_injector.errors import Error | ||||
| 
 | ||||
| 
 | ||||
| @six.python_2_unicode_compatible | ||||
|  |  | |||
|  | @ -1,13 +1,11 @@ | |||
| """Dependency injector creational providers.""" | ||||
| 
 | ||||
| from dependency_injector.providers.callable import Callable | ||||
| 
 | ||||
| from dependency_injector.utils import ( | ||||
|     is_attribute_injection, | ||||
|     is_method_injection, | ||||
|     GLOBAL_LOCK, | ||||
| ) | ||||
| 
 | ||||
| from dependency_injector.errors import Error | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										65
									
								
								dependency_injector/providers/utils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								dependency_injector/providers/utils.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,65 @@ | |||
| """Dependency injector provider utils.""" | ||||
| 
 | ||||
| 
 | ||||
| class OverridingContext(object): | ||||
|     """Provider overriding context. | ||||
| 
 | ||||
|     :py:class:`OverridingContext` is used by :py:meth:`Provider.override` for | ||||
|     implemeting ``with`` contexts. When :py:class:`OverridingContext` is | ||||
|     closed, overriding that was created in this context is dropped also. | ||||
| 
 | ||||
|     .. code-block:: python | ||||
| 
 | ||||
|         with provider.override(another_provider): | ||||
|             assert provider.is_overridden | ||||
|         assert not provider.is_overridden | ||||
|     """ | ||||
| 
 | ||||
|     def __init__(self, overridden, overriding): | ||||
|         """Initializer. | ||||
| 
 | ||||
|         :param overridden: Overridden provider. | ||||
|         :type overridden: :py:class:`Provider` | ||||
| 
 | ||||
|         :param overriding: Overriding provider. | ||||
|         :type overriding: :py:class:`Provider` | ||||
|         """ | ||||
|         self.overridden = overridden | ||||
|         self.overriding = overriding | ||||
| 
 | ||||
|     def __enter__(self): | ||||
|         """Do nothing.""" | ||||
|         return self.overriding | ||||
| 
 | ||||
|     def __exit__(self, *_): | ||||
|         """Exit overriding context.""" | ||||
|         self.overridden.reset_last_overriding() | ||||
| 
 | ||||
| 
 | ||||
| def override(overridden): | ||||
|     """Decorator for overriding providers. | ||||
| 
 | ||||
|     This decorator overrides ``overridden`` provider by decorated one. | ||||
| 
 | ||||
|     .. code-block:: python | ||||
| 
 | ||||
|         @Factory | ||||
|         class SomeClass(object): | ||||
|             pass | ||||
| 
 | ||||
| 
 | ||||
|         @override(SomeClass) | ||||
|         @Factory | ||||
|         class ExtendedSomeClass(SomeClass.cls): | ||||
|             pass | ||||
| 
 | ||||
|     :param overridden: Provider that should be overridden. | ||||
|     :type overridden: :py:class:`Provider` | ||||
| 
 | ||||
|     :return: Overriding provider. | ||||
|     :rtype: :py:class:`Provider` | ||||
|     """ | ||||
|     def decorator(overriding): | ||||
|         overridden.override(overriding) | ||||
|         return overriding | ||||
|     return decorator | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user