Source code for juju.errors

# Copyright 2023 Canonical Ltd.
# Licensed under the Apache V2, see LICENCE file for details.

[docs]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)
[docs]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'] self.error_info = result['error-info'] if 'error-info' in result else None super().__init__(self.message)
[docs]class JujuConnectionError(ConnectionError, JujuError): pass
[docs]class JujuAuthError(JujuConnectionError): pass
[docs]class JujuRedirectException(Exception): """Exception indicating that a redirection was requested""" def __init__(self, redirect_info, follow_redirect=True): self.redirect_info = redirect_info self.follow_redirect = follow_redirect @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' or not self.follow_redirect ]
[docs]class JujuEntityNotFoundError(JujuError): """Exception indicating that an entity was not found in the state. It was expected that the entity was found in state and this is a terminal condition. To fix this condition, you should disconnect and reconnect to ensure that any missing entities are correctly picked up.""" def __init__(self, entity_name, entity_types=None): self.entity_name = entity_name self.entity_types = entity_types super().__init__("Entity not found: {}".format(entity_name))
[docs]class JujuModelError(JujuError): pass
[docs]class JujuMachineError(JujuError): pass
[docs]class JujuAgentError(JujuError): pass
[docs]class JujuAppError(JujuError): pass
[docs]class JujuUnitError(JujuError): pass
[docs]class JujuPermissionError(JujuError): pass
[docs]class JujuBackupError(JujuError): pass
[docs]class PylibjujuProgrammingError(Exception): pass
[docs]class JujuNotSupportedError(JujuError): pass
[docs]class JujuNotValid(JujuError): def __init__(self, entity_type, entity_name): self.entity_type = entity_type self.entity_name = entity_name super().__init__(f'Invalid {entity_type} : {entity_name}')
[docs]class JujuConfigError(JujuError): """Exception raised during processing a configuration key-value pair in a config set for an application. """ def __init__(self, config, config_pair, message=None): self.config = config self.config_pair = config_pair if message is None: self.message = "Couldn't process the value of a config pair : %s, value of type %s" % (self.config_pair, type(self.config_pair[1])) else: self.message = message super().__init__(self.message)
[docs]class JujuApplicationConfigError(JujuConfigError): pass
[docs]class JujuModelConfigError(JujuConfigError): pass
[docs]class JujuControllerNotFoundError(JujuError): pass
[docs]class AbstractMethodError(Exception): pass
[docs]class PylibjujuError(JujuError): pass
[docs]class JujuUnknownVersion(PylibjujuError): pass