| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- """DMS业务异常。"""
- from __future__ import annotations
- from typing import Any
- class DmsError(Exception):
- code = "INTERNAL_ERROR"
- status_code = 500
- default_message = "服务器内部错误"
- def __init__(
- self,
- message: str | None = None,
- *,
- details: Any = None,
- code: str | None = None,
- ) -> None:
- super().__init__(message or self.default_message)
- self.message = message or self.default_message
- self.details = details
- self.code = code or self.code
- class InvalidArgumentError(DmsError):
- code = "INVALID_ARGUMENT"
- status_code = 400
- default_message = "请求参数错误"
- class AuthenticationError(DmsError):
- code = "TOKEN_INVALID"
- status_code = 401
- default_message = "未认证或登录凭证无效"
- class InvalidCredentialsError(AuthenticationError):
- code = "INVALID_CREDENTIALS"
- default_message = "用户名或密码错误"
- class TokenExpiredError(AuthenticationError):
- code = "TOKEN_EXPIRED"
- default_message = "登录凭证已过期"
- class UserDisabledError(AuthenticationError):
- code = "USER_DISABLED"
- default_message = "用户已被禁用"
- class AuthVersionMismatchError(AuthenticationError):
- code = "AUTH_VERSION_MISMATCH"
- default_message = "登录状态已失效,请重新登录"
- class ForbiddenError(DmsError):
- code = "FORBIDDEN"
- status_code = 403
- default_message = "无权限执行此操作"
- class SecurityLevelForbiddenError(ForbiddenError):
- code = "SECURITY_LEVEL_FORBIDDEN"
- default_message = "用户密级不足,无法查看该文档"
- class DocumentViewForbiddenError(ForbiddenError):
- code = "DOCUMENT_VIEW_FORBIDDEN"
- default_message = "无权查看该文档"
- class DocumentDownloadForbiddenError(ForbiddenError):
- code = "DOCUMENT_DOWNLOAD_FORBIDDEN"
- default_message = "无权下载该文档"
- class ResourceNotFoundError(DmsError):
- code = "RESOURCE_NOT_FOUND"
- status_code = 404
- default_message = "请求的资源不存在"
- class ConflictError(DmsError):
- code = "DATA_VERSION_CONFLICT"
- status_code = 409
- default_message = "数据冲突"
- class CategoryInUseError(ConflictError):
- code = "CATEGORY_IN_USE"
- default_message = "分类仍被子分类或方案文档占用"
- class CategoryNotLeafError(ConflictError):
- code = "CATEGORY_NOT_LEAF"
- default_message = "只有有效叶子分类可以直接存放主案"
- class MainPlanNotFoundError(ResourceNotFoundError):
- code = "MAIN_PLAN_NOT_FOUND"
- default_message = "主案不存在"
- class FileNotFoundError(ResourceNotFoundError):
- code = "FILE_NOT_FOUND"
- default_message = "文档文件不存在"
- class PreviewUnavailableError(DmsError):
- code = "PREVIEW_UNAVAILABLE"
- status_code = 415
- default_message = "当前文件类型不支持在线预览"
- class BatchManifestMismatchError(InvalidArgumentError):
- code = "BATCH_MANIFEST_MISMATCH"
- default_message = "批量文件数量与元数据数量不一致"
- class MainPlanHasChildrenError(ConflictError):
- code = "MAIN_PLAN_HAS_CHILDREN"
- default_message = "主案仍存在有效子方案"
- class DocumentNameConflictError(ConflictError):
- code = "DOCUMENT_NAME_CONFLICT"
- default_message = "同一范围内已存在同名方案"
- class AttachmentInUseError(ConflictError):
- code = "ATTACHMENT_IN_USE"
- default_message = "共享附件仍被主案挂载"
- class AttachmentHasNoAclError(InvalidArgumentError):
- code = "ATTACHMENT_HAS_NO_ACL"
- default_message = "共享附件不配置访问权限"
- class SubPlanPermissionInheritedError(ConflictError):
- code = "SUB_PLAN_PERMISSION_INHERITED"
- default_message = "子方案动态继承主案权限,不能独立配置"
- class DuplicatePermissionSubjectError(InvalidArgumentError):
- code = "DUPLICATE_PERMISSION_SUBJECT"
- default_message = "权限主体不能重复"
- class UnsupportedFileTypeError(DmsError):
- code = "UNSUPPORTED_FILE_TYPE"
- status_code = 415
- default_message = "不支持的文件类型"
- class PayloadTooLargeError(DmsError):
- code = "PAYLOAD_TOO_LARGE"
- status_code = 413
- default_message = "请求内容过大"
- class InternalError(DmsError):
- code = "INTERNAL_ERROR"
- status_code = 500
- default_message = "服务器内部错误"
- class DocumentNotDeletedError(ConflictError):
- code = "DOCUMENT_NOT_DELETED"
- default_message = "文档当前不在回收站中"
- class FileIntegrityMismatchError(ConflictError):
- code = "FILE_INTEGRITY_MISMATCH"
- default_message = "文档文件完整性校验失败"
- class FilePathInvalidError(InternalError):
- code = "FILE_PATH_INVALID"
- default_message = "文档存储路径异常"
- class RestoreFileChangedError(ConflictError):
- code = "RESTORE_FILE_CHANGED"
- default_message = "校验期间文件发生变化"
- class RestoreCategoryInvalidError(ConflictError):
- code = "RESTORE_CATEGORY_INVALID"
- default_message = "原方案分类无效,无法恢复"
- class RestoreParentInvalidError(ConflictError):
- code = "RESTORE_PARENT_INVALID"
- default_message = "原所属主案无效,无法恢复"
- class RestorePermissionInvalidError(ConflictError):
- code = "RESTORE_PERMISSION_INVALID"
- default_message = "恢复后无法形成有效权限配置"
- class RestoreRelationConflictError(ConflictError):
- code = "RESTORE_RELATION_CONFLICT"
- default_message = "历史权限或挂载关系与当前有效关系冲突"
|