exception.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. from typing import Any
  2. from fastapi import HTTPException
  3. class BaseHTTPException(HTTPException):
  4. """
  5. 基础异常
  6. """
  7. type: str = None
  8. param: str = None
  9. def __init__(
  10. self,
  11. status_code: int,
  12. error_code: str,
  13. message: str = None,
  14. type: str = None,
  15. param: str = None,
  16. detail: Any = None,
  17. ):
  18. self.status_code = status_code
  19. self.error_code = error_code
  20. self.message = message
  21. self.type = type
  22. self.param = param
  23. super().__init__(status_code, detail)
  24. def __str__(self) -> str:
  25. return f"status_code={self.status_code} error_code={self.error_code} message={self.message}"
  26. class BadRequestError(BaseHTTPException):
  27. """
  28. 请求参数异常
  29. """
  30. def __init__(self, message: str, error_code: str = "bad_request"):
  31. self.status_code = 400
  32. self.error_code = error_code
  33. self.message = message
  34. self.type = "invalid_request_error"
  35. class ValidateFailedError(BaseHTTPException):
  36. """
  37. 校验失败
  38. """
  39. def __init__(self, message: str = "Validation failed", error_code: str = "validation_failed"):
  40. self.status_code = 422
  41. self.error_code = error_code
  42. self.message = message
  43. self.type = error_code
  44. class AuthenticationError(BaseHTTPException):
  45. """
  46. 未认证
  47. """
  48. def __init__(self, message: str = "Unauthorized", error_code: str = "unauthorized"):
  49. self.status_code = 401
  50. self.error_code = error_code
  51. self.message = message
  52. class AuthorizationError(BaseHTTPException):
  53. """
  54. 未授权
  55. """
  56. def __init__(self, message: str = "Forbidden", error_code: str = "forbidden"):
  57. self.status_code = 403
  58. self.error_code = error_code
  59. self.message = message
  60. class ResourceNotFoundError(BaseHTTPException):
  61. """
  62. 资源不存在
  63. """
  64. def __init__(self, message: str = "Resource not found", error_code: str = "resource_not_found"):
  65. self.status_code = 404
  66. self.error_code = error_code
  67. self.message = message
  68. self.type = "not_found_error"
  69. class InternalServerError(BaseHTTPException):
  70. """
  71. 服务器内部异常
  72. """
  73. def __init__(self, message: str = "Internal Server Error", error_code: str = "internal_server_error"):
  74. self.status_code = 500
  75. self.message = message
  76. self.error_code = error_code
  77. self.type = error_code
  78. class ServerError(BaseException):
  79. """
  80. 服务端异常
  81. """
  82. def __init__(self, message: str):
  83. self.message = message