iclientpy.codingui.servicepublish.remotefilebrowser 源代码

from functools import partial
from typing import List
from iclientpy.rest.api.management import Management
from IPython.core.display import display


class _RemoteItem:
    _path: str
    _name: str

    def __init__(self, path: str, name: str):
        self._path = path
        self._name = name

    @property
    def name(self):
        return self._name

    @property
    def path(self):
        return self._path


[文档]class Directory(_RemoteItem):
[文档] def enter(self): pass
def __repr__(self): return 'DIR:' + self.name
[文档]class File(_RemoteItem): pass def __repr__(self): return 'FILE:' + self.name
[文档]class RemoteItemCollection: _list: List[_RemoteItem] def __init__(self): self._list = [] def _add(self, e: _RemoteItem): self._list.append(e) def __repr__(self): array = ['{index}:{name}'.format(index=str(index), name=item.__repr__()) for index, item in enumerate(self._list)] return '\n'.join(array) def __getitem__(self, key): return self._list[key]
[文档]class RemoteFileBrowser: _mng: Management _collection: RemoteItemCollection _default_filters: List[str] _dir_clz: type _file_clz: type _path: str _home_path: str def __init__(self, mng: Management, default_filters:List[str] = ['*.sxwu', '*.smwu', '*.sxw', '*.smw'], dir_clz: type = Directory, file_clz: type = File): self._mng = mng self._dir_clz = dir_clz self._file_clz = file_clz self._default_filters = [] if default_filters is None else list(default_filters) self._path = '' self._home_path = mng.get_home_path().get('Path') self.goto_home() def _goto_dir(self, path: str): list = self._mng.get_file_list(path, self._default_filters) collection = RemoteItemCollection() new_dir = self._new_dir new_file = self._new_file for e in list: fun = new_dir if e.isDirectory else new_file collection._add(fun(e.filePath, e.fileName)) self._collection = collection self._path = path display(self) def _new_file(self, path, name): return self._file_clz(path= path, name= name) def _new_dir(self, path, name): result = self._dir_clz(path= path, name= name) result.enter = partial(self._goto_dir, path) return result
[文档] def goto_home(self): return self._goto_dir(self._home_path)
[文档] def goto_parent(self): linux_index = self._path.rfind('/') windows_index = self._path.rfind('\\') path = self._path[0:max(linux_index, windows_index)] return self._goto_dir(path)
@property def files(self): return self._collection def __repr__(self): return self._path + '\n' + self._collection.__repr__() def __getitem__(self, key): return self._collection[key]