4
from charmhelpers.core import (
10
class ArchiveError(Exception):
14
def get_archive_handler(archive_name):
15
if os.path.isfile(archive_name):
16
if tarfile.is_tarfile(archive_name):
17
return extract_tarfile
18
elif zipfile.is_zipfile(archive_name):
19
return extract_zipfile
21
# look at the file name
22
for ext in ('.tar', '.tar.gz', '.tgz', 'tar.bz2', '.tbz2', '.tbz'):
23
if archive_name.endswith(ext):
24
return extract_tarfile
25
for ext in ('.zip', '.jar'):
26
if archive_name.endswith(ext):
27
return extract_zipfile
30
def archive_dest_default(archive_name):
31
archive_file = os.path.basename(archive_name)
32
return os.path.join(hookenv.charm_dir(), "archives", archive_file)
35
def extract(archive_name, destpath=None):
36
handler = get_archive_handler(archive_name)
39
destpath = archive_dest_default(archive_name)
40
if not os.path.isdir(destpath):
42
handler(archive_name, destpath)
45
raise ArchiveError("No handler for archive")
48
def extract_tarfile(archive_name, destpath):
49
"Unpack a tar archive, optionally compressed"
50
archive = tarfile.open(archive_name)
51
archive.extractall(destpath)
54
def extract_zipfile(archive_name, destpath):
56
archive = zipfile.ZipFile(archive_name)
57
archive.extractall(destpath)