A request can wait to be served for longer than the access token it was sent with lives, and comes back refused for a token that was valid when it left. Uploads that take minutes make that wait ordinary. - tell an expired token apart from any other refusal by the code the API returns, and retry only that one, once - prefer a token another process left behind over minting a second: it saves a round trip, and a rotating provider would retire one that is still in use. Assign it rather than read it, since the setter is what rewrites the session header the retry will carry - settle the token before the request so the one compared afterwards is the one that was actually sent - report an overloaded server when the second attempt is refused too, and let API errors out of the upload path with their own type
53 lines
1.1 KiB
Python
53 lines
1.1 KiB
Python
class MDRSException(Exception):
|
|
"""Thrown when some kind of errors occurred"""
|
|
|
|
pass
|
|
|
|
|
|
class IllegalArgumentException(MDRSException):
|
|
"""Thrown when something wrong with the argument is passed to a method"""
|
|
|
|
pass
|
|
|
|
|
|
class MissingConfigurationException(MDRSException):
|
|
"""Thrown when wrong or missing system configuration"""
|
|
|
|
pass
|
|
|
|
|
|
class BadRequestException(MDRSException):
|
|
"""Thrown when the request does not contain valid parameter"""
|
|
|
|
pass
|
|
|
|
|
|
class UnauthorizedException(MDRSException):
|
|
"""Thrown when the current user not allowed to perform an operation on the resource"""
|
|
|
|
pass
|
|
|
|
|
|
class TokenExpiredException(UnauthorizedException):
|
|
"""Thrown when the access token was still valid when sent but had expired on arrival"""
|
|
|
|
pass
|
|
|
|
|
|
class ServerBusyException(MDRSException):
|
|
"""Thrown when the server did not start handling a request before its token lapsed"""
|
|
|
|
pass
|
|
|
|
|
|
class ForbiddenException(MDRSException):
|
|
"""Thrown when the current user does not have enough privileges to access the resource"""
|
|
|
|
pass
|
|
|
|
|
|
class UnexpectedException(MDRSException):
|
|
"""Thrown when unexpected error occurred"""
|
|
|
|
pass
|