def search(self,
            query_words,
            item_type=ItemType.All,
            sort_by=SortBy.Name,
            sort_direction=SortDirection.Desc,
            page_id=0,
            search_in_folder=0):
     """
     :param (required) query_words: search key words
     :param (optional) item_type: search item type, for example: file, folder, all. Default, all
     :param (optional) sort_by: for example: name, date, size, score. Default: name
     :param (optional) sort_direction: for example: desc, asc. Default:
     :param (optional) page_id: Default: 0
     :param (optional) search_in_folder: 0
     :return:
     """
     assert isinstance(query_words, str)
     assert isinstance(item_type, str)
     assert isinstance(sort_by, str)
     assert isinstance(sort_direction, str)
     assert isinstance(page_id, int)
     assert isinstance(search_in_folder, int)
     url = UrlBuilder.search()
     query = {
         "query_words": query_words,
         "type": item_type,
         "sort_by": sort_by,
         "sort_direction": sort_direction,
         "page_id": page_id,
         "search_in_folder": search_in_folder
     }
     return self.get(url, params=query)
Exemplo n.º 2
0
 def update_user_info(self, name):
     assert isinstance(name, str)
     url = UrlBuilder.update_user_info()
     pay_load = {
         "name": name
     }
     return self.post(url, request_json_arg=pay_load)
    def invite_collaborator(self, folder_id, user_id, role, message=None):
        """
        邀请协作

        :param folder_id: 文件夹id
        :param user_id: 用户id
        :param role: 协作角色, 必须为CollaborationRole中的一种
        :param message: 协作信息,可以选
        :return:
        """
        assert isinstance(folder_id, int)
        assert isinstance(user_id, int)
        self._check_role(role)
        url = UrlBuilder.collaboration_invite()
        invited_user = {
            "id": user_id,
            "role": role
        }
        pay_load = {
            "folder_id": folder_id,
            "invited_user": invited_user
        }
        if message is not None:
            pay_load["invitation_message"] = message
        return self.post(url, request_json_arg=pay_load)
Exemplo n.º 4
0
    def get_children(self,
                     folder_id,
                     page_id=0,
                     page_capacity=20,
                     item_type=ItemType.All):
        """
        获取单层子文件和文件夹列表

        :param folder_id:
        :param page_id: Default = 0
        :param page_capacity: Default = 20
        :param (optional) item_type: children item type, for example: file, folder, all. Default, all
        :return:
        """
        assert isinstance(folder_id, int)
        assert isinstance(page_id, int)
        assert isinstance(page_capacity, int)
        assert isinstance(item_type, str)
        url = UrlBuilder.get_children(folder_id)
        query = {
            "page_id": page_id,
            "page_capacity": page_capacity,
            "type": item_type
        }
        return self.get(url, params=query)
 def update_collaboration(self, collaboration_id, role):
     assert isinstance(collaboration_id, int)
     self._check_role(role)
     url = UrlBuilder.update_collaboration(collaboration_id)
     pay_load = {
         "role": role
     }
     return self.post(url, request_json_arg=pay_load)
 def get_info(self, file_id):
     """
     获取文件信息
     :param file_id: 文件id
     :return: 文件信息
     """
     assert isinstance(file_id, int)
     url = UrlBuilder.get_file_info(file_id)
     return self.get(url)
Exemplo n.º 7
0
    def get_folder_info(self, folder_id):
        """
        获取文件夹信息

        :param folder_id: 文件夹ID
        :return:
        """
        assert isinstance(folder_id, int)
        url = UrlBuilder.get_folder_info(folder_id)
        return self.get(url)
    def get_comments(self, file_id):
        """
        获取文件的评论列表

        :param file_id: 文件id
        :return: 文件评论列表
        """
        assert isinstance(file_id, int)
        url = UrlBuilder.get_file_comment(file_id)
        return self.get(url)
Exemplo n.º 9
0
    def delete_from_trash(self, folder_id):
        """
        从回收站删除文件夹

        :param folder_id: 文件夹ID
        :return:
        """
        assert isinstance(folder_id, int)
        url = UrlBuilder.delete_folder_from_trash(folder_id)
        return self.post(url)
Exemplo n.º 10
0
    def delete_from_trash(self, file_id):
        """
        从回收站删除

        :param file_id: 文件id
        :return:
        """
        assert isinstance(file_id, int)
        url = UrlBuilder.delete_file_from_trash(file_id)
        return self.post(url)
Exemplo n.º 11
0
    def restore_from_trash(self, file_id):
        """
        从回收站恢复文件

        :param file_id: 文件id
        :return:
        """
        assert isinstance(file_id, int)
        url = UrlBuilder.restore_file_from_trash(file_id)
        return self.post(url)
Exemplo n.º 12
0
    def delete_file(self, file_id):
        """
        删除文件

        :param file_id: 文件id
        :return: 删除结果
        """
        assert isinstance(file_id, int)
        url = UrlBuilder.delete_file(file_id)
        return self.post(url)
Exemplo n.º 13
0
    def get_download_url(self, file_id):
        """
        获取下载文件的下载链接

        :param file_id:
        :return: 下载url
        """
        pre_sign_download_url = UrlBuilder.download_file(file_id)
        result = self.get(pre_sign_download_url)
        return result["download_url"]
Exemplo n.º 14
0
    def get_share_link_info(self, unique_name):
        """
        获取分享链接的信息

        :param unique_name: 分享链接标识符
        :return:
        """
        assert isinstance(unique_name, str)
        url = UrlBuilder.get_share_link_info(unique_name)
        return self.get(url)
Exemplo n.º 15
0
    def get_folder_collaborations(self, folder_id):
        """
        获取文件夹协作信息

        :param folder_id: 文件夹ID
        :return:
        """
        assert isinstance(folder_id, int)
        url = UrlBuilder.get_collaborations(folder_id)
        return self.get(url)
Exemplo n.º 16
0
 def __init__(self, locale=None, request_session=None, request_id=None):
     assert YfySystemInfo.get_client_id() is not None
     assert YfySystemInfo.get_client_secret() is not None
     self.client_id = YfySystemInfo.get_client_id()
     self.client_secret = YfySystemInfo.get_client_secret()
     self.locale = locale
     self.request_id = request_id
     if request_session is None:
         self.requests_session = pinned_session()
     else:
         self.requests_session = request_session
     self._host = UrlBuilder.get_oauth_host()
Exemplo n.º 17
0
    def update_info(self, file_id, file_name, description=None):
        """
        更新文件信息

        :param file_id: 文件id
        :param file_name: 文件名
        :param description: 文件说明
        :return: 文件信息
        """
        assert isinstance(file_id, int)
        url = UrlBuilder.update_file_info(file_id)
        pay_load = {"name": file_name, "description": None}
        return self.post(url, request_json_arg=pay_load)
Exemplo n.º 18
0
    def move_folder(self, folder_id, target_parent_id):
        """
        移动文件夹

        :param folder_id: 文件夹ID
        :param target_parent_id: 目标父文件夹id
        :return:
        """
        assert isinstance(folder_id, int)
        assert isinstance(target_parent_id, int)
        url = UrlBuilder.move_folder(folder_id)
        pay_load = {"target_folder_id": target_parent_id}
        return self.post(url, request_json_arg=pay_load)
Exemplo n.º 19
0
    def create_folder(self, name, parent_id):
        """
        创建文件夹

        :param name: 文件夹名
        :param parent_id: 父文件夹id
        :return:
        """
        assert isinstance(name, str)
        assert isinstance(parent_id, int)
        url = UrlBuilder.create_folder()
        pay_load = {"name": name, "parent_id": parent_id}
        return self.post(url, request_json_arg=pay_load)
Exemplo n.º 20
0
    def update_folder(self, folder_id, name):
        """
        更新文件夹

        :param folder_id: 文件夹ID
        :param name: 文件夹名
        :return:
        """
        assert isinstance(folder_id, int)
        assert isinstance(name, str)
        url = UrlBuilder.update_folder(folder_id)
        pay_load = {"name": name}
        return self.post(url, request_json_arg=pay_load)
Exemplo n.º 21
0
    def get_upload_new_file_url(self, file_path, parent_id):
        """
        获取上传新文件的上传链接

        :param file_path: 文件上传的本地路径
        :param parent_id: 要上传的目标文件夹的id
        :return: 上传url
        """
        _, name = os.path.split(file_path)
        pre_sign_url = UrlBuilder.upload_new_file_pre_sign()
        pay_load = {"parent_id": parent_id, "name": name, "upload_type": "api"}
        result = self.post(pre_sign_url, request_json_arg=pay_load)
        return result["presign_url"]
Exemplo n.º 22
0
    def create_item_share_link(self,
                               type,
                               item_id,
                               access,
                               due_time,
                               disable_download=None,
                               password_protected=None,
                               password=None):
        """
        创建分享链接

        :param (int) item_id: 文件或者文件夹的id
        :param (string) access: 权限范围, 必须为ShareLinkAccess.Public 或者ShareLinkAccess.Company
        :param (string) due_time: 到期时间, 格式必须为: "2017-03-20"
        :param (boolean) disable_download: 是否不允许下载(默认false)
        :param (boolean) password_protected: 是否有密码(默认false)
        :param (string) password: 密码
        :return: 分享链接信息, 例如:

                {
                  "unique_name": "asfsdgdrftyhgfjhgj",
                  "share_link": "https://www.fangcloud.net/share/asfsdgdrftyhgfjhgj",
                  "access": "public",
                  "password_protected": false,
                  "due_time": "2017-03-20",
                  "disable_download": false
                }

        """
        assert isinstance(item_id, int)
        assert access in [ShareLinkAccess.Public, ShareLinkAccess.Company]
        url = UrlBuilder.create_share_link()
        pay_load = {"access": access, "due_time": due_time}
        if type == "file":
            pay_load["file_id"] = item_id
        elif type == "folder":
            pay_load["folder_id"] = item_id
        else:
            raise AssertionError

        if disable_download is not None:
            assert isinstance(disable_download, bool)
            pay_load["disable_download"] = disable_download
        if password_protected is not None and password is not None:
            assert isinstance(password_protected, bool)
            assert isinstance(password, str)
            pay_load["password_protected"] = password_protected
            pay_load["password"] = password
        return self.post(url, request_json_arg=pay_load)
Exemplo n.º 23
0
    def search_user(self, query_words, page_id):
        """
        本企业内的用户搜索

        :param query_words: 搜索关键字
        :param page_id: 页码
        :return: 用户列表
        """
        assert isinstance(query_words, str)
        assert isinstance(page_id, int)
        url = UrlBuilder.search_user()
        query = {
            "query_words": query_words,
            "page_id": page_id
        }
        return self.get(url, params=query)
Exemplo n.º 24
0
    def get_upload_new_version_url(self, file_id, file_path, remark=None):
        """
        获取上传新版本文件的上传链接

        :param file_id: 文件上传的本地路径
        :param file_path: 文件上传的本地路径
        :param remark: 上传新版本的备注
        :return: 上传url
        """
        _, name = os.path.split(file_path)
        new_version_pre_sign_url = UrlBuilder.upload_new_version_pre_sign(
            file_id)
        pay_load = {"name": name, "upload_type": "api"}
        if remark is not None:
            pay_load["remark"] = remark
        result = self.post(new_version_pre_sign_url, request_json_arg=pay_load)
        return result["presign_url"]
Exemplo n.º 25
0
    def get_share_links(self, folder_id, page_id=None, owner_id=None):
        """
        获取文件夹的分享链接

        :param folder_id: 文件夹ID
        :param page_id: 页码 (Optional)
        :param owner_id: 分享链接创建者id (Optional)
        :return:
        """
        assert isinstance(folder_id, int)
        url = UrlBuilder.get_folder_share_links(folder_id)
        query = dict()
        if page_id is not None:
            query["page_id"] = page_id
        if owner_id is not None:
            query["owner_id"] = owner_id
        return self.get(url, params=query)
Exemplo n.º 26
0
    def copy_file(self, file_id, target_folder_id, check_conflict=True):
        """
        拷贝文件

        :param file_id: 文件id
        :param target_folder_id: 目标文件夹的id
        :param check_conflict: 是否检查冲突, 如果检查冲突, 则云端有同名文件时, 会报错, 否则将文件自动重命名
        :return:
        """
        assert isinstance(file_id, int)
        assert isinstance(target_folder_id, int)
        assert isinstance(check_conflict, bool)
        url = UrlBuilder.copy_file(file_id)
        pay_load = {
            "target_folder_id": target_folder_id,
            "is_check_conflict": check_conflict
        }
        return self.post(url, request_json_arg=pay_load)
Exemplo n.º 27
0
 def update_share_link_info(self,
                            unique_name,
                            access,
                            due_time,
                            disable_download=None,
                            password_protected=None,
                            password=None):
     assert isinstance(unique_name, str)
     assert access in [ShareLinkAccess.Public, ShareLinkAccess.Company]
     url = UrlBuilder.update_share_link_info(unique_name)
     pay_load = {"access": access, "due_time": due_time}
     if disable_download is not None:
         assert isinstance(disable_download, bool)
         pay_load["disable_download"] = disable_download
     if password_protected is not None and password is not None:
         assert isinstance(password_protected, bool)
         assert isinstance(password, str)
         pay_load["password_protected"] = password_protected
         pay_load["password"] = password
     return self.post(url, request_json_arg=pay_load)
Exemplo n.º 28
0
 def restore_all(self, item_type=ItemType.All):
     url = UrlBuilder.restore_trash()
     query = {"type": item_type}
     return self.post(url, params=query)
Exemplo n.º 29
0
 def clear(self, item_type=ItemType.All):
     url = UrlBuilder.clear_trash()
     query = {"type": item_type}
     return self.post(url, params=query)
 def delete_collaboration(self, collaboration_id):
     assert isinstance(collaboration_id, int)
     url = UrlBuilder.delete_collaboration(collaboration_id)
     return self.post(url)