def _stat(self, keys, xml, path=None): if path: prefix = self._path(path, True) else: prefix = None isDir = xml.tag == ns('CommonPrefixes') stat = { 'size': 0, 'directory': isDir, 'hardlinks': 0, 'modified': 0, 'owner': 'nobody', 'group': 'nobody' } if isDir: key = xml.find(ns('Prefix')).text filename = key[:-1].rsplit(self.delimiter, 1)[-1] stat['permissions'] = 0755 else: key = xml.find(ns('Key')).text if not isDir and key == prefix: return False, [] filename = key.rsplit(self.delimiter, 1)[-1] stat['size'] = int(xml.find(ns('Size')).text) stat['permissions'] = 0644 stat['owner'] = xml.find(ns('Owner', 'DisplayName')).text return filename, [stat[k] for k in keys]
def removeDirectory(self, path): prefix = self._path(path, True) results = self._bucket.objects(prefix=prefix, delimiter=self.delimiter) results = iter(results) try: obj = yield next(results) except StopIteration: log.msg('Cannot remove directory {}, not found'.format(prefix)) return if obj.tag == ns('CommonPrefixes'): log.msg('Cannot remove directory {}, not empty'.format(prefix)) raise Exception('Directory is not empty.') try: yield next(results) except StopIteration: log.msg('Remove directory {}'.format(prefix)) yield self._bucket.object(obj.find(ns('Key')).text).delete() else: log.msg('Cannot remove directory {}, not empty'.format(prefix)) raise Exception('Directory is not empty.')