Coverage for postrfp/shared/exceptions.py: 100%

25 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-22 21:34 +0000

1class RoutingError(AttributeError): 

2 pass 

3 

4 

5class AuthorizationFailure(Exception): 

6 default_message = "You do not have permission to perform the requested action" 

7 

8 def __init__(self, *args, **kwargs): 

9 errors = kwargs.get("errors", None) 

10 self.message = AuthorizationFailure.default_message 

11 if "message" in kwargs: 

12 self.message = kwargs["message"] 

13 elif len(args) and isinstance(args[0], str): 

14 self.message = args[0] 

15 elif errors is not None: 

16 if len(errors) == 1: 

17 error = errors.as_dict()[0] 

18 self.message = f"{error['type']} {error['message']}" 

19 else: 

20 self.message = "%s validation rules failed" % len(errors) 

21 super().__init__(*args) 

22 self.errors = errors 

23 

24 def __repr__(self): 

25 base = self.message 

26 if self.errors: 

27 base += "\n" + repr(self.errors) 

28 return base 

29 

30 def __str__(self): 

31 return self.__repr__() 

32 

33 

34class LacksPermission(AuthorizationFailure): 

35 def __init__(self, permission: str, user_id: str): 

36 msg = 'User "%s" lacks required permission "%s".' % (user_id, permission) 

37 super(LacksPermission, self).__init__(message=msg) 

38 

39 

40class NotLoggedIn(Exception): 

41 pass 

42 

43 

44class TimezoneError(Exception): 

45 """Custom exception for timezone-related errors.""" 

46 

47 pass