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
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-22 21:34 +0000
1class RoutingError(AttributeError):
2 pass
5class AuthorizationFailure(Exception):
6 default_message = "You do not have permission to perform the requested action"
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
24 def __repr__(self):
25 base = self.message
26 if self.errors:
27 base += "\n" + repr(self.errors)
28 return base
30 def __str__(self):
31 return self.__repr__()
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)
40class NotLoggedIn(Exception):
41 pass
44class TimezoneError(Exception):
45 """Custom exception for timezone-related errors."""
47 pass