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

808 lines
22 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 six import PY2
if PY2:
def implements_to_string(cls):
cls.__unicode__ = cls.__str__
cls.__str__ = lambda x: x.__unicode__().encode('utf-8')
return cls
else:
def implements_to_string(x):
return x
@implements_to_string
class OpenLarkException(Exception):
def __init__(self, *args, **kwargs):
"""基本 Exception
"""
self.code = kwargs.pop('code', None) or getattr(self, 'code', None) or 0
self.msg = kwargs.pop('msg', None) or getattr(self, 'msg', None)
self.url = kwargs.pop('url', None) or getattr(self, 'url', None)
def __str__(self):
if PY2:
if self.url:
return u'<{} code={} msg="{}" url="{}">'.format(self.__class__.__name__, self.code, self.msg, self.url)
else:
return u'<{} code={} msg="{}">'.format(self.__class__.__name__, self.code, self.msg)
else:
if self.url:
return '<{} code={} msg="{}" url="{}">'.format(self.__class__.__name__, self.code, self.msg, self.url)
else:
return '<{} code={} msg="{}">'.format(self.__class__.__name__, self.code, self.msg)
# --------- OpenLark SDK 定义的参数错误
class LarkInvalidArguments(OpenLarkException):
code = 999901
msg = 'feishu invalid arguments'
class LarkInvalidCallback(OpenLarkException):
code = 999902
msg = 'feishu callback error'
class LarkGetAppTicketFail(OpenLarkException):
code = 999903
msg = 'get app_ticket fail'
class LarkUnknownError(OpenLarkException):
code = 999904
msg = 'unknown error'
# --------- 机器人和服务端异常
class LarkSendMessageFailException(OpenLarkException):
code = 10002
msg = '发送消息失败'
class LarkRequestParamsInvalidException(OpenLarkException):
code = 10003
msg = '请求参数不合法'
class LarkGetUserInfoFailOrUserIDNotExistException(OpenLarkException):
code = 10004
msg = '获取用户信息失败或者用户 ID 不存在'
class LarkConflictAppIDException(OpenLarkException):
code = 10005
msg = '生成 token 的 app_id 和相关 chat、open_id 的 app_id 不一致'
class LarkGetOpenChatIDFailException(OpenLarkException):
code = 10009
msg = '获取 open_chat_id 失败'
class LarkForbiddenSendMessageException(OpenLarkException):
code = 10010
msg = '禁止发送消息,请检查 scope 权限,机器人可见性范围'
class LarkGetAppAccessTokenFailException(OpenLarkException):
code = 10012
msg = '获取 app access token 失败'
class LarkGetTenantAccessTokenFailException(OpenLarkException):
code = 10013 # 10014
msg = '获取 tenant access token 失败'
class LarkWrongAppSecretException(OpenLarkException):
code = 10015
msg = 'app_secret 不正确'
class LarkSendAppTicketFailException(OpenLarkException):
code = 10016
msg = '发送 app_ticket 失败'
class LarkUnsupportedUrgentTypeException(OpenLarkException):
code = 10019
msg = '加急类型不支持'
class LarkWrongMessageIDException(OpenLarkException):
code = 10020
msg = '消息 ID 不正确'
class LarkForbiddenUrgentException(OpenLarkException):
code = 10023
msg = '没有加急 scope 权限'
class LarkInvalidOpenChatIDException(OpenLarkException):
code = 10029
msg = 'open_chat_id 不合法'
class LarkBotNotInChatException(OpenLarkException):
code = 10030
msg = '机器人不在群里'
class LarkAllOpenIDInvalidException(OpenLarkException):
code = 10032
msg = '所有 open_id 都不合法'
class LarkUnsupportedCrossTenantException(OpenLarkException):
code = 10034
msg = '不支持跨企业操作'
class LarkGetMessageIDFailException(OpenLarkException):
code = 10037
msg = '获取 message_id 失败'
class LarkGetSSOAccessTokenFailException(OpenLarkException):
code = 11000
msg = '获取 sso_access_token 失败'
class LarkGetCheckSecurityTokenFailException(OpenLarkException):
code = 11001
msg = '获取 CheckSecurityToken 失败'
class LarkCheckOpenChatIDFailException(OpenLarkException):
code = 11100
msg = 'open_chat_id 不合法或者 chat 不存在'
class LarkOpenIDNotExistException(OpenLarkException):
code = 11101
msg = 'open_id 不存在'
class LarkGetOpenIDFailException(OpenLarkException):
code = 11102
msg = '查询用户 open_id 失败'
class LarkOpenDepartmentIDNotExistException(OpenLarkException):
code = 11103
msg = 'open_department_id 不存在'
class LarkGetOpenDepartmentIDFailException(OpenLarkException):
code = 11104
msg = '查询用户 open_department_id 失败'
class LarkEmployeeIDNotExistException(OpenLarkException):
code = 11105
msg = 'user_id 不存在'
class LarkGetEmployeeIDFailException(OpenLarkException):
code = 11106
msg = '查询用户 user_id 失败'
class LarkUpdateChatNameFailException(OpenLarkException):
code = 11200
msg = '更新群名称失败'
class LarkBotNotGroupAdminException(OpenLarkException):
code = 11201 # 11208
msg = '机器人不是群主'
class LarkOnlyChatAdminCanInviteUserException(OpenLarkException):
code = 11202
msg = '只有群主才能拉用户进群'
class LarkForbiddenBotBatchSendMessageToUserException(OpenLarkException):
code = 11203
msg = '机器人没有给用户批量发送权限'
class LarkForbiddenBotBatchSendMessageToDepartmentException(OpenLarkException):
code = 11204
msg = '机器人没有给部门批量发送权限'
class LarkAppHasNoBotException(OpenLarkException):
code = 11205
msg = '应用没有机器人'
class LarkUserCannotGrantToChatAdminException(OpenLarkException):
code = 11206
msg = '用户不在群中不能被设置为群主'
class LarkAppUnavailableException(OpenLarkException):
code = 11207
msg = 'app 不可用'
class LarkAppNotExistException(OpenLarkException):
code = 11209
msg = 'app 不存在'
class LarkAppUsageInfoNotExistException(OpenLarkException):
code = 11210
msg = 'AppUsageInfo 不存在'
class LarkInviteUserToChatInvalidParamsException(OpenLarkException):
code = 11211
msg = '拉人进群参数错误'
class LarkRemoveUserFromChatInvalidParamsException(OpenLarkException):
code = 11212
msg = '踢人出群参数错误'
class LarkUpdateChatInvalidParamsException(OpenLarkException):
code = 11213
msg = '更新群参数错误'
class LarkUploadImageInvalidParamsException(OpenLarkException):
code = 11214
msg = '上传图片参数错误'
class LarkEmptyChatIDException(OpenLarkException):
code = 11215
msg = 'chat_id 为空'
class LarkGetChatIDFailException(OpenLarkException):
code = 11216
msg = '获取chat_id失败'
class LarkInviteBotToChatFailException(OpenLarkException):
code = 11217
msg = '拉机器人进群失败'
class LarkBotInChatFullException(OpenLarkException):
code = 11218
msg = '群机器人已满'
class LarkUnsupportedChatCrossTenantException(OpenLarkException):
code = 11219
msg = '不支持 chat 跨租户'
class LarkForbiddenBotDisbandChatException(OpenLarkException):
code = 11220
msg = '禁止机器人解散群'
class LarkBotForbiddenToGetImageBelongToThemException(OpenLarkException):
code = 11221
msg = '机器人不能获取不属于自己的图片'
class LarkOwnerOfBotIsNotInChatException(OpenLarkException):
code = 11222
msg = '机器人的 Owner 不在群里'
class LarkNotOpenApplicationSendMessagePermissionException(OpenLarkException):
code = 11223
msg = '没有打开应用发消息权限'
class LarkInvalidMessageIDException(OpenLarkException):
code = 11224
msg = 'message_id 参数错误'
class LarkAppIsNotVisibleToUserException(OpenLarkException):
code = 11225
msg = '你的应用对用户不可见'
class LarkInvalidAppIDException(OpenLarkException):
code = 11226
msg = 'app_id 参数不对或者没传'
class LarkImageKeyNotExistException(OpenLarkException):
code = 11227
msg = ' image_key 不存在'
class LarkBotIsNotMessageOwnerException(OpenLarkException):
code = 11234
msg = 'bot非消息owner'
class LarkBanAtALLException(OpenLarkException):
code = 11235
msg = '禁止@所有人'
class LarkUserNotActiveException(OpenLarkException):
code = 11236
msg = '用户已离职'
class LarkChatDisbandedException(OpenLarkException):
code = 11237
msg = '群聊已解散'
class LarkMessageTooOldException(OpenLarkException):
code = 11238
msg = '消息过久,不能撤销'
class LarkNoPermissionToGotException(OpenLarkException):
code = 11239
msg = '无权限获取'
class LarkInvalidTenantAccessTokenException(OpenLarkException):
code = 99991663
msg = 'tenant access token 无效'
class LarkInvalidAppAccessTokenException(OpenLarkException):
code = 99991664
msg = 'app access token 无效'
class LarkInvalidTenantCodeException(OpenLarkException):
code = 99991665
msg = 'tenant code 无效'
class LarkInvalidAppTicketException(OpenLarkException):
code = 99991666
msg = 'app ticket 无效'
class LarkFrequencyLimitException(OpenLarkException):
code = 99991400
msg = '发消息频率超过频控限制目前每个AppID每个接口50/s、1000/min的限制'
class LarkInternalException(OpenLarkException):
code = 20000
msg = '内部异常'
# --------- 审批异常 / 审批错误码
# 40xx 是审批的 v1 接口
class LarkApprovalNotExistException(OpenLarkException):
code = 4002
msg = 'approval not exist'
class LarkApprovalSubscriptionExistException(OpenLarkException):
code = 4007
msg = 'subscription exist'
# 600xxx 是审批的 v3 接口
class LarkApprovalInvalidRequestParamsException(OpenLarkException):
code = 60001
msg = '请求参数错误'
class LarkApprovalApprovalCodeNotFoundException(OpenLarkException):
code = 60002
msg = '审批定义 approval_code 找不到'
class LarkApprovalInstanceCodeNotFoundException(OpenLarkException):
code = 60003
msg = '审批实例 instance_code 找不到'
class LarkApprovalUserNotFoundException(OpenLarkException):
code = 60004
msg = '用户找不到'
class LarkApprovalForbiddenException(OpenLarkException):
code = 60009
msg = '权限不足'
class LarkApprovalTaskIDNotFoundException(OpenLarkException):
code = 60010
msg = '审批任务 task_id 找不到'
class LarkApprovalDepartmentValidFailedException(OpenLarkException):
code = 60005
msg = '部门验证失败'
class LarkApprovalFormValidFailedException(OpenLarkException):
code = 60006
msg = '表单验证失败'
class LarkApprovalNeedPayException(OpenLarkException):
code = 60011
msg = '该审批为付费审批,免费版用户不能发起这个审批'
class LarkApprovalInstanceCodeConflictException(OpenLarkException):
code = 60012
msg = '审批实例 uuid 冲突'
# --------- 审批异常 / 审批错误码
# --------- 云空间
class LarkDriveWrongRequestJsonException(OpenLarkException):
code = 90201
msg = '请求体不是一个 json'
class LarkDriveWrongRangeException(OpenLarkException):
code = 90202
msg = '请求中 range 格式有误'
class LarkDriveFailException(OpenLarkException):
code = 90203
msg = '不是预期内的 fail'
class LarkDriveWrongRequestBodyException(OpenLarkException):
code = 90204
msg = '请求体有误'
class LarkDriveInvalidUsersException(OpenLarkException):
code = 90205
msg = '非法的 user'
class LarkDriveEmptySheetIDException(OpenLarkException):
code = 90206
msg = 'sheet_id 为空'
class LarkDriveEmptySheetTitleException(OpenLarkException):
code = 90207
msg = 'sheet 名称为空'
class LarkDriveSameSheetIDOrTitleException(OpenLarkException):
code = 90208
msg = '请求中有相同的 sheet_id 或 title'
class LarkDriveExistSheetIDException(OpenLarkException):
code = 90209
msg = 'sheet_id 已经存在'
class LarkDriveExistSheetTitleException(OpenLarkException):
code = 90210
msg = 'sheet title 已经存在'
class LarkDriveWrongSheetIDException(OpenLarkException):
code = 90211
msg = '错误的 sheet_id'
class LarkDriveWrongRowOrColException(OpenLarkException):
code = 90212
msg = '非法的行列'
class LarkDrivePermissionFailException(OpenLarkException):
code = 90213
msg = '没有文件的权限 forbidden'
class LarkDriveSpreadSheetNotFoundException(OpenLarkException):
code = 90214
msg = 'sheet 没有找到'
class LarkDriveSheetIDNotFoundException(OpenLarkException):
code = 90215
msg = 'sheet_id 没有找到'
class LarkDriveEmptyValueException(OpenLarkException):
code = 90216
msg = '请求中有空值'
class LarkDriveTooManyRequestException(OpenLarkException):
code = 90217
msg = '请求太频繁'
class LarkDriveTimeoutException(OpenLarkException):
code = 96402
msg = '超时'
class LarkDriveProcessingException(OpenLarkException):
code = 96403
msg = '请求正在处理中'
class LarkDriveLoginRequiredException(OpenLarkException):
code = 91404
msg = '需要登录'
class LarkDriveFailedException(OpenLarkException):
code = 90301 # 91201 / 96401
msg = '失败'
class LarkDriveOutOfLimitException(OpenLarkException):
code = 91206
msg = '超过限制'
class LarkDriveDuplicateException(OpenLarkException):
code = 91207
msg = '重复记录'
class LarkDriveForbiddenException(OpenLarkException):
code = 91002 # 90303 / 91204 / 91403
msg = '没有权限'
class LarkDriveInvalidOperationException(OpenLarkException):
code = 91003
msg = '操作异常'
class LarkDriveUserNoSharePermissionException(OpenLarkException):
code = 91004
msg = '用户没有共享权限'
class LarkDriveParamErrorException(OpenLarkException):
code = 90302 # 91001 / 91202 / 91401
msg = '参数错误'
class LarkDriveMetaDeletedException(OpenLarkException):
code = 90304 # 91205
msg = '文件已删除'
class LarkDriveMetaNotExistException(OpenLarkException):
code = 90305 # 91203 / 91402
msg = '文件不存在'
class LarkDriveReviewNotPassException(OpenLarkException):
code = 90306 # 91208
msg = '评论内容审核不通过'
class LarkDriveInternalErrorException(OpenLarkException):
code = 90399 # 95299 / 96201 / 96202 / 96001 / 95201 / 95201—95209
msg = '内部错误'
# --------- 云空间
# --------- 会议室
class LarkMeetingRoomInvalidPageTokenException(OpenLarkException):
code = 100001
msg = 'page token 格式非法'
class LarkMeetingRoomInvalidFieldSelectionException(OpenLarkException):
code = 100002
msg = 'fields 中存在非法字段名'
class LarkMeetingRoomTimeFormatMustFollowRFC3339StandardException(OpenLarkException):
code = 100003
msg = '时间格式未遵循 RFC3339 标准'
class LarkMeetingRoomInvalidBuildingIDException(OpenLarkException):
code = 100004
msg = 'building ID 非法'
class LarkMeetingRoomInvalidRoomIDException(OpenLarkException):
code = 100005
msg = 'room ID 非法'
class LarkMeetingRoomInternalErrorException(OpenLarkException):
code = 105001
msg = '内部错误'
# --------- 会议室
def gen_exception(code, url, msg=''):
"""生成异常
:type code: int
:type url: str
:type msg: str
:rtype: OpenLarkException
"""
exceptions = {
# 自定义
999901: LarkInvalidArguments,
999902: LarkInvalidCallback,
999903: LarkGetAppTicketFail,
999904: LarkUnknownError,
# 审批
4002: LarkApprovalNotExistException,
4007: LarkApprovalSubscriptionExistException,
60001: LarkApprovalInvalidRequestParamsException,
60002: LarkApprovalApprovalCodeNotFoundException,
60003: LarkApprovalInstanceCodeNotFoundException,
60004: LarkApprovalUserNotFoundException,
60009: LarkApprovalForbiddenException,
60010: LarkApprovalTaskIDNotFoundException,
60005: LarkApprovalDepartmentValidFailedException,
60006: LarkApprovalFormValidFailedException,
60011: LarkApprovalNeedPayException,
60012: LarkApprovalInstanceCodeConflictException,
# 数字超级大的异常,
99991400: LarkFrequencyLimitException,
99991663: LarkInvalidTenantAccessTokenException,
99991664: LarkInvalidAppAccessTokenException,
99991665: LarkInvalidTenantCodeException,
99991666: LarkInvalidAppTicketException,
10002: LarkSendMessageFailException,
10003: LarkRequestParamsInvalidException,
10004: LarkGetUserInfoFailOrUserIDNotExistException,
10005: LarkConflictAppIDException,
10009: LarkGetOpenChatIDFailException,
10010: LarkForbiddenSendMessageException,
10012: LarkGetAppAccessTokenFailException,
10013: LarkGetTenantAccessTokenFailException,
10014: LarkGetTenantAccessTokenFailException,
10015: LarkWrongAppSecretException,
10016: LarkSendAppTicketFailException,
10019: LarkUnsupportedUrgentTypeException,
10020: LarkWrongMessageIDException,
10023: LarkForbiddenUrgentException,
10029: LarkInvalidOpenChatIDException,
10030: LarkBotNotInChatException,
10032: LarkAllOpenIDInvalidException,
10034: LarkUnsupportedCrossTenantException,
10037: LarkGetMessageIDFailException,
11000: LarkGetSSOAccessTokenFailException,
11001: LarkGetCheckSecurityTokenFailException,
11100: LarkCheckOpenChatIDFailException,
11101: LarkOpenIDNotExistException,
11102: LarkGetOpenIDFailException,
11103: LarkOpenDepartmentIDNotExistException,
11104: LarkGetOpenDepartmentIDFailException,
11105: LarkEmployeeIDNotExistException,
11106: LarkGetEmployeeIDFailException,
11200: LarkUpdateChatNameFailException,
11201: LarkBotNotGroupAdminException,
11208: LarkBotNotGroupAdminException,
11202: LarkOnlyChatAdminCanInviteUserException,
11203: LarkForbiddenBotBatchSendMessageToUserException,
11204: LarkForbiddenBotBatchSendMessageToDepartmentException,
11205: LarkAppHasNoBotException,
11206: LarkUserCannotGrantToChatAdminException,
11207: LarkAppUnavailableException,
11209: LarkAppNotExistException,
11210: LarkAppUsageInfoNotExistException,
11211: LarkInviteUserToChatInvalidParamsException,
11212: LarkRemoveUserFromChatInvalidParamsException,
11213: LarkUpdateChatInvalidParamsException,
11214: LarkUploadImageInvalidParamsException,
11215: LarkEmptyChatIDException,
11216: LarkGetChatIDFailException,
11217: LarkInviteBotToChatFailException,
11218: LarkBotInChatFullException,
11219: LarkUnsupportedChatCrossTenantException,
11220: LarkForbiddenBotDisbandChatException,
11221: LarkBotForbiddenToGetImageBelongToThemException,
11222: LarkOwnerOfBotIsNotInChatException,
11223: LarkNotOpenApplicationSendMessagePermissionException,
11224: LarkInvalidMessageIDException,
11225: LarkAppIsNotVisibleToUserException,
11226: LarkInvalidAppIDException,
11227: LarkImageKeyNotExistException,
11234: LarkBotIsNotMessageOwnerException,
11235: LarkBanAtALLException,
11236: LarkUserNotActiveException,
11237: LarkChatDisbandedException,
11238: LarkMessageTooOldException,
11239: LarkNoPermissionToGotException,
# 云空间
90201: LarkDriveWrongRequestJsonException,
90202: LarkDriveWrongRangeException,
90203: LarkDriveFailException,
90204: LarkDriveWrongRequestBodyException,
90205: LarkDriveInvalidUsersException,
90206: LarkDriveEmptySheetIDException,
90207: LarkDriveEmptySheetTitleException,
90208: LarkDriveSameSheetIDOrTitleException,
90209: LarkDriveExistSheetIDException,
90210: LarkDriveExistSheetTitleException,
90211: LarkDriveWrongSheetIDException,
90212: LarkDriveWrongRowOrColException,
90213: LarkDrivePermissionFailException,
90214: LarkDriveSpreadSheetNotFoundException,
90215: LarkDriveSheetIDNotFoundException,
90216: LarkDriveEmptyValueException,
90217: LarkDriveTooManyRequestException,
96402: LarkDriveTimeoutException,
96403: LarkDriveProcessingException,
91404: LarkDriveLoginRequiredException,
91206: LarkDriveOutOfLimitException,
91207: LarkDriveDuplicateException,
91003: LarkDriveInvalidOperationException,
91004: LarkDriveUserNoSharePermissionException,
# 会议室
100001: LarkMeetingRoomInvalidPageTokenException,
100002: LarkMeetingRoomInvalidFieldSelectionException,
100003: LarkMeetingRoomTimeFormatMustFollowRFC3339StandardException,
100004: LarkMeetingRoomInvalidBuildingIDException,
100005: LarkMeetingRoomInvalidRoomIDException,
}
if code in exceptions:
return exceptions[code](code=code, msg=msg, url=url)
if 18000 <= code <= 20000:
return LarkInternalException(code=code, msg=msg, url=url)
if code in [4002, 60002]:
return LarkApprovalNotExistException(code=code, msg=msg, url=url)
if code in [90303, 91002, 91204, 91403]:
return LarkDriveForbiddenException(code=code, msg=msg, url=url)
if code in [90301, 91201, 96401]:
return LarkDriveFailedException(code=code, msg=msg, url=url)
if code in [90302, 91001, 91202, 91401]:
return LarkDriveParamErrorException(code=code, msg=msg, url=url)
if code in [90304, 91205]:
return LarkDriveMetaDeletedException(code=code, msg=msg, url=url)
if code in [90305, 91203, 91402]:
return LarkDriveMetaNotExistException(code=code, msg=msg, url=url)
if code in [90306, 91208]:
return LarkDriveReviewNotPassException(code=code, msg=msg, url=url)
if code in [90399, 95201, 95299, 96201, 96202, 96001] or (code >= 95201 and code <= 95209):
return LarkDriveInternalErrorException(code=code, msg=msg, url=url)
return OpenLarkException(code=code, msg=msg, url=url)