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.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
return os.path.join(hookenv.charm_dir(), "archives", archive_name)
34
def extract(archive_name, destpath=None):
35
handler = get_archive_handler(archive_name)
38
destpath = archive_dest_default(archive_name)
39
if not os.path.isdir(destpath):
41
get_archive_handler(archive_name)(archive_name, destpath)
44
raise ArchiveError("No handler for archive")
47
def extract_tarfile(archive_name, destpath):
48
"Unpack a tar archive, optionally compressed"
49
archive = tarfile.open(archive_name)
50
archive.extractall(destpath)
53
def extract_zipfile(archive_name, destpath):
55
archive = zipfile.ZipFile(archive_name)
56
archive.extractall(destpath)