diff options
Diffstat (limited to 'morphlib')
-rw-r--r-- | morphlib/artifact.py | 10 | ||||
-rw-r--r-- | morphlib/localartifactcache.py | 15 |
2 files changed, 17 insertions, 8 deletions
diff --git a/morphlib/artifact.py b/morphlib/artifact.py index 20fdb185..da6d3763 100644 --- a/morphlib/artifact.py +++ b/morphlib/artifact.py @@ -1,4 +1,4 @@ -# Copyright (C) 2012, 2013 Codethink Limited +# Copyright (C) 2012, 2013, 2014 Codethink Limited # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -56,13 +56,13 @@ class Artifact(object): def basename(self): # pragma: no cover return '%s.%s.%s' % (self.cache_key, - self.source.morphology['kind'], - self.name) + str(self.source.morphology['kind']), + str(self.name)) def metadata_basename(self, metadata_name): # pragma: no cover return '%s.%s.%s.%s' % (self.cache_key, - self.source.morphology['kind'], - self.name, + str(self.source.morphology['kind']), + str(self.name), metadata_name) def get_dependency_prefix_set(self): diff --git a/morphlib/localartifactcache.py b/morphlib/localartifactcache.py index 4c7f7832..955ee97f 100644 --- a/morphlib/localartifactcache.py +++ b/morphlib/localartifactcache.py @@ -96,14 +96,23 @@ class LocalArtifactCache(object): os.utime(filename, None) return open(filename) + def _join(self, basename): + '''Wrapper for pyfilesystem's getsyspath. + + This is required because its API throws us a garbage unicode + string, when file paths are binary data. + ''' + return str(self.cachefs.getsyspath(basename)) + def artifact_filename(self, artifact): - return self.cachefs.getsyspath(artifact.basename()) + basename = artifact.basename() + return self._join(basename) def _artifact_metadata_filename(self, artifact, name): - return self.cachefs.getsyspath(artifact.metadata_basename(name)) + return self._join(artifact.metadata_basename(name)) def _source_metadata_filename(self, source, cachekey, name): - return self.cachefs.getsyspath('%s.%s' % (cachekey, name)) + return self._join('%s.%s' % (cachekey, name)) def clear(self): '''Clear everything from the artifact cache directory. |