def rename(self, newname): """Change filename to newname """ url = '/api2/repos/%s/file/' % self.repo.id + querystr(p=self.path) postdata = {'operation': 'rename', 'newname': newname} resp = self.client.post(url, data=postdata) self.id = resp.headers['oid'] self.path = os.path.join(os.path.dirname(self.path), newname)
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 moveTo(self, dst_dir, dst_repo=None): """Move filename to newname (also to a different directory) """ url = '/api2/repos/%s/file/' % self.repo.id + querystr(p=self.path) if dst_repo is None: dst_repo = self.repo.id postdata = {'operation': 'move', 'dst_repo': dst_repo, 'dst_dir': dst_dir} resp = self.client.post(url, data=postdata) self.id = resp.headers['oid'] self.path = os.path.join(dst_dir, os.path.basename(self.path))
def copyTo(self, file_names, dst_dir, dst_repo=None): """Copy filename to newname (also to a different directory) """ src_dir = os.path.dirname(self.path) url = '/api2/repos/%s/fileops/copy/' % self.repo.id + querystr(p=src_dir) if dst_repo is None: dst_repo = self.repo.id postdata = {'operation': 'copy', 'file_names': file_names, 'dst_repo': dst_repo, 'dst_dir': dst_dir} resp = self.client.post(url, data=postdata) self.id = resp.headers['oid']
def delete(self): """ :return: """ suffix = 'dir' if self.isdir else 'file' url = '/api2/repos/{}/{}/{}'.format(self.repo.id, suffix, querystr(p=self.path)) resp = self.client.delete(url) return resp
def rename(self, newname): """ :param newname: """ url = '/api2/repos/{}/file/{}'.format(self.repo.id, querystr(p=self.path)) postdata = {'operation': 'rename', 'newname': newname} resp = self.client.post(url, data=postdata) return resp
def get_file(self, path): """Get the file object located in `path` in this repo. Return a :class:`SeafFile` object """ assert path.startswith('/') url = '/api2/repos/%s/file/detail/' % self.repo_id query = querystr(dict(p=path)) file_json = self.client.get(url + query).json() return SeafFile(self.repo_id, path, file_json['id'], file_json['size'], self.client)
def mkdir(self, name): """Create a new sub folder right under this dir. Return a :class:`SeafDir` object of the newly created sub folder. """ 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()) return SeafDir(self.repo, path, ZERO_OBJ_ID)
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, 0)
def load_entries(self, dirents_json=None): """ :param dirents_json: """ if dirents_json is None: url = self.REPOS_DIR_URL.format(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 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 self.__dict__.keys(): self.__dict__[key] = new_dirent.__dict__[key] return succeeded
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 find_share_link(self, direct_link=True): """Seafile refuses to create multiple share links for the same file This method checks whether there already is a share link and returns it """ url = '/api/v2.1/share-links/' + querystr( repo_id=self.repo.id, path=self.path, ) resp = self.client.get(url) result = resp.json() if len(result) == 0: return None elif len(result) == 1: link = result[0]['link'] return link + '?dl=1' if direct_link else link else: # Make sure only one link is received raise OperationError( "More then one share link received (this is unexpected for a file/folder)" )
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)
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 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 _get_download_link(self): url = self.REPOS_FILE_URL.format(self.repo.id, querystr(p=self.path)) resp = self.client.get(url) return re.match(r'"(.*)"', resp.text).group(1)