Beispiel #1
0
    def get_folder(self, path) -> Folder:
        def resolve_folder() -> Folder:
            return self.current if folder is None else folder

        folder: Optional[Folder] = None
        if len(path) == 0:
            log.debug(f'_get_folder: path = {path}, returning self.root')
            return self.root

        if path.startswith('/'):
            folder = self.root
            path = path[1:]

        log.debug(f'_get_folder: path = {path}, resolved = {resolve_folder().path()}')
        for node in [i for i in path.split('/') if i != '']:
            try:
                if node == '..':
                    folder = asserttype(Folder, resolve_folder().parent)
                elif node in resolve_folder().nodes:
                    folder = asserttype(Folder, resolve_folder().nodes[node])
                else:
                    raise IOError(f"{path} Not found")
            except AssertionError:
                raise IOError(f"Is File")

        return notnone(folder)
Beispiel #2
0
 def move(self, src: str, dest: str) -> None:
     log.debug(f'move_directory: src = {src} => dest = {dest}')
     _src, _dest = self._get_node(src), self.get_folder(dest)
     asserttype(Folder, _src.parent).nodes.pop(_src.name)
     _src.parent = _dest
     _dest.nodes[_src.name] = _src
     self.save()
Beispiel #3
0
 def delete(self, path: str) -> None:
     node = self._get_node(path)
     try:
         if isinstance(node, File) or (isinstance(node, Folder) and len(node.nodes) == 0):
             asserttype(Folder, node.parent).nodes.pop(node.name)
         else:
             raise IOError('Not empty')
     except KeyError:
         raise IOError('Not found')
     self.save()
 def open_file(self, name: str, mode: str = 'r') -> File:
     with self.conn() as soc:
         send_request(
             soc,
             encode_parameter('fs', 'open_file', self.path(), name, mode))
         return RemoteFile(self.conn,
                           asserttype(File, pickle.loads(get_request(soc))))
Beispiel #5
0
    def open_file(self, name: str, mode: str = 'r') -> File:
        try:
            if mode == 'r':
                if name in self.nodes:
                    return Readable(asserttype(File, self.nodes[name]))

                raise IOError("No such file")

            if name not in self.nodes:
                self.create_file(name)

            if mode == 'w':
                return Writeable(asserttype(File, self.nodes[name]))
            elif mode == 'a':
                return Appendable(Writeable(asserttype(File,
                                                       self.nodes[name])))
            elif mode == 'rw':
                return Hybrid(asserttype(File, self.nodes[name]))
            elif mode == 'ra':
                return Appendable(Hybrid(asserttype(File, self.nodes[name])))
        except AssertionError:
            raise IOError("Is directory")
 def __init__(self, conn: Callable[[], Connection], folder: Folder) -> None:
     super().__init__(
         folder.name,
         asserttype(Folder, folder.parent)
         if folder.parent is not None else None, folder.nodes)
     self.conn = conn
Beispiel #7
0
 def current(self):
     with self.__create_connection() as soc:
         send_request(soc, encode_parameter('fs', 'current'))
         return RemoteFolder(
             self.__create_connection,
             asserttype(Folder, pickle.loads(get_request(soc))))
Beispiel #8
0
 def memory_map(self) -> Memory:
     with self.__create_connection() as soc:
         send_request(soc, encode_parameter('fs', 'memory_map'))
         return asserttype(Memory, pickle.loads(get_request(soc)))
Beispiel #9
0
 def change_directory(self, path: str) -> Folder:
     with self.__create_connection() as soc:
         send_request(soc, encode_parameter('fs', 'change_directory', path))
         return RemoteFolder(
             self.__create_connection,
             asserttype(Folder, pickle.loads(get_request(soc))))
Beispiel #10
0
 def close(self, node: Node) -> None:
     self.__loaded.remove(asserttype(Node, node))
Beispiel #11
0
 def open(self, node: Node) -> None:
     self.__loaded.add(asserttype(Node, node))