From 1e00081991edb614de78f7f68b8ea2447ceaa835 Mon Sep 17 00:00:00 2001 From: Ken Dreyer Date: Feb 10 2022 14:44:04 +0000 Subject: refactor exceptions to koji.exceptions Move Koji's custom exceptions classes to a dedicated koji.exceptions library. This organizes the code so it's easier to maintain, and matches patterns in other well-known projects, like requests.exceptions or cryptography.exceptions. --- diff --git a/koji/__init__.py b/koji/__init__.py index fa89f3b..8160b9f 100644 --- a/koji/__init__.py +++ b/koji/__init__.py @@ -76,6 +76,34 @@ from . import _version __version__ = _version.__version__ __version_info__ = _version.__version_info__ +from koji.exceptions import ( + PythonImportError, + GenericError, + LockError, + AuthError, + TagError, + ActionNotAllowed, + BuildError, + AuthLockError, + AuthExpired, + SequenceError, + RetryError, + PreBuildError, + PostBuildError, + BuildrootError, + FunctionDeprecated, + ServerOffline, + LiveCDError, + PluginError, + CallbackError, + ApplianceError, + ParameterError, + ImportError, + ConfigurationError, + LiveMediaError, + GSSAPIAuthError, +) + try: import requests_gssapi as reqgssapi except ImportError: # pragma: no cover @@ -292,145 +320,6 @@ PRIO_DEFAULT = 20 DEFAULT_REQUEST_TIMEOUT = 60 * 60 * 12 DEFAULT_AUTH_TIMEOUT = 60 -# BEGIN kojikamid dup # - -# Exceptions -PythonImportError = ImportError # will be masked by koji's one - - -class GenericError(Exception): - """Base class for our custom exceptions""" - faultCode = 1000 - fromFault = False - - def __str__(self): - try: - return str(self.args[0]['args'][0]) - except Exception: - try: - return str(self.args[0]) - except Exception: - return str(self.__dict__) -# END kojikamid dup # - - -class LockError(GenericError): - """Raised when there is a lock conflict""" - faultCode = 1001 - - -class AuthError(GenericError): - """Raised when there is an error in authentication""" - faultCode = 1002 - - -class TagError(GenericError): - """Raised when a tagging operation fails""" - faultCode = 1003 - - -class ActionNotAllowed(GenericError): - """Raised when the session does not have permission to take some action""" - faultCode = 1004 - -# BEGIN kojikamid dup # - - -class BuildError(GenericError): - """Raised when a build fails""" - faultCode = 1005 -# END kojikamid dup # - - -class AuthLockError(AuthError): - """Raised when a lock prevents authentication""" - faultCode = 1006 - - -class AuthExpired(AuthError): - """Raised when a session has expired""" - faultCode = 1007 - - -class SequenceError(AuthError): - """Raised when requests are received out of sequence""" - faultCode = 1008 - - -class RetryError(AuthError): - """Raised when a request is received twice and cannot be rerun""" - faultCode = 1009 - - -class PreBuildError(BuildError): - """Raised when a build fails during pre-checks""" - faultCode = 1010 - - -class PostBuildError(BuildError): - """Raised when a build fails during post-checks""" - faultCode = 1011 - - -class BuildrootError(BuildError): - """Raised when there is an error with the buildroot""" - faultCode = 1012 - - -class FunctionDeprecated(GenericError): - """Raised by a deprecated function""" - faultCode = 1013 - - -class ServerOffline(GenericError): - """Raised when the server is offline""" - faultCode = 1014 - - -class LiveCDError(GenericError): - """Raised when LiveCD Image creation fails""" - faultCode = 1015 - - -class PluginError(GenericError): - """Raised when there is an error with a plugin""" - faultCode = 1016 - - -class CallbackError(PluginError): - """Raised when there is an error executing a callback""" - faultCode = 1017 - - -class ApplianceError(GenericError): - """Raised when Appliance Image creation fails""" - faultCode = 1018 - - -class ParameterError(GenericError): - """Raised when an rpc call receives incorrect arguments""" - faultCode = 1019 - - -class ImportError(GenericError): - """Raised when an import fails""" - faultCode = 1020 - - -class ConfigurationError(GenericError): - """Raised when load of koji configuration fails""" - faultCode = 1021 - - -class LiveMediaError(GenericError): - """Raised when LiveMedia Image creation fails""" - faultCode = 1022 - - -class GSSAPIAuthError(AuthError): - """Raised when GSSAPI issue in authentication""" - faultCode = 1023 - class NameValidationError(GenericError): """Raised when name validation fails diff --git a/koji/exceptions.py b/koji/exceptions.py new file mode 100644 index 0000000..67f2a08 --- /dev/null +++ b/koji/exceptions.py @@ -0,0 +1,132 @@ +# Exceptions +PythonImportError = ImportError # will be masked by koji's one + + +class GenericError(Exception): + """Base class for our custom exceptions""" + faultCode = 1000 + fromFault = False + + def __str__(self): + try: + return str(self.args[0]['args'][0]) + except Exception: + try: + return str(self.args[0]) + except Exception: + return str(self.__dict__) + + +class LockError(GenericError): + """Raised when there is a lock conflict""" + faultCode = 1001 + + +class AuthError(GenericError): + """Raised when there is an error in authentication""" + faultCode = 1002 + + +class TagError(GenericError): + """Raised when a tagging operation fails""" + faultCode = 1003 + + +class ActionNotAllowed(GenericError): + """Raised when the session does not have permission to take some action""" + faultCode = 1004 + + +class BuildError(GenericError): + """Raised when a build fails""" + faultCode = 1005 + + +class AuthLockError(AuthError): + """Raised when a lock prevents authentication""" + faultCode = 1006 + + +class AuthExpired(AuthError): + """Raised when a session has expired""" + faultCode = 1007 + + +class SequenceError(AuthError): + """Raised when requests are received out of sequence""" + faultCode = 1008 + + +class RetryError(AuthError): + """Raised when a request is received twice and cannot be rerun""" + faultCode = 1009 + + +class PreBuildError(BuildError): + """Raised when a build fails during pre-checks""" + faultCode = 1010 + + +class PostBuildError(BuildError): + """Raised when a build fails during post-checks""" + faultCode = 1011 + + +class BuildrootError(BuildError): + """Raised when there is an error with the buildroot""" + faultCode = 1012 + + +class FunctionDeprecated(GenericError): + """Raised by a deprecated function""" + faultCode = 1013 + + +class ServerOffline(GenericError): + """Raised when the server is offline""" + faultCode = 1014 + + +class LiveCDError(GenericError): + """Raised when LiveCD Image creation fails""" + faultCode = 1015 + + +class PluginError(GenericError): + """Raised when there is an error with a plugin""" + faultCode = 1016 + + +class CallbackError(PluginError): + """Raised when there is an error executing a callback""" + faultCode = 1017 + + +class ApplianceError(GenericError): + """Raised when Appliance Image creation fails""" + faultCode = 1018 + + +class ParameterError(GenericError): + """Raised when an rpc call receives incorrect arguments""" + faultCode = 1019 + + +class ImportError(GenericError): + """Raised when an import fails""" + faultCode = 1020 + + +class ConfigurationError(GenericError): + """Raised when load of koji configuration fails""" + faultCode = 1021 + + +class LiveMediaError(GenericError): + """Raised when LiveMedia Image creation fails""" + faultCode = 1022 + + +class GSSAPIAuthError(AuthError): + """Raised when GSSAPI issue in authentication""" + faultCode = 1023