from django.core.exceptions import ValidationError


class StorageError(Exception):
    """Base class for all storage utility errors."""


class UploadError(ValidationError):
    """Validation error raised for rejected uploads."""


class UnsupportedFileType(StorageError):
    """File extension or MIME type is not allowed."""


class FileTooLarge(StorageError):
    """File exceeds the allowed size limit."""


# Aliases for documentation / tracker naming
FileTooLargeError = FileTooLarge
InvalidFileTypeError = UnsupportedFileType


class MaliciousFile(StorageError):
    """Magic bytes do not match claimed MIME type."""


class MissingPackageManifest(StorageError):
    """SCORM/H5P archive does not contain required manifest."""
