mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 01:47:36 +03:00 
			
		
		
		
	Add Provider.async_() method + tests
This commit is contained in:
		
							parent
							
								
									141843e62f
								
							
						
					
					
						commit
						227d3494da
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
					@ -277,6 +277,23 @@ cdef class Provider(object):
 | 
				
			||||||
            self.__overridden = tuple()
 | 
					            self.__overridden = tuple()
 | 
				
			||||||
            self.__last_overriding = None
 | 
					            self.__last_overriding = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def async_(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        """Return provided object asynchronously.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        This method is a synonym of __call__().
 | 
				
			||||||
 | 
					        It provides typing stubs for correct type checking with
 | 
				
			||||||
 | 
					        `await` expression:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        .. code-block:: python
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            database_provider: Provider[DatabaseConnection] = Resource(init_db_async)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            async def main():
 | 
				
			||||||
 | 
					                db: DatabaseConnection = await database_provider.async_()
 | 
				
			||||||
 | 
					                ...
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        return self.__call__(*args, **kwargs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def delegate(self):
 | 
					    def delegate(self):
 | 
				
			||||||
        """Return provider's delegate.
 | 
					        """Return provider's delegate.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -707,3 +707,35 @@ class TestAsyncModeApi(unittest.TestCase):
 | 
				
			||||||
        self.assertFalse(self.provider.is_async_mode_enabled())
 | 
					        self.assertFalse(self.provider.is_async_mode_enabled())
 | 
				
			||||||
        self.assertFalse(self.provider.is_async_mode_disabled())
 | 
					        self.assertFalse(self.provider.is_async_mode_disabled())
 | 
				
			||||||
        self.assertTrue(self.provider.is_async_mode_undefined())
 | 
					        self.assertTrue(self.provider.is_async_mode_undefined())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class AsyncTypingStubTests(AsyncTestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_async_(self):
 | 
				
			||||||
 | 
					        container = Container()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        client1 = self._run(container.client.async_())
 | 
				
			||||||
 | 
					        client2 = self._run(container.client.async_())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertIsInstance(client1, Client)
 | 
				
			||||||
 | 
					        self.assertIs(client1.resource1, RESOURCE1)
 | 
				
			||||||
 | 
					        self.assertIs(client1.resource2, RESOURCE2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertIsInstance(client2, Client)
 | 
				
			||||||
 | 
					        self.assertIs(client2.resource1, RESOURCE1)
 | 
				
			||||||
 | 
					        self.assertIs(client2.resource2, RESOURCE2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        service1 = self._run(container.service.async_())
 | 
				
			||||||
 | 
					        service2 = self._run(container.service.async_())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertIsInstance(service1, Service)
 | 
				
			||||||
 | 
					        self.assertIsInstance(service1.client, Client)
 | 
				
			||||||
 | 
					        self.assertIs(service1.client.resource1, RESOURCE1)
 | 
				
			||||||
 | 
					        self.assertIs(service1.client.resource2, RESOURCE2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertIsInstance(service2, Service)
 | 
				
			||||||
 | 
					        self.assertIsInstance(service2.client, Client)
 | 
				
			||||||
 | 
					        self.assertIs(service2.client.resource1, RESOURCE1)
 | 
				
			||||||
 | 
					        self.assertIs(service2.client.resource2, RESOURCE2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertIsNot(service1.client, service2.client)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user