Coverage for api/services/minio_policy_setter.py: 67%

9 statements  

« prev     ^ index     » next       coverage.py v7.6.2, created at 2024-10-10 03:02 +0300

1from exceptions import UnexpectedUserRoleError 

2from sotrans_models.models.roles import SotransRole 

3from sotrans_models.models.users import ( 

4 SotransKeycloakUserCreateModel, 

5 SotransKeycloakUserCreateModelWithMinioPolicy, 

6) 

7 

8 

9class MinioPolicySetter: 

10 """Service for setting minio policy attribute for sotrans users respectively to their roles""" 

11 

12 def set_policy_according_to_roles(self, initial_roles: list[str]) -> str: 

13 """Parse list of roles and set policy accordingly""" 

14 

15 # match initial_roles: 

16 # case [SotransRole.company_logistician.value] | [ 

17 # SotransRole.carrier_logistician.value 

18 # ]: 

19 # policy = "readonly" 

20 # case _: 

21 # raise UnexpectedUserRoleError 

22 # return policy 

23 return "readonly" 

24 

25 def create_new_model_with_minio_policy_attr( 

26 self, 

27 base_user: SotransKeycloakUserCreateModel, 

28 initial_roles: list[str], 

29 ) -> SotransKeycloakUserCreateModelWithMinioPolicy: 

30 """Get suitable policy from initial roles list and return new updated model""" 

31 

32 policy = self.set_policy_according_to_roles(initial_roles) 

33 return SotransKeycloakUserCreateModelWithMinioPolicy( 

34 **base_user.model_dump(exclude_unset=True), policy=policy 

35 )