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)