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)
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)
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)
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)
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)
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)
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)
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)
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"]
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)
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)
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()
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)
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)
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)
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)
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"]
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)
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)
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"]
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)
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)
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)
def restore_all(self, item_type=ItemType.All): url = UrlBuilder.restore_trash() query = {"type": item_type} return self.post(url, params=query)
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)