diff options
Diffstat (limited to 'sugar_network')
-rw-r--r-- | sugar_network/node/routes.py | 5 | ||||
-rw-r--r-- | sugar_network/toolkit/bundle.py | 20 |
2 files changed, 23 insertions, 2 deletions
diff --git a/sugar_network/node/routes.py b/sugar_network/node/routes.py index 80f8893..ebb46a8 100644 --- a/sugar_network/node/routes.py +++ b/sugar_network/node/routes.py @@ -511,7 +511,12 @@ def load_bundle(volume, request, bundle_path): unpack_size = 0 with bundle: + changelog = join(bundle.rootdir, 'CHANGELOG') for arcname in bundle.get_names(): + if changelog and arcname == changelog: + with bundle.extractfile(changelog) as f: + impl['notes'] = f.read() + changelog = None unpack_size += bundle.getmember(arcname).size spec = bundle.get_spec() context_meta = _load_context_metadata(bundle, spec) diff --git a/sugar_network/toolkit/bundle.py b/sugar_network/toolkit/bundle.py index 7d484ad..70ecd57 100644 --- a/sugar_network/toolkit/bundle.py +++ b/sugar_network/toolkit/bundle.py @@ -66,7 +66,7 @@ class Bundle(object): return self._do_extract(name, dst_path) def extractfile(self, name): - return self._do_extractfile(name) + return _File(self._do_extractfile(name)) def extractall(self, dst_root, members=None, prefix=None): if not prefix: @@ -85,7 +85,8 @@ class Bundle(object): if not exists(dirname(dst_path)): os.makedirs(dirname(dst_path)) with file(dst_path, 'wb') as dst: - shutil.copyfileobj(self.extractfile(arcname), dst) + with self.extractfile(arcname) as src: + shutil.copyfileobj(src, dst) except Exception: if exists(dst_root): shutil.rmtree(dst_root) @@ -164,3 +165,18 @@ class _ZipInfo(object): @property def size(self): return self._info.file_size + + +class _File(object): + + def __init__(self, fileobj): + self._fileobj = fileobj + + def __getattr__(self, name): + return getattr(self._fileobj, name) + + def __enter__(self): + return self + + def __exit__(self, *args): + self._fileobj.close() |