awslabs.openapi-mcp-server 0.2.4__tar.gz → 0.2.5__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 (124) hide show
  1. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/Dockerfile +2 -2
  2. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/PKG-INFO +1 -1
  3. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/__init__.py +1 -1
  4. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/prompts/generators/operation_prompts.py +11 -0
  5. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/pyproject.toml +1 -1
  6. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_openapi_coverage_89.py +12 -23
  7. awslabs_openapi_mcp_server-0.2.5/uv.lock +2185 -0
  8. awslabs_openapi_mcp_server-0.2.4/uv.lock +0 -1753
  9. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/.coveragerc +0 -0
  10. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/.dockerignore +0 -0
  11. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/.gitignore +0 -0
  12. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/.python-version +0 -0
  13. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/AUTHENTICATION.md +0 -0
  14. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/AWS_BEST_PRACTICES.md +0 -0
  15. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/CHANGELOG.md +0 -0
  16. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/DEPLOYMENT.md +0 -0
  17. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/LICENSE +0 -0
  18. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/NOTICE +0 -0
  19. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/OBSERVABILITY.md +0 -0
  20. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/README.md +0 -0
  21. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/__init__.py +0 -0
  22. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/api/__init__.py +0 -0
  23. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/api/config.py +0 -0
  24. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/auth/__init__.py +0 -0
  25. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/auth/api_key_auth.py +0 -0
  26. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/auth/auth_cache.py +0 -0
  27. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/auth/auth_errors.py +0 -0
  28. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/auth/auth_factory.py +0 -0
  29. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/auth/auth_protocol.py +0 -0
  30. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/auth/auth_provider.py +0 -0
  31. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/auth/base_auth.py +0 -0
  32. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/auth/basic_auth.py +0 -0
  33. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/auth/bearer_auth.py +0 -0
  34. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/auth/cognito_auth.py +0 -0
  35. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/auth/register.py +0 -0
  36. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/patch/__init__.py +0 -0
  37. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/prompts/__init__.py +0 -0
  38. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/prompts/generators/__init__.py +0 -0
  39. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/prompts/generators/workflow_prompts.py +0 -0
  40. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/prompts/models.py +0 -0
  41. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/prompts/prompt_manager.py +0 -0
  42. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/server.py +0 -0
  43. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/utils/__init__.py +0 -0
  44. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/utils/cache_provider.py +0 -0
  45. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/utils/config.py +0 -0
  46. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/utils/error_handler.py +0 -0
  47. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/utils/http_client.py +0 -0
  48. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/utils/metrics_provider.py +0 -0
  49. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/utils/openapi.py +0 -0
  50. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/awslabs/openapi_mcp_server/utils/openapi_validator.py +0 -0
  51. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/docker-healthcheck.sh +0 -0
  52. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/pyrightconfig.json +0 -0
  53. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/README.md +0 -0
  54. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/api/test_config.py +0 -0
  55. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_api_key_auth.py +0 -0
  56. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_auth_cache.py +0 -0
  57. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_auth_errors.py +0 -0
  58. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_auth_factory.py +0 -0
  59. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_auth_factory_caching.py +0 -0
  60. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_auth_factory_coverage.py +0 -0
  61. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_auth_protocol.py +0 -0
  62. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_auth_protocol_additional.py +0 -0
  63. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_auth_protocol_boost.py +0 -0
  64. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_auth_protocol_coverage.py +0 -0
  65. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_auth_protocol_extended.py +0 -0
  66. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_auth_protocol_improved.py +0 -0
  67. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_auth_provider_additional.py +0 -0
  68. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_base_auth.py +0 -0
  69. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_base_auth_coverage.py +0 -0
  70. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_basic_auth.py +0 -0
  71. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_bearer_auth.py +0 -0
  72. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_cognito_auth.py +0 -0
  73. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_cognito_auth_additional_coverage.py +0 -0
  74. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_cognito_auth_boost_coverage.py +0 -0
  75. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_cognito_auth_client_credentials.py +0 -0
  76. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_cognito_auth_coverage_boost.py +0 -0
  77. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_cognito_auth_exceptions.py +0 -0
  78. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_register.py +0 -0
  79. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/auth/test_register_coverage.py +0 -0
  80. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/prompts/standalone/test_operation_prompt.py +0 -0
  81. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/prompts/standalone/test_prompt_arguments.py +0 -0
  82. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/prompts/standalone/test_secure_operation_prompt.py +0 -0
  83. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/prompts/test_mcp_prompt_manager.py +0 -0
  84. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/prompts/test_mcp_prompt_manager_integration.py +0 -0
  85. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/prompts/test_models_dict_method.py +0 -0
  86. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/prompts/test_operation_prompts_extended.py +0 -0
  87. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/prompts/test_prompt_manager_additional.py +0 -0
  88. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/prompts/test_prompt_manager_comprehensive.py +0 -0
  89. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/prompts/test_prompt_manager_coverage.py +0 -0
  90. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/prompts/test_prompt_registration.py +0 -0
  91. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_api_name.py +0 -0
  92. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_cache_coverage_89.py +0 -0
  93. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_client.py +0 -0
  94. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_coverage_boost.py +0 -0
  95. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_init.py +0 -0
  96. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_main.py +0 -0
  97. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_main_extended.py +0 -0
  98. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_server.py +0 -0
  99. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_server_auth_errors.py +0 -0
  100. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_server_coverage_boost.py +0 -0
  101. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_server_coverage_boost_2.py +0 -0
  102. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_server_exception_handling.py +0 -0
  103. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_server_extended.py +0 -0
  104. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_server_httpx_version.py +0 -0
  105. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_server_part1.py +0 -0
  106. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_server_route_logging.py +0 -0
  107. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/test_server_signal_handlers.py +0 -0
  108. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_cache_provider.py +0 -0
  109. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_error_handler.py +0 -0
  110. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_error_handler_boost.py +0 -0
  111. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_error_handler_extended.py +0 -0
  112. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_error_handler_fix.py +0 -0
  113. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_http_client.py +0 -0
  114. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_http_client_comprehensive.py +0 -0
  115. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_http_client_extended.py +0 -0
  116. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_http_client_extended2.py +0 -0
  117. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_http_client_import_error.py +0 -0
  118. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_metrics_provider.py +0 -0
  119. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_metrics_provider_decorators.py +0 -0
  120. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_metrics_provider_extended2.py +0 -0
  121. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_metrics_provider_prometheus.py +0 -0
  122. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_openapi.py +0 -0
  123. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/tests/utils/test_openapi_validator.py +0 -0
  124. {awslabs_openapi_mcp_server-0.2.4 → awslabs_openapi_mcp_server-0.2.5}/uv-requirements.txt +0 -0
@@ -13,7 +13,7 @@
13
13
  # limitations under the License.
14
14
 
15
15
  # dependabot should continue to update this to the latest hash.
16
- FROM public.ecr.aws/docker/library/python:3.13.5-alpine3.21@sha256:c9a09c45a4bcc618c7f7128585b8dd0d41d0c31a8a107db4c8255ffe0b69375d AS uv
16
+ FROM public.ecr.aws/docker/library/python:3.13-alpine@sha256:070342a0cc1011532c0e69972cce2bbc6cc633eba294bae1d12abea8bd05303b AS uv
17
17
 
18
18
  # Install the project into `/app`
19
19
  WORKDIR /app
@@ -61,7 +61,7 @@ RUN --mount=type=cache,target=/root/.cache/uv \
61
61
  # Make the directory just in case it doesn't exist
62
62
  RUN mkdir -p /root/.local
63
63
 
64
- FROM public.ecr.aws/docker/library/python:3.13.5-alpine3.21@sha256:c9a09c45a4bcc618c7f7128585b8dd0d41d0c31a8a107db4c8255ffe0b69375d
64
+ FROM public.ecr.aws/docker/library/python:3.13-alpine@sha256:070342a0cc1011532c0e69972cce2bbc6cc633eba294bae1d12abea8bd05303b
65
65
 
66
66
  # Place executables in the environment at the front of the path and include other binaries
67
67
  ENV PATH="/app/.venv/bin:$PATH" \
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: awslabs.openapi-mcp-server
3
- Version: 0.2.4
3
+ Version: 0.2.5
4
4
  Summary: An AWS Labs Model Context Protocol (MCP) server for OpenAPI
5
5
  Project-URL: Homepage, https://awslabs.github.io/mcp/
6
6
  Project-URL: Documentation, https://awslabs.github.io/mcp/servers/openapi-mcp-server/
@@ -15,7 +15,7 @@
15
15
  OpenAPI MCP Server - A server that dynamically creates MCP tools and resources from OpenAPI specifications.
16
16
  """
17
17
 
18
- __version__ = '0.2.4'
18
+ __version__ = '0.2.5'
19
19
 
20
20
 
21
21
  import inspect
@@ -552,6 +552,17 @@ def create_operation_prompt(
552
552
  named_args = dict(zip(param_names, args))
553
553
  named_args.update(kwargs)
554
554
 
555
+ # Validate required parameters
556
+ missing_required = []
557
+ for arg in prompt_arguments:
558
+ if arg.required and (
559
+ arg.name not in named_args or named_args[arg.name] is None
560
+ ):
561
+ missing_required.append(arg.name)
562
+
563
+ if missing_required:
564
+ raise TypeError(f'Missing required argument(s): {", ".join(missing_required)}')
565
+
555
566
  # Extract the values in the correct order for handler_with_fixed_args
556
567
  arg_values = []
557
568
  for arg in prompt_arguments:
@@ -7,7 +7,7 @@ allow-direct-references = true
7
7
 
8
8
  [project]
9
9
  name = "awslabs.openapi-mcp-server"
10
- version = "0.2.4"
10
+ version = "0.2.5"
11
11
  description = "An AWS Labs Model Context Protocol (MCP) server for OpenAPI"
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.10"
@@ -2,6 +2,7 @@
2
2
 
3
3
  import json
4
4
  import pytest
5
+ import sys
5
6
  import tempfile
6
7
  from awslabs.openapi_mcp_server.utils.openapi import load_openapi_spec
7
8
  from pathlib import Path
@@ -36,19 +37,15 @@ paths:
36
37
  temp_path = f.name
37
38
 
38
39
  try:
39
- # Mock yaml import to raise ImportError
40
- with patch('builtins.__import__') as mock_import:
41
-
42
- def side_effect(name, *args, **kwargs):
43
- if name == 'yaml':
44
- raise ImportError('No module named yaml')
45
- return __import__(name, *args, **kwargs)
46
-
47
- mock_import.side_effect = side_effect
48
-
49
- # This should raise ImportError about pyyaml
50
- with pytest.raises(ImportError, match="Required dependency 'pyyaml' not installed"):
51
- load_openapi_spec(path=temp_path)
40
+ # Mock prance to fail and remove yaml from sys.modules to simulate ImportError
41
+ with patch('awslabs.openapi_mcp_server.utils.openapi.ResolvingParser') as mock_parser:
42
+ mock_parser.side_effect = Exception('Prance failed')
43
+ with patch.dict(sys.modules, {'yaml': None}):
44
+ # This should raise ImportError about pyyaml
45
+ with pytest.raises(
46
+ ImportError, match="Required dependency 'pyyaml' not installed"
47
+ ):
48
+ load_openapi_spec(path=temp_path)
52
49
  finally:
53
50
  # Clean up
54
51
  Path(temp_path).unlink(missing_ok=True)
@@ -91,17 +88,9 @@ paths:
91
88
  temp_path = f.name
92
89
 
93
90
  try:
94
- # Mock prance to not be available and yaml import to fail
91
+ # Mock prance to not be available and remove yaml from sys.modules
95
92
  with patch('awslabs.openapi_mcp_server.utils.openapi.PRANCE_AVAILABLE', False):
96
- with patch('builtins.__import__') as mock_import:
97
-
98
- def side_effect(name, *args, **kwargs):
99
- if name == 'yaml':
100
- raise ImportError('No module named yaml')
101
- return __import__(name, *args, **kwargs)
102
-
103
- mock_import.side_effect = side_effect
104
-
93
+ with patch.dict(sys.modules, {'yaml': None}):
105
94
  # This should raise ImportError about pyyaml
106
95
  with pytest.raises(
107
96
  ImportError, match="Required dependency 'pyyaml' not installed"