You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

450 lines
11 KiB
Python

""":mod:`wand.exceptions` --- Errors and warnings
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This module maps MagickWand API's errors and warnings to Python's native
exceptions and warnings. You can catch all MagickWand errors using Python's
natural way to catch errors.
.. seealso::
`ImageMagick Exceptions <http://www.imagemagick.org/script/exception.php>`_
.. versionadded:: 0.1.1
.. versionchanged:: 0.5.8
Warning & Error Exceptions are now explicitly defined. Previously
ImageMagick domain-based errors were dynamically generated at runtime.
"""
class WandException(Exception):
"""All Wand-related exceptions are derived from this class."""
class BaseWarning(WandException, Warning):
"""Base class for Wand-related warnings.
.. versionadded:: 0.4.4
"""
class BaseError(WandException):
"""Base class for Wand-related errors.
.. versionadded:: 0.4.4
"""
class BaseFatalError(WandException):
"""Base class for Wand-related fatal errors.
.. versionadded:: 0.4.4
"""
class WandLibraryVersionError(WandException):
"""Base class for Wand-related ImageMagick version errors.
.. versionadded:: 0.3.2
"""
class WandRuntimeError(WandException, RuntimeError):
"""Generic class for Wand-related runtime errors.
.. versionadded:: 0.5.2
"""
class ResourceLimitWarning(BaseWarning, MemoryError):
"""A program resource is exhausted e.g. not enough memory."""
wand_error_code = 300
class ResourceLimitError(BaseError, MemoryError):
"""A program resource is exhausted e.g. not enough memory."""
wand_error_code = 400
class ResourceLimitFatalError(BaseFatalError, MemoryError):
"""A program resource is exhausted e.g. not enough memory."""
wand_error_code = 700
class TypeWarning(BaseWarning):
"""A font is unavailable; a substitution may have occurred."""
wand_error_code = 305
class TypeError(BaseError):
"""A font is unavailable; a substitution may have occurred."""
wand_error_code = 405
class TypeFatalError(BaseFatalError):
"""A font is unavailable; a substitution may have occurred."""
wand_error_code = 705
class OptionWarning(BaseWarning):
"""A command-line option was malformed."""
wand_error_code = 310
class OptionError(BaseError):
"""A command-line option was malformed."""
wand_error_code = 410
class OptionFatalError(BaseFatalError):
"""A command-line option was malformed."""
wand_error_code = 710
class DelegateWarning(BaseWarning):
"""An ImageMagick delegate failed to complete."""
wand_error_code = 315
class DelegateError(BaseError):
"""An ImageMagick delegate failed to complete."""
wand_error_code = 415
class DelegateFatalError(BaseFatalError):
"""An ImageMagick delegate failed to complete."""
wand_error_code = 715
class MissingDelegateWarning(BaseWarning, ImportError):
"""The image type can not be read or written because the appropriate;
delegate is missing."""
wand_error_code = 320
class MissingDelegateError(BaseError, ImportError):
"""The image type can not be read or written because the appropriate;
delegate is missing."""
wand_error_code = 420
class MissingDelegateFatalError(BaseFatalError, ImportError):
"""The image type can not be read or written because the appropriate;
delegate is missing."""
wand_error_code = 720
class CorruptImageWarning(BaseWarning, ValueError):
"""The image file may be corrupt."""
wand_error_code = 325
class CorruptImageError(BaseError, ValueError):
"""The image file may be corrupt."""
wand_error_code = 425
class CorruptImageFatalError(BaseFatalError, ValueError):
"""The image file may be corrupt."""
wand_error_code = 725
class FileOpenWarning(BaseWarning, IOError):
"""The image file could not be opened for reading or writing."""
wand_error_code = 330
class FileOpenError(BaseError, IOError):
"""The image file could not be opened for reading or writing."""
wand_error_code = 430
class FileOpenFatalError(BaseFatalError, IOError):
"""The image file could not be opened for reading or writing."""
wand_error_code = 730
class BlobWarning(BaseWarning, IOError):
"""A binary large object could not be allocated, read, or written."""
wand_error_code = 335
class BlobError(BaseError, IOError):
"""A binary large object could not be allocated, read, or written."""
wand_error_code = 435
class BlobFatalError(BaseFatalError, IOError):
"""A binary large object could not be allocated, read, or written."""
wand_error_code = 735
class StreamWarning(BaseWarning, IOError):
"""There was a problem reading or writing from a stream."""
wand_error_code = 340
class StreamError(BaseError, IOError):
"""There was a problem reading or writing from a stream."""
wand_error_code = 440
class StreamFatalError(BaseFatalError, IOError):
"""There was a problem reading or writing from a stream."""
wand_error_code = 740
class CacheWarning(BaseWarning):
"""Pixels could not be read or written to the pixel cache."""
wand_error_code = 345
class CacheError(BaseError):
"""Pixels could not be read or written to the pixel cache."""
wand_error_code = 445
class CacheFatalError(BaseFatalError):
"""Pixels could not be read or written to the pixel cache."""
wand_error_code = 745
class CoderWarning(BaseWarning):
"""There was a problem with an image coder."""
wand_error_code = 350
class CoderError(BaseError):
"""There was a problem with an image coder."""
wand_error_code = 450
class CoderFatalError(BaseFatalError):
"""There was a problem with an image coder."""
wand_error_code = 750
class ModuleWarning(BaseWarning):
"""There was a problem with an image module."""
wand_error_code = 355
class ModuleError(BaseError):
"""There was a problem with an image module."""
wand_error_code = 455
class ModuleFatalError(BaseFatalError):
"""There was a problem with an image module."""
wand_error_code = 755
class DrawWarning(BaseWarning):
"""A drawing operation failed."""
wand_error_code = 360
class DrawError(BaseError):
"""A drawing operation failed."""
wand_error_code = 460
class DrawFatalError(BaseFatalError):
"""A drawing operation failed."""
wand_error_code = 760
class ImageWarning(BaseWarning):
"""The operation could not complete due to an incompatible image."""
wand_error_code = 365
class ImageError(BaseError):
"""The operation could not complete due to an incompatible image."""
wand_error_code = 465
class ImageFatalError(BaseFatalError):
"""The operation could not complete due to an incompatible image."""
wand_error_code = 765
class WandWarning(BaseWarning):
"""There was a problem specific to the MagickWand API."""
wand_error_code = 370
class WandError(BaseError):
"""There was a problem specific to the MagickWand API."""
wand_error_code = 470
class WandFatalError(BaseFatalError):
"""There was a problem specific to the MagickWand API."""
wand_error_code = 770
class RandomWarning(BaseWarning):
"""There is a problem generating a true or pseudo-random number."""
wand_error_code = 375
class RandomError(BaseError):
"""There is a problem generating a true or pseudo-random number."""
wand_error_code = 475
class RandomFatalError(BaseFatalError):
"""There is a problem generating a true or pseudo-random number."""
wand_error_code = 775
class XServerWarning(BaseWarning):
"""An X resource is unavailable."""
wand_error_code = 380
class XServerError(BaseError):
"""An X resource is unavailable."""
wand_error_code = 480
class XServerFatalError(BaseFatalError):
"""An X resource is unavailable."""
wand_error_code = 780
class MonitorWarning(BaseWarning):
"""There was a problem activating the progress monitor."""
wand_error_code = 385
class MonitorError(BaseError):
"""There was a problem activating the progress monitor."""
wand_error_code = 485
class MonitorFatalError(BaseFatalError):
"""There was a problem activating the progress monitor."""
wand_error_code = 785
class RegistryWarning(BaseWarning):
"""There was a problem getting or setting the registry."""
wand_error_code = 390
class RegistryError(BaseError):
"""There was a problem getting or setting the registry."""
wand_error_code = 490
class RegistryFatalError(BaseFatalError):
"""There was a problem getting or setting the registry."""
wand_error_code = 790
class ConfigureWarning(BaseWarning):
"""There was a problem getting a configuration file."""
wand_error_code = 395
class ConfigureError(BaseError):
"""There was a problem getting a configuration file."""
wand_error_code = 495
class ConfigureFatalError(BaseFatalError):
"""There was a problem getting a configuration file."""
wand_error_code = 795
class PolicyWarning(BaseWarning):
"""A policy denies access to a delegate, coder, filter, path, or
resource."""
wand_error_code = 399
class PolicyError(BaseError):
"""A policy denies access to a delegate, coder, filter, path, or
resource."""
wand_error_code = 499
class PolicyFatalError(BaseFatalError):
"""A policy denies access to a delegate, coder, filter, path, or
resource."""
wand_error_code = 799
#: (:class:`dict`) The dictionary of (code, exc_type).
TYPE_MAP = {
300: ResourceLimitWarning,
305: TypeWarning,
310: OptionWarning,
315: DelegateWarning,
320: MissingDelegateWarning,
325: CorruptImageWarning,
330: FileOpenWarning,
335: BlobWarning,
340: StreamWarning,
345: CacheWarning,
350: CoderWarning,
355: ModuleWarning,
360: DrawWarning,
365: ImageWarning,
370: WandWarning,
375: RandomWarning,
380: XServerWarning,
385: MonitorWarning,
390: RegistryWarning,
395: ConfigureWarning,
399: PolicyWarning,
400: ResourceLimitError,
405: TypeError,
410: OptionError,
415: DelegateError,
420: MissingDelegateError,
425: CorruptImageError,
430: FileOpenError,
435: BlobError,
440: StreamError,
445: CacheError,
450: CoderError,
455: ModuleError,
460: DrawError,
465: ImageError,
470: WandError,
475: RandomError,
480: XServerError,
485: MonitorError,
490: RegistryError,
495: ConfigureError,
499: PolicyError,
700: ResourceLimitFatalError,
705: TypeFatalError,
710: OptionFatalError,
715: DelegateFatalError,
720: MissingDelegateFatalError,
725: CorruptImageFatalError,
730: FileOpenFatalError,
735: BlobFatalError,
740: StreamFatalError,
745: CacheFatalError,
750: CoderFatalError,
755: ModuleFatalError,
760: DrawFatalError,
765: ImageFatalError,
770: WandFatalError,
775: RandomFatalError,
780: XServerFatalError,
785: MonitorFatalError,
790: RegistryFatalError,
795: ConfigureFatalError,
799: PolicyFatalError,
}