ad-password-self-service/utils/feishu/api_drive_file.py

110 lines
4.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# coding: utf-8
from __future__ import absolute_import, division, print_function, unicode_literals
from typing import TYPE_CHECKING
from utils.feishu.dt_drive import DriveCopyFile, DriveCreateFile, DriveDeleteFile, DriveFileType
from utils.feishu.dt_help import make_datatype
from utils.feishu.exception import LarkInvalidArguments
from utils.feishu.helper import converter_enum
if TYPE_CHECKING:
from utils.feishu.api import OpenLark
class APIDriveFileMixin(object):
def create_drive_file(self, user_access_token, folder_token, title, file_type):
"""创建云空间文件
:type self: OpenLark
:param user_access_token: user_access_token
:type user_access_token: str
:param folder_token: 文件夹的 token
:type folder_token: str
:param title: 文档标题
:type title: str
:param file_type: 文档类型,可选值为 doc 和 sheet
:type file_type: DriveFileType
:return: 文件夹元信息
:rtype: DriveCreateFile
该接口用于根据 folder_token 创建 Docs或 Sheets 。
https://open.feishu.cn/document/ukTMukTMukTM/uQTNzUjL0UzM14CN1MTN
"""
url = self._gen_request_url('/open-apis/drive/explorer/v2/file/{}'.format(folder_token))
body = {
'title': title,
'type': converter_enum(file_type, ranges=[DriveFileType.doc, DriveFileType.sheet]),
}
res = self._post(url, body=body, auth_token=user_access_token)
return make_datatype(DriveCreateFile, res['data'])
def delete_drive_file(self, user_access_token, file_token, file_type):
"""删除云空间文件
:type self: OpenLark
:param user_access_token: user_access_token
:type user_access_token: str
:param file_token: 文件的 token
:type file_token: str
:param file_type: 文档类型,可选值为 doc 和 sheet
:type file_type: DriveFileType
:return: 文件夹元信息
:rtype: DriveDeleteFile
本文档包含两个接口,分别用于删除 Doc 和 Sheet对应的文档类型请调用对应的接口
文档只能被文档所有者删除,文档被删除后将会放到回收站里
https://open.feishu.cn/document/ukTMukTMukTM/uATM2UjLwEjN14CMxYTN
"""
if converter_enum(file_type) == 'doc':
url = self._gen_request_url('/open-apis/drive/explorer/v2/file/docs/{}'.format(file_token))
elif converter_enum(file_type) == 'sheet':
url = self._gen_request_url('/open-apis/drive/explorer/v2/file/spreadsheets/{}'.format(file_token))
else:
raise LarkInvalidArguments(msg='delete file type should be doc or sheet')
res = self._delete(url, auth_token=user_access_token)
return make_datatype(DriveDeleteFile, res['data'])
def copy_drive_file(self, user_access_token, file_token, file_type, dst_folder_token, dst_title,
permission_needed=False, comment_needed=False):
"""复制云空间文件
:type self: OpenLark
:param user_access_token: user_access_token
:type user_access_token: str
:param file_token: 文件的 token
:type file_token: str
:param file_type: 文档类型,可选值为 doc 和 sheet
:type file_type: DriveFileType
:param dst_folder_token目标文件夹 token
:type dst_folder_token: str
:param dst_title: 目标文档标题
:type dst_title: str
:param permission_needed: 同时复制权限
:type permission_needed: bool
:param comment_needed: 同时复制评论
:type comment_needed: bool
:return: 复制文件的返回值
:rtype: DriveCopyFile
该接口用于根据 file_token 复制 docs 或 sheets 。
https://open.feishu.cn/document/ukTMukTMukTM/uYTNzUjL2UzM14iN1MTN
"""
url = self._gen_request_url('/open-apis/drive/explorer/v2/file/copy/files/{}'.format(file_token))
body = {
'type': converter_enum(file_type),
'dstFolderToken': dst_folder_token,
'dstName': dst_title,
'permissionNeeded': permission_needed,
'CommentNeeded': comment_needed
}
res = self._post(url, body=body, auth_token=user_access_token)
return make_datatype(DriveCopyFile, res['data'])