darabonba/exceptions.py (68 lines of code) (raw):

from Tea.exceptions import UnretryableException as TeaUnretryableException from Tea.exceptions import RequiredArgumentException as TeaRequiredArgumentException from Tea.exceptions import TeaException from darabonba.policy.retry import RetryPolicyContext from typing import Any, Optional class DaraException(TeaException): def __init__(self, dic): super().__init__(dic) self.code = dic.get("code") self.message = dic.get("message") self.data = dic.get("data") self.description = dic.get("description") self.accessDeniedDetail = dic.get("accessDeniedDetail") if isinstance(dic.get("data"), dict) and dic.get("data").get("statusCode") is not None: self.statusCode = dic.get("data").get("statusCode") self.name = 'DaraException' def __str__(self): return f'Error: {self.code} {self.message} Response: {self.data}' class ResponseException(DaraException): def __init__(self, code: Optional[str] = None, message: Optional[str] = None, status_code: Optional[int] = None, retry_after: Optional[int] = None, data: Optional[dict] = None, access_denied_detail: Optional[dict] = None, description: Optional[str] = None, stack: Optional[str] = None): if data and status_code is not None: data['statusCode'] = status_code super().__init__({ 'code': code, 'message': message, 'data': data, 'description': description, 'accessDeniedDetail': access_denied_detail }) self.name = 'ResponseException' self.status_code = status_code self.retry_after = retry_after self.stack = stack class ValidateException(Exception): pass class RequiredArgumentException(TeaRequiredArgumentException): def __init__(self, arg): self.arg = arg def __str__(self): return f'"{self.arg}" is required.' class RetryError(Exception): def __init__(self, message): super().__init__({"message":message}) self.message = message self.data = None self.name = 'RetryError' class UnretryableException(TeaUnretryableException): def __init__( self, _context: RetryPolicyContext ): if isinstance(_context.exception, ResponseException): raise _context.exception super().__init__( request= _context.http_request, ex= _context.exception, ) self.name = 'UnretryableException' def __str__(self): return str(self.inner_exception)