diff options
Diffstat (limited to 'morphlib/util.py')
-rw-r--r-- | morphlib/util.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/morphlib/util.py b/morphlib/util.py index 91880988..8ae95b65 100644 --- a/morphlib/util.py +++ b/morphlib/util.py @@ -14,6 +14,7 @@ import contextlib import itertools +import json import os import pipes import re @@ -21,9 +22,11 @@ import subprocess import textwrap import sys +import cliapp import fs.osfs import morphlib +from morphlib.artifactcachereference import ArtifactCacheReference '''Utility functions for morph.''' @@ -692,3 +695,22 @@ def write_from_dict(filepath, d, validate=lambda x, y: True): #pragma: no cover os.fchown(f.fileno(), 0, 0) os.fchmod(f.fileno(), 0644) + + +def get_stratum_contents(cache, stratum_artifact): + '''Load a stratum from a local artifact cache. + + Returns a list of ArtifactCacheReference instances for the chunks + contained in the stratum. + + ''' + + with open(cache.get(stratum_artifact), 'r') as stratum_file: + try: + artifact_list = json.load(stratum_file, + encoding='unicode-escape') + except ValueError as e: + raise cliapp.AppException( + 'Corruption detected: %s while loading %s' % + (e, cache.artifact_filename(stratum_artifact))) + return [ArtifactCacheReference(a) for a in artifact_list] |