mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 18:07:44 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Simple providers overriding example."""
 | 
						|
 | 
						|
import dataclasses
 | 
						|
import unittest.mock
 | 
						|
 | 
						|
from dependency_injector import containers, providers
 | 
						|
 | 
						|
 | 
						|
class ApiClient:
 | 
						|
    ...
 | 
						|
 | 
						|
 | 
						|
class ApiClientStub(ApiClient):
 | 
						|
    ...
 | 
						|
 | 
						|
 | 
						|
@dataclasses.dataclass
 | 
						|
class Service:
 | 
						|
    api_client: ApiClient
 | 
						|
 | 
						|
 | 
						|
class Container(containers.DeclarativeContainer):
 | 
						|
 | 
						|
    api_client_factory = providers.Factory(ApiClient)
 | 
						|
 | 
						|
    service_factory = providers.Factory(
 | 
						|
        Service,
 | 
						|
        api_client=api_client_factory,
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    container = Container()
 | 
						|
 | 
						|
    # 1. Use .override() to replace the API client with stub
 | 
						|
    container.api_client_factory.override(providers.Factory(ApiClientStub))
 | 
						|
    service1 = container.service_factory()
 | 
						|
    assert isinstance(service1.api_client, ApiClientStub)
 | 
						|
 | 
						|
    # 2. Use .override() as a context manager to mock the API client in testing
 | 
						|
    with container.api_client_factory.override(unittest.mock.Mock(ApiClient)):
 | 
						|
        service2 = container.service_factory()
 | 
						|
        assert isinstance(service2.api_client, unittest.mock.Mock)
 | 
						|
 | 
						|
    # 3. Use .reset_override() to get back to normal
 | 
						|
    container.api_client_factory.reset_override()
 | 
						|
    service3 = container.service_factory()
 | 
						|
    assert isinstance(service3.api_client, ApiClient)
 |