testmcpy 0.2.14__tar.gz → 0.2.16__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. {testmcpy-0.2.14/testmcpy.egg-info → testmcpy-0.2.16}/PKG-INFO +1 -1
  2. {testmcpy-0.2.14 → testmcpy-0.2.16}/pyproject.toml +1 -1
  3. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/cli/commands/run.py +21 -6
  4. {testmcpy-0.2.14 → testmcpy-0.2.16/testmcpy.egg-info}/PKG-INFO +1 -1
  5. {testmcpy-0.2.14 → testmcpy-0.2.16}/LICENSE +0 -0
  6. {testmcpy-0.2.14 → testmcpy-0.2.16}/MANIFEST.in +0 -0
  7. {testmcpy-0.2.14 → testmcpy-0.2.16}/NOTICE +0 -0
  8. {testmcpy-0.2.14 → testmcpy-0.2.16}/README.md +0 -0
  9. {testmcpy-0.2.14 → testmcpy-0.2.16}/setup.cfg +0 -0
  10. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/__init__.py +0 -0
  11. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/auth_debugger.py +0 -0
  12. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/auth_flow_recorder.py +0 -0
  13. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/cli/__init__.py +0 -0
  14. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/cli/app.py +0 -0
  15. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/cli/commands/__init__.py +0 -0
  16. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/cli/commands/mcp.py +0 -0
  17. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/cli/commands/server.py +0 -0
  18. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/cli/commands/tools.py +0 -0
  19. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/cli/commands/tui.py +0 -0
  20. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/config.py +0 -0
  21. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/core/__init__.py +0 -0
  22. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/core/chat_session.py +0 -0
  23. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/core/docs_optimizer.py +0 -0
  24. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/core/mcp_manager.py +0 -0
  25. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/core/tool_comparison.py +0 -0
  26. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/core/tool_discovery.py +0 -0
  27. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/error_handlers.py +0 -0
  28. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/evals/__init__.py +0 -0
  29. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/evals/auth_evaluators.py +0 -0
  30. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/evals/base_evaluators.py +0 -0
  31. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/formatters/__init__.py +0 -0
  32. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/formatters/base.py +0 -0
  33. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/formatters/curl.py +0 -0
  34. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/formatters/graphql.py +0 -0
  35. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/formatters/javascript_client.py +0 -0
  36. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/formatters/json_yaml.py +0 -0
  37. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/formatters/protobuf.py +0 -0
  38. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/formatters/python.py +0 -0
  39. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/formatters/python_client.py +0 -0
  40. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/formatters/thrift.py +0 -0
  41. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/formatters/typescript.py +0 -0
  42. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/formatters/typescript_client.py +0 -0
  43. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/llm_profiles.py +0 -0
  44. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/mcp_profiles.py +0 -0
  45. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/research/claude_sdk_detailed_exploration.py +0 -0
  46. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/research/claude_sdk_poc.py +0 -0
  47. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/research/claude_sdk_working_poc.py +0 -0
  48. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/research/test_ollama_tools.py +0 -0
  49. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/__init__.py +0 -0
  50. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/api.py +0 -0
  51. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/api.py.bak +0 -0
  52. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/helpers/__init__.py +0 -0
  53. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/helpers/mcp_config.py +0 -0
  54. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/models.py +0 -0
  55. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/routers/__init__.py +0 -0
  56. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/routers/auth.py +0 -0
  57. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/routers/generation_logs.py +0 -0
  58. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/routers/llm.py +0 -0
  59. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/routers/mcp_profiles.py +0 -0
  60. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/routers/results.py +0 -0
  61. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/routers/smoke_reports.py +0 -0
  62. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/routers/test_profiles.py +0 -0
  63. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/routers/tests.py +0 -0
  64. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/routers/tools.py +0 -0
  65. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/state.py +0 -0
  66. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/server/websocket.py +0 -0
  67. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/smoke_test.py +0 -0
  68. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/src/__init__.py +0 -0
  69. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/src/llm_integration.py +0 -0
  70. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/src/mcp_client.py +0 -0
  71. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/src/model_registry.py +0 -0
  72. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/src/models.py +0 -0
  73. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/src/runner_tools.py +0 -0
  74. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/src/test_runner.py +0 -0
  75. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/storage.py +0 -0
  76. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/test_profiles.py +0 -0
  77. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/README.md +0 -0
  78. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/dist/assets/index-CaEBvXci.css +0 -0
  79. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/dist/assets/index-mv4agCEg.js +0 -0
  80. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/dist/index.html +0 -0
  81. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/index.html +0 -0
  82. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/package-lock.json +0 -0
  83. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/package.json +0 -0
  84. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/postcss.config.js +0 -0
  85. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/App.jsx +0 -0
  86. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/CompareToolsTab.jsx +0 -0
  87. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/ErrorAlert.jsx +0 -0
  88. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/ErrorBoundary.jsx +0 -0
  89. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/LLMProfileSelector.jsx +0 -0
  90. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/LoadingSpinner.jsx +0 -0
  91. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/MCPProfileSelector.jsx +0 -0
  92. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/OptimizeDocsModal.jsx +0 -0
  93. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/ParameterCard.jsx +0 -0
  94. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/SchemaCodeViewer.jsx +0 -0
  95. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/SkeletonLoader.jsx +0 -0
  96. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/TestGenerationModal.jsx +0 -0
  97. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/TestProfileSelector.jsx +0 -0
  98. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/TestResultPanel.jsx +0 -0
  99. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/TestStatusIndicator.jsx +0 -0
  100. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/ToolComparison.jsx +0 -0
  101. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/ToolDebugModal.jsx +0 -0
  102. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/components/TypeBadge.jsx +0 -0
  103. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/contexts/TestRunContext.jsx +0 -0
  104. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/hooks/useKeyboardShortcuts.js +0 -0
  105. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/hooks/useSafeFetch.js +0 -0
  106. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/index.css +0 -0
  107. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/main.jsx +0 -0
  108. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/pages/AuthDebugger.jsx +0 -0
  109. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/pages/ChatInterface.jsx +0 -0
  110. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/pages/Configuration.jsx +0 -0
  111. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/pages/GenerationHistory.jsx +0 -0
  112. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/pages/LLMProfiles.jsx +0 -0
  113. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/pages/MCPExplorer.jsx +0 -0
  114. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/pages/MCPProfiles.jsx +0 -0
  115. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/pages/ProfilesManager.jsx +0 -0
  116. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/pages/Reports.jsx +0 -0
  117. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/pages/TestManager.jsx +0 -0
  118. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/utils/__tests__/formatConverters.test.js +0 -0
  119. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/src/utils/formatConverters.js +0 -0
  120. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/tailwind.config.js +0 -0
  121. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy/ui/vite.config.js +0 -0
  122. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy.egg-info/SOURCES.txt +0 -0
  123. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy.egg-info/dependency_links.txt +0 -0
  124. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy.egg-info/entry_points.txt +0 -0
  125. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy.egg-info/requires.txt +0 -0
  126. {testmcpy-0.2.14 → testmcpy-0.2.16}/testmcpy.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: testmcpy
3
- Version: 0.2.14
3
+ Version: 0.2.16
4
4
  Summary: A comprehensive testing framework for validating LLM tool calling capabilities with MCP services
5
5
  Author: Amin Ghadersohi
6
6
  License-Expression: Apache-2.0
@@ -90,7 +90,7 @@ testmcpy = [
90
90
 
91
91
  [project]
92
92
  name = "testmcpy"
93
- version = "0.2.14"
93
+ version = "0.2.16"
94
94
  description = "A comprehensive testing framework for validating LLM tool calling capabilities with MCP services"
95
95
  authors = [{name = "Amin Ghadersohi"}]
96
96
  license = "Apache-2.0"
@@ -272,12 +272,27 @@ def run(
272
272
  test_cases.append(TestCase.from_dict(data))
273
273
 
274
274
  elif test_path.is_dir():
275
- for file in test_path.glob("*.yaml"):
276
- with open(file) as f:
277
- data = yaml.safe_load(f)
278
- if "tests" in data:
279
- for test_data in data["tests"]:
280
- test_cases.append(TestCase.from_dict(test_data))
275
+ # Use rglob for recursive search in subdirectories
276
+ # Support both .yaml and .yml extensions, plus .json
277
+ for pattern in ["*.yaml", "*.yml", "*.json"]:
278
+ for file in test_path.rglob(pattern):
279
+ # Skip files in hidden directories (e.g., .results/, .smoke_reports/)
280
+ if any(part.startswith(".") for part in file.relative_to(test_path).parts):
281
+ continue
282
+ with open(file) as f:
283
+ if file.suffix == ".json":
284
+ data = json.load(f)
285
+ else:
286
+ data = yaml.safe_load(f)
287
+ if data is None:
288
+ continue
289
+ # Check if this is a valid test file (has prompt or tests key)
290
+ if "tests" in data:
291
+ for test_data in data["tests"]:
292
+ test_cases.append(TestCase.from_dict(test_data))
293
+ elif "prompt" in data:
294
+ # Handle single test case files
295
+ test_cases.append(TestCase.from_dict(data))
281
296
 
282
297
  console.print(f"\n[bold]Found {len(test_cases)} test case(s)[/bold]")
283
298
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: testmcpy
3
- Version: 0.2.14
3
+ Version: 0.2.16
4
4
  Summary: A comprehensive testing framework for validating LLM tool calling capabilities with MCP services
5
5
  Author: Amin Ghadersohi
6
6
  License-Expression: Apache-2.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes