smoke_test.py 5.6 KB

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