vs_plg.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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, user_inputs) -> VSBookResult:
  43. """
  44. @brief 进行预约操作
  45. @param slot_info 查询得到的可用时段信息
  46. @param user_inputs 用户输入的预约信息
  47. @return VSBookResult 预约结果
  48. """
  49. pass
  50. @abstractmethod
  51. def get_group_id(self) -> str:
  52. """
  53. @brief 获取当前 API 实例所属的分组 ID
  54. @return 分组 ID 字符串
  55. """
  56. pass
  57. @abstractmethod
  58. def health_check(self) -> bool:
  59. """
  60. @brief 健康检查,用于检测 API 服务是否正常
  61. @return true 表示健康状态良好,false 表示存在问题
  62. """
  63. pass
  64. @abstractmethod
  65. def get_last_error(self) -> VSError:
  66. """
  67. @brief 获取最近一次操作的错误信息
  68. @return 错误对象(VSError)
  69. """
  70. pass
  71. # Python中不需要显式地C接口导出,动态加载模块通常通过importlib或直接import完成
  72. # CreatePlg 函数逻辑将在 VSPlgFactory 中实现