vs_plg.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # vs_plg.py
  2. from abc import ABC, abstractmethod
  3. from vs_types import VSPlgConfig, VSQueryResult, VSBookResult # type: ignore
  4. # 错误类型模拟,Python中通常直接抛异常
  5. class VSError:
  6. def __init__(self, code: int, message: str):
  7. self.error_code = code
  8. self.error_message = message
  9. def __str__(self):
  10. return f"Error {self.error_code}: {self.error_message}"
  11. # ================== 接口类 ==================
  12. class IVSPlg(ABC):
  13. """
  14. @brief 签证 API 接口类
  15. 该接口定义了签证系统的基本操作,包括配置、会话管理、查询、预订、
  16. 健康检查以及错误处理等。所有具体的签证 API 实现都需要继承该接口。
  17. """
  18. @abstractmethod
  19. def set_config(self, config: VSPlgConfig):
  20. """
  21. @brief 设置 API 的配置信息
  22. @param config 签证 API 配置对象
  23. """
  24. pass
  25. # set_log_callback 在Python中通常通过配置logging模块或注入logger实例实现
  26. # 这里为了简化,不显式提供,直接使用全局logging
  27. @abstractmethod
  28. def create_session(self) -> bool:
  29. """
  30. @brief 创建一个新的会话
  31. @return true 表示会话创建成功,false 表示失败
  32. """
  33. pass
  34. @abstractmethod
  35. def query(self) -> VSQueryResult:
  36. """
  37. @brief 查询可用的签证预约信息
  38. @return VSQueryResult 查询结果
  39. """
  40. pass
  41. @abstractmethod
  42. def book(self, slot_info: VSQueryResult) -> VSBookResult:
  43. """
  44. @brief 进行预约操作
  45. @param slot_info 查询得到的可用时段信息
  46. @return VSBookResult 预约结果
  47. """
  48. pass
  49. @abstractmethod
  50. def get_group_id(self) -> str:
  51. """
  52. @brief 获取当前 API 实例所属的分组 ID
  53. @return 分组 ID 字符串
  54. """
  55. pass
  56. @abstractmethod
  57. def health_check(self) -> bool:
  58. """
  59. @brief 健康检查,用于检测 API 服务是否正常
  60. @return true 表示健康状态良好,false 表示存在问题
  61. """
  62. pass
  63. @abstractmethod
  64. def get_last_error(self) -> VSError:
  65. """
  66. @brief 获取最近一次操作的错误信息
  67. @return 错误对象(VSError)
  68. """
  69. pass
  70. # Python中不需要显式地C接口导出,动态加载模块通常通过importlib或直接import完成
  71. # CreatePlg 函数逻辑将在 VSPlgFactory 中实现