예제 #1
0
파일: protocol.py 프로젝트: GaretJax/s3ftp
    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]
예제 #2
0
파일: protocol.py 프로젝트: GaretJax/s3ftp
    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.')