archive: Code style fixes
This commit is contained in:
+42
-39
@@ -134,7 +134,7 @@ class ArchiveBase(object):
|
|||||||
self.file_path = file_path
|
self.file_path = file_path
|
||||||
self.type = atype
|
self.type = atype
|
||||||
|
|
||||||
def unpack(self, target_dir, clean_dir = False):
|
def unpack(self, target_dir, clean_dir=False):
|
||||||
self.target_dir = target_dir
|
self.target_dir = target_dir
|
||||||
# first we check if we need to clean-up our working env.
|
# first we check if we need to clean-up our working env.
|
||||||
if os.path.exists(self.target_dir):
|
if os.path.exists(self.target_dir):
|
||||||
@@ -148,24 +148,25 @@ class ArchiveBase(object):
|
|||||||
class ArchiveBinary(ArchiveBase):
|
class ArchiveBinary(ArchiveBase):
|
||||||
"""ArchiveBinary handles binary archive files (usually distrubuted as
|
"""ArchiveBinary handles binary archive files (usually distrubuted as
|
||||||
.bin files)"""
|
.bin files)"""
|
||||||
def __init__(self, file_path, arch_type = "binary"):
|
def __init__(self, file_path, arch_type="binary"):
|
||||||
super(ArchiveBinary, self).__init__(file_path, arch_type)
|
super(ArchiveBinary, self).__init__(file_path, arch_type)
|
||||||
|
|
||||||
def unpack(self, target_dir, clean_dir = False):
|
def unpack(self, target_dir, clean_dir=False):
|
||||||
super(ArchiveBinary, self).unpack(target_dir, clean_dir)
|
super(ArchiveBinary, self).unpack(target_dir, clean_dir)
|
||||||
|
|
||||||
# we can't unpack .bin files. we'll just move them to target
|
# we can't unpack .bin files. we'll just move them to target
|
||||||
# directory and leave the dirty job to actions.py ;)
|
# directory and leave the dirty job to actions.py ;)
|
||||||
target_file = os.path.join(target_dir, os.path.basename(self.file_path))
|
target_file = os.path.join(target_dir,
|
||||||
|
os.path.basename(self.file_path))
|
||||||
shutil.copyfile(self.file_path, target_file)
|
shutil.copyfile(self.file_path, target_file)
|
||||||
|
|
||||||
|
|
||||||
class ArchiveBzip2(ArchiveBase):
|
class ArchiveBzip2(ArchiveBase):
|
||||||
"""ArchiveBzip2 handles Bzip2 archive files"""
|
"""ArchiveBzip2 handles Bzip2 archive files"""
|
||||||
def __init__(self, file_path, arch_type = "bz2"):
|
def __init__(self, file_path, arch_type="bz2"):
|
||||||
super(ArchiveBzip2, self).__init__(file_path, arch_type)
|
super(ArchiveBzip2, self).__init__(file_path, arch_type)
|
||||||
|
|
||||||
def unpack(self, target_dir, clean_dir = False):
|
def unpack(self, target_dir, clean_dir=False):
|
||||||
super(ArchiveBzip2, self).unpack(target_dir, clean_dir)
|
super(ArchiveBzip2, self).unpack(target_dir, clean_dir)
|
||||||
self.unpack_dir(target_dir)
|
self.unpack_dir(target_dir)
|
||||||
|
|
||||||
@@ -176,7 +177,8 @@ class ArchiveBzip2(ArchiveBase):
|
|||||||
|
|
||||||
import bz2
|
import bz2
|
||||||
self.bzip2 = bz2.BZ2File(self.file_path, "r")
|
self.bzip2 = bz2.BZ2File(self.file_path, "r")
|
||||||
self.output = open(os.path.basename(self.file_path.rstrip(".bz2")), "w")
|
self.output = \
|
||||||
|
open(os.path.basename(self.file_path.rstrip(".bz2")), "w")
|
||||||
self.output.write(self.bzip2.read())
|
self.output.write(self.bzip2.read())
|
||||||
self.output.close()
|
self.output.close()
|
||||||
self.bzip2.close()
|
self.bzip2.close()
|
||||||
@@ -186,10 +188,10 @@ class ArchiveBzip2(ArchiveBase):
|
|||||||
|
|
||||||
class ArchiveGzip(ArchiveBase):
|
class ArchiveGzip(ArchiveBase):
|
||||||
"""ArchiveGzip handles Gzip archive files"""
|
"""ArchiveGzip handles Gzip archive files"""
|
||||||
def __init__(self, file_path, arch_type = "gz"):
|
def __init__(self, file_path, arch_type="gz"):
|
||||||
super(ArchiveGzip, self).__init__(file_path, arch_type)
|
super(ArchiveGzip, self).__init__(file_path, arch_type)
|
||||||
|
|
||||||
def unpack(self, target_dir, clean_dir = False):
|
def unpack(self, target_dir, clean_dir=False):
|
||||||
super(ArchiveGzip, self).unpack(target_dir, clean_dir)
|
super(ArchiveGzip, self).unpack(target_dir, clean_dir)
|
||||||
self.unpack_dir(target_dir)
|
self.unpack_dir(target_dir)
|
||||||
|
|
||||||
@@ -223,7 +225,7 @@ class ArchiveTar(ArchiveBase):
|
|||||||
self.no_same_owner = no_same_owner
|
self.no_same_owner = no_same_owner
|
||||||
self.fileobj = fileobj
|
self.fileobj = fileobj
|
||||||
|
|
||||||
def unpack(self, target_dir, clean_dir = False):
|
def unpack(self, target_dir, clean_dir=False):
|
||||||
"""Unpack tar archive to a given target directory(target_dir)."""
|
"""Unpack tar archive to a given target directory(target_dir)."""
|
||||||
super(ArchiveTar, self).unpack(target_dir, clean_dir)
|
super(ArchiveTar, self).unpack(target_dir, clean_dir)
|
||||||
self.unpack_dir(target_dir)
|
self.unpack_dir(target_dir)
|
||||||
@@ -263,12 +265,12 @@ class ArchiveTar(ArchiveBase):
|
|||||||
|
|
||||||
self.tar.extract(tarinfo)
|
self.tar.extract(tarinfo)
|
||||||
|
|
||||||
# tarfile.extract does not honor umask. It must be honored explicitly.
|
# tarfile.extract does not honor umask. It must be honored
|
||||||
# see --no-same-permissions option of tar(1), which is the deafult
|
# explicitly. See --no-same-permissions option of tar(1),
|
||||||
# behaviour.
|
# which is the deafult behaviour.
|
||||||
#
|
#
|
||||||
# Note: This is no good while installing a pisi package. Thats why
|
# Note: This is no good while installing a pisi package.
|
||||||
# this is optional.
|
# Thats why this is optional.
|
||||||
if self.no_same_permissions and not os.path.islink(tarinfo.name):
|
if self.no_same_permissions and not os.path.islink(tarinfo.name):
|
||||||
os.chmod(tarinfo.name, tarinfo.mode & ~ctx.const.umask)
|
os.chmod(tarinfo.name, tarinfo.mode & ~ctx.const.umask)
|
||||||
|
|
||||||
@@ -358,12 +360,12 @@ class ArchiveTarZ(ArchiveBase):
|
|||||||
for tarinfo in self.tar:
|
for tarinfo in self.tar:
|
||||||
self.tar.extract(tarinfo)
|
self.tar.extract(tarinfo)
|
||||||
|
|
||||||
# tarfile.extract does not honor umask. It must be honored explicitly.
|
# tarfile.extract does not honor umask. It must be honored
|
||||||
# see --no-same-permissions option of tar(1), which is the deafult
|
# explicitly. See --no-same-permissions option of tar(1),
|
||||||
# behaviour.
|
# which is the deafult behaviour.
|
||||||
#
|
#
|
||||||
# Note: This is no good while installing a pisi package. Thats why
|
# Note: This is no good while installing a pisi package.
|
||||||
# this is optional.
|
# Thats why this is optional.
|
||||||
if self.no_same_permissions and not os.path.islink(tarinfo.name):
|
if self.no_same_permissions and not os.path.islink(tarinfo.name):
|
||||||
os.chmod(tarinfo.name, tarinfo.mode & ~ctx.const.umask)
|
os.chmod(tarinfo.name, tarinfo.mode & ~ctx.const.umask)
|
||||||
|
|
||||||
@@ -392,9 +394,9 @@ class ArchiveZip(ArchiveBase):
|
|||||||
extensively. This class provides unpacking and packing magic for
|
extensively. This class provides unpacking and packing magic for
|
||||||
zip archives."""
|
zip archives."""
|
||||||
|
|
||||||
symmagic = 2716663808 #long of hex val '0xA1ED0000L'
|
symmagic = 2716663808 # long of hex val '0xA1ED0000L'
|
||||||
|
|
||||||
def __init__(self, file_path, arch_type = "zip", mode = 'r'):
|
def __init__(self, file_path, arch_type="zip", mode='r'):
|
||||||
super(ArchiveZip, self).__init__(file_path, arch_type)
|
super(ArchiveZip, self).__init__(file_path, arch_type)
|
||||||
|
|
||||||
self.zip_obj = zipfile.ZipFile(self.file_path, mode)
|
self.zip_obj = zipfile.ZipFile(self.file_path, mode)
|
||||||
@@ -456,7 +458,7 @@ class ArchiveZip(ArchiveBase):
|
|||||||
def read_file(self, file_path):
|
def read_file(self, file_path):
|
||||||
return self.zip_obj.read(file_path)
|
return self.zip_obj.read(file_path)
|
||||||
|
|
||||||
def unpack_file_cond(self, pred, target_dir, archive_root = ''):
|
def unpack_file_cond(self, pred, target_dir, archive_root=''):
|
||||||
"""Unpack/Extract files according to predicate function
|
"""Unpack/Extract files according to predicate function
|
||||||
pred: filename -> bool
|
pred: filename -> bool
|
||||||
unpacks stuff into target_dir and only extracts files
|
unpacks stuff into target_dir and only extracts files
|
||||||
@@ -501,7 +503,9 @@ class ArchiveZip(ArchiveBase):
|
|||||||
|
|
||||||
if info.external_attr == self.symmagic:
|
if info.external_attr == self.symmagic:
|
||||||
if os.path.isdir(ofile):
|
if os.path.isdir(ofile):
|
||||||
shutil.rmtree(ofile) # a rare case, the file used to be a dir, now it is a symlink!
|
# A rare case, the file used to be a dir,
|
||||||
|
# now it is a symlink!
|
||||||
|
shutil.rmtree(ofile)
|
||||||
target = zip_obj.read(info.filename)
|
target = zip_obj.read(info.filename)
|
||||||
os.symlink(target, ofile)
|
os.symlink(target, ofile)
|
||||||
else:
|
else:
|
||||||
@@ -515,13 +519,14 @@ class ArchiveZip(ArchiveBase):
|
|||||||
os.chmod(ofile, perm)
|
os.chmod(ofile, perm)
|
||||||
|
|
||||||
def unpack_files(self, paths, target_dir):
|
def unpack_files(self, paths, target_dir):
|
||||||
self.unpack_file_cond(lambda f:f in paths, target_dir)
|
self.unpack_file_cond(lambda f: f in paths, target_dir)
|
||||||
|
|
||||||
def unpack_dir(self, path, target_dir):
|
def unpack_dir(self, path, target_dir):
|
||||||
self.unpack_file_cond(lambda f:util.subpath(path, f), target_dir)
|
self.unpack_file_cond(lambda f: util.subpath(path, f), target_dir)
|
||||||
|
|
||||||
def unpack_dir_flat(self, path, target_dir):
|
def unpack_dir_flat(self, path, target_dir):
|
||||||
self.unpack_file_cond(lambda f:util.subpath(path, f), target_dir, path)
|
self.unpack_file_cond(lambda f: util.subpath(path, f),
|
||||||
|
target_dir, path)
|
||||||
|
|
||||||
def unpack(self, target_dir, clean_dir=False):
|
def unpack(self, target_dir, clean_dir=False):
|
||||||
super(ArchiveZip, self).unpack(target_dir, clean_dir)
|
super(ArchiveZip, self).unpack(target_dir, clean_dir)
|
||||||
@@ -539,21 +544,19 @@ class Archive:
|
|||||||
"""accepted archive types:
|
"""accepted archive types:
|
||||||
targz, tarbz2, tarlzma, tarZ, tar, zip, gzip, binary"""
|
targz, tarbz2, tarlzma, tarZ, tar, zip, gzip, binary"""
|
||||||
|
|
||||||
handlers = {
|
handlers = {'targz': ArchiveTar,
|
||||||
'targz': ArchiveTar,
|
'tarbz2': ArchiveTar,
|
||||||
'tarbz2': ArchiveTar,
|
'tarlzma': ArchiveTar,
|
||||||
'tarlzma': ArchiveTar,
|
'tarZ': ArchiveTarZ,
|
||||||
'tarZ': ArchiveTarZ,
|
'tar': ArchiveTar,
|
||||||
'tar': ArchiveTar,
|
'zip': ArchiveZip,
|
||||||
'zip': ArchiveZip,
|
'gzip': ArchiveGzip,
|
||||||
'gzip': ArchiveGzip,
|
'bzip2': ArchiveBzip2,
|
||||||
'bzip2': ArchiveBzip2,
|
'binary': ArchiveBinary}
|
||||||
'binary': ArchiveBinary
|
|
||||||
}
|
|
||||||
|
|
||||||
self.archive = handlers.get(arch_type)(file_path, arch_type)
|
self.archive = handlers.get(arch_type)(file_path, arch_type)
|
||||||
|
|
||||||
def unpack(self, target_dir, clean_dir = False):
|
def unpack(self, target_dir, clean_dir=False):
|
||||||
self.archive.unpack(target_dir, clean_dir)
|
self.archive.unpack(target_dir, clean_dir)
|
||||||
|
|
||||||
def unpack_files(self, files, target_dir):
|
def unpack_files(self, files, target_dir):
|
||||||
|
|||||||
Reference in New Issue
Block a user