| class JujuError(Exception): |
| def __init__(self, *args, **kwargs): |
| self.message = '' |
| self.errors = [] |
| if args: |
| self.message = str(args[0]) |
| if isinstance(args[0], (list, tuple)): |
| self.errors = args[0] |
| elif len(args) > 1: |
| self.errors = list(args) |
| else: |
| self.errors = [self.message] |
| super().__init__(*args, **kwargs) |
| |
| |
| class JujuAPIError(JujuError): |
| def __init__(self, result): |
| self.result = result |
| self.message = result['error'] |
| self.error_code = result.get('error-code') |
| self.response = result['response'] |
| self.request_id = result['request-id'] |
| super().__init__(self.message) |
| |
| |
| class JujuConnectionError(ConnectionError, JujuError): |
| pass |
| |
| |
| class JujuAuthError(JujuConnectionError): |
| pass |
| |
| |
| class JujuRedirectException(Exception): |
| """Exception indicating that a redirection was requested""" |
| def __init__(self, redirect_info): |
| self.redirect_info = redirect_info |
| |
| @property |
| def ca_cert(self): |
| return self.redirect_info['ca-cert'] |
| |
| @property |
| def endpoints(self): |
| return [ |
| ('{value}:{port}'.format(**s), self.ca_cert) |
| for servers in self.redirect_info['servers'] |
| for s in servers if s['scope'] == 'public' |
| ] |