mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-10-31 16:07:51 +03:00 
			
		
		
		
	Adding new providers overriding examples
This commit is contained in:
		
							parent
							
								
									6f11715d24
								
							
						
					
					
						commit
						0972e79130
					
				
							
								
								
									
										36
									
								
								examples/providers/overriding_simple.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								examples/providers/overriding_simple.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | ||||||
|  | """Simple providers overriding example.""" | ||||||
|  | 
 | ||||||
|  | from objects.providers import Factory | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class User(object): | ||||||
|  | 
 | ||||||
|  |     """Example class User.""" | ||||||
|  | 
 | ||||||
|  | # Users factory: | ||||||
|  | users_factory = Factory(User) | ||||||
|  | 
 | ||||||
|  | # Creating several User objects: | ||||||
|  | user1 = users_factory() | ||||||
|  | user2 = users_factory() | ||||||
|  | 
 | ||||||
|  | # Making some asserts: | ||||||
|  | assert user1 is not user2 | ||||||
|  | assert isinstance(user1, User) and isinstance(user2, User) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Overriding users factory: | ||||||
|  | class SuperUser(User): | ||||||
|  | 
 | ||||||
|  |     """Example class SuperUser.""" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | users_factory.override(Factory(SuperUser)) | ||||||
|  | 
 | ||||||
|  | # Creating some more User objects using overridden users factory: | ||||||
|  | user3 = users_factory() | ||||||
|  | user4 = users_factory() | ||||||
|  | 
 | ||||||
|  | # Making some asserts: | ||||||
|  | assert user4 is not user3 | ||||||
|  | assert isinstance(user3, SuperUser) and isinstance(user4, SuperUser) | ||||||
							
								
								
									
										113
									
								
								examples/providers/overriding_users_model.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								examples/providers/overriding_users_model.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,113 @@ | ||||||
|  | """Overriding user's model example.""" | ||||||
|  | 
 | ||||||
|  | from objects.providers import Factory | ||||||
|  | from objects.injections import KwArg | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class User(object): | ||||||
|  | 
 | ||||||
|  |     """Example class User.""" | ||||||
|  | 
 | ||||||
|  |     def __init__(self, id, password): | ||||||
|  |         """Initializer. | ||||||
|  | 
 | ||||||
|  |         :param id: int | ||||||
|  |         :param password: str | ||||||
|  |         """ | ||||||
|  |         self.id = id | ||||||
|  |         self.password = password | ||||||
|  |         super(User, self).__init__() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class UserService(object): | ||||||
|  | 
 | ||||||
|  |     """Example class UserService.""" | ||||||
|  | 
 | ||||||
|  |     def __init__(self, user_cls): | ||||||
|  |         """Initializer. | ||||||
|  | 
 | ||||||
|  |         :param user_cls: User | ||||||
|  |         """ | ||||||
|  |         self.user_cls = user_cls | ||||||
|  |         super(UserService, self).__init__() | ||||||
|  | 
 | ||||||
|  |     def get_by_id(self, id): | ||||||
|  |         """Find user by his id and return user model.""" | ||||||
|  |         return self.user_cls(id=id, password='secret' + str(id)) | ||||||
|  | 
 | ||||||
|  | # Users factory and UserService provider: | ||||||
|  | users_service = Factory(UserService, | ||||||
|  |                         KwArg('user_cls', User)) | ||||||
|  | 
 | ||||||
|  | # Getting several users and making some asserts: | ||||||
|  | user1 = users_service().get_by_id(1) | ||||||
|  | user2 = users_service().get_by_id(2) | ||||||
|  | 
 | ||||||
|  | assert isinstance(user1, User) | ||||||
|  | assert user1.id == 1 | ||||||
|  | assert user1.password == 'secret1' | ||||||
|  | 
 | ||||||
|  | assert isinstance(user2, User) | ||||||
|  | assert user2.id == 2 | ||||||
|  | assert user2.password == 'secret2' | ||||||
|  | 
 | ||||||
|  | assert user1 is not user2 | ||||||
|  | 
 | ||||||
|  | # Extending user model and user service for adding custom attributes without | ||||||
|  | # making any changes to client's code. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class ExtendedUser(User): | ||||||
|  | 
 | ||||||
|  |     """Example class ExtendedUser.""" | ||||||
|  | 
 | ||||||
|  |     def __init__(self, id, password, first_name=None, last_name=None, | ||||||
|  |                  gender=None): | ||||||
|  |         """Initializer. | ||||||
|  | 
 | ||||||
|  |         :param id: int | ||||||
|  |         :param password: str | ||||||
|  |         :param first_name: str | ||||||
|  |         :param last_name: str | ||||||
|  |         :param gender: str | ||||||
|  |         """ | ||||||
|  |         self.first_name = first_name | ||||||
|  |         self.last_name = last_name | ||||||
|  |         self.gender = gender | ||||||
|  |         super(ExtendedUser, self).__init__(id, password) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class ExtendedUserService(UserService): | ||||||
|  | 
 | ||||||
|  |     """Example class ExtendedUserService.""" | ||||||
|  | 
 | ||||||
|  |     def get_by_id(self, id): | ||||||
|  |         """Find user by his id and return user model.""" | ||||||
|  |         user = super(ExtendedUserService, self).get_by_id(id) | ||||||
|  |         user.first_name = 'John' + str(id) | ||||||
|  |         user.last_name = 'Smith' + str(id) | ||||||
|  |         user.gender = 'male' | ||||||
|  |         return user | ||||||
|  | 
 | ||||||
|  | # Overriding users_service provider: | ||||||
|  | extended_users_service = Factory(ExtendedUserService, | ||||||
|  |                                  KwArg('user_cls', ExtendedUser)) | ||||||
|  | users_service.override(extended_users_service) | ||||||
|  | 
 | ||||||
|  | # Getting few other users users and making some asserts: | ||||||
|  | user3 = users_service().get_by_id(3) | ||||||
|  | user4 = users_service().get_by_id(4) | ||||||
|  | 
 | ||||||
|  | assert isinstance(user3, ExtendedUser) | ||||||
|  | assert user3.id == 3 | ||||||
|  | assert user3.password == 'secret3' | ||||||
|  | assert user3.first_name == 'John3' | ||||||
|  | assert user3.last_name == 'Smith3' | ||||||
|  | 
 | ||||||
|  | assert isinstance(user4, ExtendedUser) | ||||||
|  | assert user4.id == 4 | ||||||
|  | assert user4.password == 'secret4' | ||||||
|  | assert user4.first_name == 'John4' | ||||||
|  | assert user4.last_name == 'Smith4' | ||||||
|  | 
 | ||||||
|  | assert user3 is not user4 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user