diff --git a/docker_registry/drivers/swift.py b/docker_registry/drivers/swift.py index 966329e..e20fe9b 100644 --- a/docker_registry/drivers/swift.py +++ b/docker_registry/drivers/swift.py @@ -37,6 +37,15 @@ def _init_path(self, path=None): path = path[:-1] return path + def _clean_up_name(self, name): + if self._root_path != '/': + name = name.replace( + self._init_path() + '/', '', 1) + # trim extra trailing slashes + if name.endswith('/'): + name = name[:-1] + return name + def content_redirect_url(self, path): path = self._init_path(path) return '/'.join([ @@ -95,17 +104,19 @@ def list_directory(self, path=None): path += '/' _, directory = self._swift_connection.get_container( container=self._swift_container, - path=path) + prefix=path, delimiter='/') if not directory: raise + param = '' for inode in directory: + if 'name' in inode: + param = 'name' + elif 'subdir' in inode: + param = 'subdir' + else: + raise # trim extra trailing slashes - if inode['name'].endswith('/'): - inode['name'] = inode['name'][:-1] - if self._root_path != '/': - inode['name'] = inode['name'].replace( - self._init_path() + '/', '', 1) - yield inode['name'] + yield self._clean_up_name(inode[param]) except Exception: raise exceptions.FileNotFoundError('%s is not there' % path) diff --git a/tests/mocker.py b/tests/mocker.py index b1571e0..2229e1b 100644 --- a/tests/mocker.py +++ b/tests/mocker.py @@ -32,6 +32,11 @@ def get_container(self, container, marker=None, limit=None, prefix=None, delimiter=None, end_marker=None, path=None, full_listing=False): lst = [] + if path is None: + if prefix[-1] != '/': + path = prefix + '/' + else: + path = prefix for key, value in self._swift_containers[container].iteritems(): if key.startswith(path): lst.append({'name': key})