Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
    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
        ]
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
 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))
Exemplo n.º 6
0
 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']
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
    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
Exemplo n.º 9
0
    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)
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
 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)
Exemplo n.º 12
0
    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)
Exemplo n.º 13
0
 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)
Exemplo n.º 14
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
        ]
Exemplo n.º 15
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 self.__dict__.keys():
             self.__dict__[key] = new_dirent.__dict__[key]
     return succeeded
Exemplo n.º 16
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
Exemplo n.º 17
0
    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)"
            )
Exemplo n.º 18
0
 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
Exemplo n.º 19
0
 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)
Exemplo n.º 20
0
 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
Exemplo n.º 21
0
 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)
Exemplo n.º 22
0
    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]
Exemplo n.º 23
0
 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)