|
from errno import ENOENT |
|
|
|
|
|
class InvalidArchiveError(Exception): |
|
"""Raised when libarchive can't open a file""" |
|
|
|
def __init__(self, fn, msg, *args, **kw): |
|
msg = ( |
|
"Error with archive %s. You probably need to delete and re-download " |
|
"or re-create this file. Message was:\n\n%s" % (fn, msg) |
|
) |
|
self.errno = ENOENT |
|
super().__init__(msg) |
|
|
|
|
|
class ArchiveCreationError(Exception): |
|
"""Raised when an archive fails during creation""" |
|
|
|
pass |
|
|
|
|
|
class CaseInsensitiveFileSystemError(InvalidArchiveError): |
|
def __init__(self, package_location, extract_location, **kwargs): |
|
message = """ |
|
Cannot extract package to a case-insensitive file system. Your install |
|
destination does not differentiate between upper and lowercase |
|
characters, and this breaks things. Try installing to a location that |
|
is case-sensitive. Windows drives are usually the culprit here - can |
|
you install to a native Unix drive, or turn on case sensitivity for |
|
this (Windows) location? |
|
|
|
package location: %(package_location)s |
|
extract location: %(extract_location)s |
|
""" |
|
self.package_location = package_location |
|
self.extract_location = extract_location |
|
super().__init__(package_location, message, **kwargs) |
|
|
|
|
|
class ConversionError(Exception): |
|
def __init__(self, missing_files, mismatching_sizes, *args, **kw): |
|
self.missing_files = missing_files |
|
self.mismatching_sizes = mismatching_sizes |
|
errors = "" |
|
if self.missing_files: |
|
errors = "Missing files in converted package: %s\n" % self.missing_files |
|
errors = ( |
|
errors |
|
+ "Mismatching sizes (corruption) in converted package: %s" % self.mismatching_sizes |
|
) |
|
|
|
super().__init__(errors, *args, **kw) |
|
|