def load_entries(self, dirents_json=None): if dirents_json is None: url = '/api2/repos/%s/dir/' % self.repo.id + querystr(p=self.path) dirents_json = self.client.get(url).json() self.entries = [ self._load_dirent(entry_json) for entry_json in dirents_json ]
def share_to_user(self, email, permission): url = '/api2/repos/%s/dir/shared_items/' % self.repo.id + querystr( p=self.path) putdata = { 'share_type': 'user', 'username': email, 'permission': permission } resp = self.client.put(url, data=putdata) return resp.status_code == 200
def create_empty_file(self, name): """Create a new empty file in this dir. Return a :class:`SeafFile` object of the newly created file. """ # TODO: file name validation path = posixpath.join(self.path, name) url = '/api2/repos/%s/file/' % self.repo.id + querystr( p=path, reloaddir='true') postdata = {'operation': 'create'} resp = self.client.post(url, data=postdata) self.id = resp.headers['oid'] self.load_entries(resp.json()) return SeafFile(self.repo, path, ZERO_OBJ_ID, "file", 0)
def rename(self, newname): """Change file/folder name to newname """ suffix = 'dir' if self.isdir else 'file' url = '/api2/repos/%s/%s/' % (self.repo.id, suffix) + querystr( p=self.path, reloaddir='true') postdata = {'operation': 'rename', 'newname': newname} resp = self.client.post(url, data=postdata) succeeded = resp.status_code == 200 if succeeded: if self.isdir: new_dirent = self.repo.get_dir( os.path.join(os.path.dirname(self.path), newname)) else: new_dirent = self.repo.get_file( os.path.join(os.path.dirname(self.path), newname)) for key in list(self.__dict__.keys()): self.__dict__[key] = new_dirent.__dict__[key] return succeeded
def mkdir(self, name): """Create a new sub folder right under this dir. Return a :class:`SeafDir` object of the newly created sub folder. """ # check if entity with same name already exists if self.check_exists(name): raise FileExistsError( "File/directory with name = `{}` already exists in current directory!" .format(name)) path = posixpath.join(self.path, name) url = '/api2/repos/%s/dir/' % self.repo.id + querystr(p=path, reloaddir='true') postdata = {'operation': 'mkdir'} resp = self.client.post(url, data=postdata) self.id = resp.headers['oid'] self.load_entries(resp.json()) # fetch and return created directory object return SeafDir(self.repo, path, ZERO_OBJ_ID, "dir")
def delete(self): suffix = 'dir' if self.isdir else 'file' url = '/api2/repos/%s/%s/' % (self.repo.id, suffix) + querystr( p=self.path) resp = self.client.delete(url) return resp
def _get_download_link(self): url = '/api2/repos/%s/file/' % self.repo.id + querystr(p=self.path) resp = self.client.get(url) return re.match(r'"(.*)"', resp.text).group(1)