예제 #1
0
파일: fuse.py 프로젝트: alefranz/acd_cli
    def read(self, path, length, offset, fh):
        logger.debug("read %s, ln: %d of: %d fh %d" % (os.path.basename(path), length, offset, fh))
        node, _ = query.resolve(path, trash=False)
        if node.size == 0:
            return b''

        return StreamedResponseCache.get(node.id, offset, length, node.size)
예제 #2
0
 def write(self, path, data, offset, fh):
     if offset == 0:
         n, p = query.resolve(path, False)
         node_id = n.id
     else:
         node_id = ""
     WriteProxy.write(node_id, fh, offset, data)
     return len(data)
예제 #3
0
 def write(self, path, data, offset, fh):
     if offset == 0:
         n, p = query.resolve(path, False)
         node_id = n.id
     else:
         node_id = ''
     WriteProxy.write(node_id, fh, offset, data)
     return len(data)
예제 #4
0
    def readdir(self, path, fh):
        logger.debug('readdir %s' % path)

        node, _ = query.resolve(path, trash=False)
        if not node:
            raise FuseOSError(errno.ENOENT)

        return [_ for _ in ['.', '..'] + [c.name for c in node.available_children()]]
예제 #5
0
    def readdir(self, path, fh):
        node, _ = query.resolve(path, trash=False)
        if not node:
            raise FuseOSError(errno.ENOENT)

        return [
            _
            for _ in ['.', '..'] + [c.name for c in node.available_children()]
        ]
예제 #6
0
파일: fuse.py 프로젝트: StSimmons/acd_cli
    def read(self, path, length, offset, fh):
        node, _ = query.resolve(path, trash=False)

        if not node:
            raise(FuseOSError(errno.ENOENT))

        if node.size == 0 or node.size == offset:
            return b''

        return ReadProxy.get(node.id, offset, length, node.size)
예제 #7
0
    def getxattr(self, path, name, position=0):
        node, _ = query.resolve(path, trash=False)

        if name == self.XATTRS.ID:
            return bytes(node.id, encoding="utf-8")
        elif name == self.XATTRS.DESCR:
            return bytes(node.description if node.description else "", encoding="utf-8")
        elif name == self.FXATTRS.MD5:
            return bytes(node.md5, encoding="utf-8")

        raise FuseOSError(errno.ENODATA)
예제 #8
0
    def getxattr(self, path, name, position=0):
        node, _ = query.resolve(path, trash=False)

        if name == self.XATTRS.ID:
            return bytes(node.id, encoding='utf-8')
        elif name == self.XATTRS.DESCR:
            return bytes(node.description if node.description else '',
                         encoding='utf-8')
        elif name == self.FXATTRS.MD5:
            return bytes(node.md5, encoding='utf-8')

        raise FuseOSError(errno.ENODATA)
예제 #9
0
파일: fuse.py 프로젝트: StSimmons/acd_cli
    def getattr(self, path, fh=None):
        node, _ = query.resolve(path, trash=False)
        if not node:
            raise FuseOSError(errno.ENOENT)

        times = dict(st_atime=time(),
                     st_mtime=(node.modified - datetime(1970, 1, 1)) / timedelta(seconds=1),
                     st_ctime=(node.created - datetime(1970, 1, 1)) / timedelta(seconds=1))

        if node.is_folder():
            return dict(st_mode=stat.S_IFDIR | 0o0777,
                        st_nlink=node.size if self.nlinks else 1, **times)
        if node.is_file():
            return dict(st_mode=stat.S_IFREG | 0o0666,
                        st_nlink=len(node.parents) if self.nlinks else 1,
                        st_size=node.size, **times)
예제 #10
0
    def _trash(path):
        logger.debug('trash %s' % path)
        node, parent = query.resolve(path, False)

        if not node:  # or not parent:
            raise FuseOSError(errno.ENOENT)

        logger.debug('%s %s' % (node, parent))

        try:
            # if len(node.parents) > 1:
            #     r = metadata.remove_child(parent.id, node.id)
            # else:
            r = trash.move_to_trash(node.id)
        except RequestError as e:
            FuseOSError.convert(e)
        else:
            sync.insert_node(r)
예제 #11
0
    def _trash(path):
        logger.debug("trash %s" % path)
        node, parent = query.resolve(path, False)

        if not node:  # or not parent:
            raise FuseOSError(errno.ENOENT)

        logger.debug("%s %s" % (node, parent))

        try:
            # if len(node.parents) > 1:
            #     r = metadata.remove_child(parent.id, node.id)
            # else:
            r = trash.move_to_trash(node.id)
        except RequestError as e:
            FuseOSError.convert(e)
        else:
            sync.insert_node(r)
예제 #12
0
    def _trash(path):
        logger.debug('trash %s' % path)
        node, parent = query.resolve(path)
        if not node or not parent:
            raise FuseOSError(errno.ENOENT)

        logger.debug('%s %s' % (node, parent))

        try:
            # if len(node.parents) > 1:
            #     r = metadata.remove_child(parent.id, node.id)
            # else:
            r = trash.move_to_trash(node.id)
        except RequestError as e:
            if e.status_code == e.CODE.CONN_EXCEPTION:
                raise FuseOSError(errno.ECOMM)
            else:
                raise FuseOSError(errno.EREMOTEIO)
        else:
            sync.insert_node(r)
예제 #13
0
    def getattr(self, path, fh=None):
        node, _ = query.resolve(path, trash=False)
        if not node:
            raise FuseOSError(errno.ENOENT)

        times = dict(st_atime=time(),
                     st_mtime=(node.modified - datetime(1970, 1, 1)) /
                     timedelta(seconds=1),
                     st_ctime=(node.created - datetime(1970, 1, 1)) /
                     timedelta(seconds=1))

        if node.is_folder():
            nlinks = dict(st_nlink=node.size) if self.nlinks else dict()
            return dict(st_mode=stat.S_IFDIR | 0o0777,
                        st_nlink=node.size if self.nlinks else 1,
                        **times)
        if node.is_file():
            return dict(st_mode=stat.S_IFREG | 0o0666,
                        st_nlink=len(node.parents) if self.nlinks else 1,
                        st_size=node.size,
                        **times)
예제 #14
0
파일: fuse.py 프로젝트: alefranz/acd_cli
    def release(self, path, fh):
        logger.debug('release %s, %d' % (path, fh))

        node, _ = query.resolve(path, trash=False)
        StreamedResponseCache.release(node.id)
예제 #15
0
    def readdir(self, path, fh):
        node, _ = query.resolve(path, trash=False)
        if not node:
            raise FuseOSError(errno.ENOENT)

        return [_ for _ in [".", ".."] + [c.name for c in node.available_children()]]
예제 #16
0
 def release(self, path, fh):
     node, _ = query.resolve(path, trash=False)
     ReadProxy.release(node.id)
     WriteProxy.release(fh)
예제 #17
0
 def listxattr(self, path):
     node, _ = query.resolve(path, trash=False)
     if node.is_file():
         return self.FXATTRS.vars()
     elif node.is_folder():
         return self.XATTRS.vars()
예제 #18
0
    def read(self, path, length, offset, fh):
        node, _ = query.resolve(path, trash=False)
        if node.size == 0 or node.size == offset:
            return b''

        return ReadProxy.get(node.id, offset, length, node.size)
예제 #19
0
    def read(self, path, length, offset, fh):
        node, _ = query.resolve(path, trash=False)
        if node.size == 0 or node.size == offset:
            return b""

        return ReadProxy.get(node.id, offset, length, node.size)
예제 #20
0
 def listxattr(self, path):
     node, _ = query.resolve(path, trash=False)
     if node.is_file():
         return self.FXATTRS.vars()
     elif node.is_folder():
         return self.XATTRS.vars()
예제 #21
0
 def release(self, path, fh):
     node, _ = query.resolve(path, trash=False)
     ReadProxy.release(node.id)
     WriteProxy.release(fh)