smoke_test.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. from __future__ import annotations
  2. import argparse
  3. import json
  4. from typing import Any
  5. from instrument_config_mcp.config_api import (
  6. list_device_types,
  7. list_locations,
  8. list_meter_types,
  9. list_system_tree,
  10. list_systems,
  11. search_devices,
  12. search_meters,
  13. )
  14. def _parse_bool(raw: str) -> bool:
  15. text = str(raw).strip().lower()
  16. if text in {"1", "true", "yes", "y", "on"}:
  17. return True
  18. if text in {"0", "false", "no", "n", "off"}:
  19. return False
  20. raise argparse.ArgumentTypeError(f"invalid boolean value: {raw}")
  21. def _print(payload: Any) -> None:
  22. print(json.dumps(payload, ensure_ascii=False, indent=2))
  23. def build_parser() -> argparse.ArgumentParser:
  24. parser = argparse.ArgumentParser(description="Smoke test for instrument config MCP upstream APIs")
  25. subparsers = parser.add_subparsers(dest="command", required=True)
  26. p = subparsers.add_parser("list-locations")
  27. p.add_argument("--project-key", required=True)
  28. p.add_argument("--keyword", default="")
  29. p.add_argument("--page-size", type=int, default=100)
  30. p.add_argument("--page-num", type=int, default=1)
  31. p = subparsers.add_parser("list-system-tree")
  32. p.add_argument("--project-key", required=True)
  33. p = subparsers.add_parser("list-systems")
  34. p.add_argument("--project-key", required=True)
  35. p.add_argument("--page-size", type=int, default=100)
  36. p.add_argument("--page-num", type=int, default=1)
  37. p.add_argument("--system-type-id", type=int, default=0)
  38. p.add_argument("--show-below", type=_parse_bool, default=True)
  39. p = subparsers.add_parser("list-device-types")
  40. p.add_argument("--project-key", required=True)
  41. p = subparsers.add_parser("list-meter-types")
  42. p.add_argument("--project-key", required=True)
  43. p = subparsers.add_parser("search-devices")
  44. p.add_argument("--project-key", required=True)
  45. p.add_argument("--page-size", type=int, default=100)
  46. p.add_argument("--page-num", type=int, default=1)
  47. p.add_argument("--keyword", default="")
  48. p.add_argument("--location-id", type=int, default=0)
  49. p.add_argument("--show-below", type=_parse_bool, default=True)
  50. p.add_argument("--system-ids", type=int, nargs="*", default=[])
  51. p.add_argument("--device-type-ids", type=int, nargs="*", default=[])
  52. p = subparsers.add_parser("search-meters")
  53. p.add_argument("--project-key", required=True)
  54. p.add_argument("--page-size", type=int, default=100)
  55. p.add_argument("--page-num", type=int, default=1)
  56. p.add_argument("--keyword", default="")
  57. p.add_argument("--location-id", type=int, default=0)
  58. p.add_argument("--show-below", type=_parse_bool, default=True)
  59. p.add_argument("--meter-type-id", type=int, default=0)
  60. p.add_argument("--measurement-location-ids", type=int, nargs="*", default=[])
  61. p.add_argument("--measurement-system-ids", type=int, nargs="*", default=[])
  62. p.add_argument("--measurement-device-type-ids", type=int, nargs="*", default=[])
  63. p.add_argument("--status", type=int)
  64. return parser
  65. def main() -> None:
  66. parser = build_parser()
  67. args = parser.parse_args()
  68. if args.command == "list-locations":
  69. _print(list_locations(args.project_key, keyword=args.keyword, page_size=args.page_size, page_num=args.page_num))
  70. return
  71. if args.command == "list-system-tree":
  72. _print(list_system_tree(args.project_key))
  73. return
  74. if args.command == "list-systems":
  75. _print(
  76. list_systems(
  77. args.project_key,
  78. page_size=args.page_size,
  79. page_num=args.page_num,
  80. system_type_id=args.system_type_id,
  81. show_below=args.show_below,
  82. )
  83. )
  84. return
  85. if args.command == "list-device-types":
  86. _print(list_device_types(args.project_key))
  87. return
  88. if args.command == "list-meter-types":
  89. _print(list_meter_types(args.project_key))
  90. return
  91. if args.command == "search-devices":
  92. _print(
  93. search_devices(
  94. args.project_key,
  95. page_size=args.page_size,
  96. page_num=args.page_num,
  97. keyword=args.keyword,
  98. location_id=args.location_id,
  99. show_below=args.show_below,
  100. system_ids=args.system_ids,
  101. device_type_ids=args.device_type_ids,
  102. )
  103. )
  104. return
  105. if args.command == "search-meters":
  106. _print(
  107. search_meters(
  108. args.project_key,
  109. page_size=args.page_size,
  110. page_num=args.page_num,
  111. keyword=args.keyword,
  112. location_id=args.location_id,
  113. show_below=args.show_below,
  114. meter_type_id=args.meter_type_id,
  115. measurement_location_ids=args.measurement_location_ids,
  116. measurement_system_ids=args.measurement_system_ids,
  117. measurement_device_type_ids=args.measurement_device_type_ids,
  118. status=args.status,
  119. )
  120. )
  121. return
  122. raise ValueError(f"unsupported command: {args.command}")
  123. if __name__ == "__main__":
  124. main()