pyopenapi-gen 0.8.7__tar.gz → 0.10.1__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 (341) hide show
  1. pyopenapi_gen-0.10.1/.bandit +22 -0
  2. pyopenapi_gen-0.10.1/.github/workflows/ci.yml +23 -0
  3. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.github/workflows/claude-auto-approve.yml +62 -23
  4. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.github/workflows/claude.yml +15 -7
  5. pyopenapi_gen-0.10.1/.github/workflows/semantic-release.yml +304 -0
  6. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.github/workflows/staging-publish.yml +2 -0
  7. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.github/workflows/testpypi-publish.yml +7 -3
  8. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.gitignore +4 -1
  9. pyopenapi_gen-0.10.1/.python-version +1 -0
  10. pyopenapi_gen-0.10.1/CHANGELOG.md +1277 -0
  11. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/CLAUDE.md +128 -15
  12. pyopenapi_gen-0.10.1/Makefile +188 -0
  13. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/PKG-INFO +18 -4
  14. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/README.md +17 -3
  15. pyopenapi_gen-0.10.1/coverage.xml +6690 -0
  16. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/poetry.lock +822 -144
  17. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/pyproject.toml +43 -2
  18. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/__init__.py +2 -2
  19. pyopenapi_gen-0.10.1/src/pyopenapi_gen/context/CLAUDE.md +284 -0
  20. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/context/import_collector.py +8 -8
  21. pyopenapi_gen-0.10.1/src/pyopenapi_gen/core/CLAUDE.md +224 -0
  22. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/loader/operations/parser.py +1 -1
  23. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/cycle_helpers.py +1 -1
  24. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/keywords/properties_parser.py +4 -4
  25. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/schema_parser.py +4 -4
  26. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/transformers/inline_enum_extractor.py +1 -1
  27. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/writers/python_construct_renderer.py +2 -2
  28. pyopenapi_gen-0.10.1/src/pyopenapi_gen/emitters/CLAUDE.md +286 -0
  29. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/emitters/endpoints_emitter.py +1 -1
  30. pyopenapi_gen-0.10.1/src/pyopenapi_gen/generator/CLAUDE.md +352 -0
  31. pyopenapi_gen-0.10.1/src/pyopenapi_gen/helpers/CLAUDE.md +325 -0
  32. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/helpers/endpoint_utils.py +2 -2
  33. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/helpers/type_cleaner.py +1 -1
  34. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/helpers/type_resolution/composition_resolver.py +1 -1
  35. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/helpers/type_resolution/finalizer.py +1 -1
  36. pyopenapi_gen-0.10.1/src/pyopenapi_gen/types/CLAUDE.md +140 -0
  37. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/types/resolvers/schema_resolver.py +2 -2
  38. pyopenapi_gen-0.10.1/src/pyopenapi_gen/visit/CLAUDE.md +272 -0
  39. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/endpoint/generators/docstring_generator.py +1 -1
  40. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/endpoint/generators/signature_generator.py +1 -1
  41. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/endpoint/processors/parameter_processor.py +1 -1
  42. pyopenapi_gen-0.10.1/tests/cli/test_cli_edge_cases.py +100 -0
  43. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/cli/test_http_pagination_cli.py +34 -55
  44. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_edge_cases_integration.py +6 -1
  45. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/writers/test_python_construct_renderer_json_wizard.py +6 -6
  46. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/emitters/test_list_response_generation.py +17 -17
  47. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/generation/test_external_core_package.py +1 -1
  48. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/helpers/test_type_helper.py +1 -1
  49. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/helpers/test_utils_helpers.py +1 -1
  50. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/integrations/test_end_to_end_business_swagger.py +1 -1
  51. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/integrations/test_name_collisions.py +2 -2
  52. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/types/test_business_swagger_integration.py +10 -10
  53. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/generators/test_url_args_generator.py +1 -1
  54. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/model/test_dataclass_generator_json_wizard.py +16 -16
  55. pyopenapi_gen-0.8.7/.bandit +0 -1
  56. pyopenapi_gen-0.8.7/.github/workflows/ci.yml +0 -42
  57. pyopenapi_gen-0.8.7/.github/workflows/main-checks.yml +0 -97
  58. pyopenapi_gen-0.8.7/.github/workflows/pypi-publish.yml +0 -40
  59. pyopenapi_gen-0.8.7/CHANGELOG.md +0 -130
  60. pyopenapi_gen-0.8.7/Makefile +0 -61
  61. pyopenapi_gen-0.8.7/RELEASE_NOTES_v0.8.5.md +0 -81
  62. pyopenapi_gen-0.8.7/RESPONSE_RESOLUTION_REFACTOR.md +0 -137
  63. pyopenapi_gen-0.8.7/TEST_MAP.md +0 -223
  64. pyopenapi_gen-0.8.7/debug_after_fix.py +0 -55
  65. pyopenapi_gen-0.8.7/debug_data_schema_names.py +0 -56
  66. pyopenapi_gen-0.8.7/debug_list_issue.py +0 -69
  67. pyopenapi_gen-0.8.7/debug_signature_issue.py +0 -56
  68. pyopenapi_gen-0.8.7/debug_strategy_resolver.py +0 -70
  69. pyopenapi_gen-0.8.7/tests/cli/test_cli_edge_cases.py +0 -105
  70. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.cursor/mcp.json +0 -0
  71. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.cursor/rules/architecture.mdc +0 -0
  72. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.cursor/rules/coding-conventions.mdc +0 -0
  73. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.cursor/rules/project-goal.mdc +0 -0
  74. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.cursor/rules/testing.mdc +0 -0
  75. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.github/BRANCH_PROTECTION.md +0 -0
  76. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.github/CLAUDE_CONFIGURATION.md +0 -0
  77. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.github/CODEOWNERS +0 -0
  78. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  79. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  80. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.github/dependabot.yml +0 -0
  81. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.github/workflows/claude-review-trigger.yml +0 -0
  82. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.github/workflows/pr-checks.yml +0 -0
  83. /pyopenapi_gen-0.8.7/.github/workflows/production-release.yml → /pyopenapi_gen-0.10.1/.github/workflows/production-release.yml.backup +0 -0
  84. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.github/workflows/promote-to-staging.yml +0 -0
  85. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/.vscode/settings.json +0 -0
  86. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/CONTRIBUTING.md +0 -0
  87. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/LICENSE +0 -0
  88. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/docs/README.md +0 -0
  89. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/docs/architecture.md +0 -0
  90. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/docs/endpoint_visitor.md +0 -0
  91. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/docs/helpers.md +0 -0
  92. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/docs/ir_models.md +0 -0
  93. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/docs/line_writer.md +0 -0
  94. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/docs/loader.md +0 -0
  95. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/docs/model_visitor.md +0 -0
  96. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/docs/render_context.md +0 -0
  97. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/docs/unified_type_resolution.md +0 -0
  98. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/input/business_swagger.json +0 -0
  99. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/input/minimal_swagger.json +0 -0
  100. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/input/minimal_syntax_test.json +0 -0
  101. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/input/test_name_collision_spec.json +0 -0
  102. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/mkdocs.yml +0 -0
  103. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/__main__.py +0 -0
  104. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/cli.py +0 -0
  105. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/context/file_manager.py +0 -0
  106. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/context/render_context.py +0 -0
  107. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/__init__.py +0 -0
  108. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/auth/base.py +0 -0
  109. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/auth/plugins.py +0 -0
  110. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/exceptions.py +0 -0
  111. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/http_transport.py +0 -0
  112. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/loader/__init__.py +0 -0
  113. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/loader/loader.py +0 -0
  114. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/loader/operations/__init__.py +0 -0
  115. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/loader/operations/post_processor.py +0 -0
  116. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/loader/operations/request_body.py +0 -0
  117. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/loader/parameters/__init__.py +0 -0
  118. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/loader/parameters/parser.py +0 -0
  119. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/loader/responses/__init__.py +0 -0
  120. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/loader/responses/parser.py +0 -0
  121. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/loader/schemas/__init__.py +0 -0
  122. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/loader/schemas/extractor.py +0 -0
  123. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/pagination.py +0 -0
  124. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/__init__.py +0 -0
  125. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/common/__init__.py +0 -0
  126. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/__init__.py +0 -0
  127. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/__init__.py +0 -0
  128. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/cyclic_properties.py +0 -0
  129. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/direct_cycle.py +0 -0
  130. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/existing_schema.py +0 -0
  131. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/list_response.py +0 -0
  132. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/missing_ref.py +0 -0
  133. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/new_schema.py +0 -0
  134. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/stripped_suffix.py +0 -0
  135. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/resolve_schema_ref.py +0 -0
  136. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/common/type_parser.py +0 -0
  137. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/context.py +0 -0
  138. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/keywords/__init__.py +0 -0
  139. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/keywords/all_of_parser.py +0 -0
  140. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/keywords/any_of_parser.py +0 -0
  141. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/keywords/array_items_parser.py +0 -0
  142. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/keywords/one_of_parser.py +0 -0
  143. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/schema_finalizer.py +0 -0
  144. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/transformers/__init__.py +0 -0
  145. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/transformers/inline_object_promoter.py +0 -0
  146. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/parsing/unified_cycle_detection.py +0 -0
  147. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/postprocess_manager.py +0 -0
  148. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/schemas.py +0 -0
  149. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/streaming_helpers.py +0 -0
  150. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/telemetry.py +0 -0
  151. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/utils.py +0 -0
  152. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/warning_collector.py +0 -0
  153. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/writers/code_writer.py +0 -0
  154. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/writers/documentation_writer.py +0 -0
  155. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core/writers/line_writer.py +0 -0
  156. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/core_package_template/README.md +0 -0
  157. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/emit/models_emitter.py +0 -0
  158. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/emitters/client_emitter.py +0 -0
  159. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/emitters/core_emitter.py +0 -0
  160. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/emitters/docs_emitter.py +0 -0
  161. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/emitters/exceptions_emitter.py +0 -0
  162. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/emitters/models_emitter.py +0 -0
  163. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/generator/client_generator.py +0 -0
  164. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/helpers/__init__.py +0 -0
  165. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/helpers/type_helper.py +0 -0
  166. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/helpers/type_resolution/__init__.py +0 -0
  167. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/helpers/type_resolution/array_resolver.py +0 -0
  168. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/helpers/type_resolution/named_resolver.py +0 -0
  169. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/helpers/type_resolution/object_resolver.py +0 -0
  170. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/helpers/type_resolution/primitive_resolver.py +0 -0
  171. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/helpers/type_resolution/resolver.py +0 -0
  172. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/helpers/url_utils.py +0 -0
  173. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/http_types.py +0 -0
  174. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/ir.py +0 -0
  175. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/py.typed +0 -0
  176. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/types/__init__.py +0 -0
  177. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/types/contracts/__init__.py +0 -0
  178. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/types/contracts/protocols.py +0 -0
  179. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/types/contracts/types.py +0 -0
  180. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/types/resolvers/__init__.py +0 -0
  181. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/types/resolvers/reference_resolver.py +0 -0
  182. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/types/resolvers/response_resolver.py +0 -0
  183. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/types/services/__init__.py +0 -0
  184. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/types/services/type_service.py +0 -0
  185. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/types/strategies/__init__.py +0 -0
  186. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/types/strategies/response_strategy.py +0 -0
  187. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/client_visitor.py +0 -0
  188. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/docs_visitor.py +0 -0
  189. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/endpoint/__init__.py +0 -0
  190. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/endpoint/endpoint_visitor.py +0 -0
  191. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/endpoint/generators/__init__.py +0 -0
  192. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/endpoint/generators/endpoint_method_generator.py +0 -0
  193. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/endpoint/generators/request_generator.py +0 -0
  194. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/endpoint/generators/response_handler_generator.py +0 -0
  195. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/endpoint/generators/url_args_generator.py +0 -0
  196. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/endpoint/processors/__init__.py +0 -0
  197. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/endpoint/processors/import_analyzer.py +0 -0
  198. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/exception_visitor.py +0 -0
  199. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/model/__init__.py +0 -0
  200. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/model/alias_generator.py +0 -0
  201. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/model/dataclass_generator.py +0 -0
  202. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/model/enum_generator.py +0 -0
  203. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/model/model_visitor.py +0 -0
  204. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/src/pyopenapi_gen/visit/visitor.py +0 -0
  205. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/__init__.py +0 -0
  206. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/auth/auth_analysis.md +0 -0
  207. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/auth/test_auth_base.py +0 -0
  208. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/auth/test_auth_plugins.py +0 -0
  209. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/cli/cli_analysis.md +0 -0
  210. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/cli/test_cli_backup_diff.py +0 -0
  211. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/cli/test_cli_edge_cases_comprehensive.py +0 -0
  212. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/cli/test_cli_internal_utils.py +0 -0
  213. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/context/context_analysis.md +0 -0
  214. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/context/test_file_manager.py +0 -0
  215. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/context/test_import_collector.py +0 -0
  216. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/context/test_render_context.py +0 -0
  217. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/context/test_render_context_imports.py +0 -0
  218. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/context/test_render_context_relative_paths.py +0 -0
  219. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/core_analysis.md +0 -0
  220. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/loader/test_extractor.py +0 -0
  221. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/common/ref_resolution/helpers/helpers_analysis.md +0 -0
  222. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/common/ref_resolution/helpers/test_cyclic_properties.py +0 -0
  223. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/common/ref_resolution/helpers/test_direct_cycle.py +0 -0
  224. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/common/ref_resolution/helpers/test_existing_schema.py +0 -0
  225. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/common/ref_resolution/helpers/test_list_response.py +0 -0
  226. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/common/ref_resolution/helpers/test_missing_ref.py +0 -0
  227. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/common/ref_resolution/helpers/test_new_schema.py +0 -0
  228. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/common/ref_resolution/helpers/test_stripped_suffix.py +0 -0
  229. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/keywords/__init__.py +0 -0
  230. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/keywords/keywords_analysis.md +0 -0
  231. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/keywords/test_all_of_parser.py +0 -0
  232. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/keywords/test_any_of_parser.py +0 -0
  233. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/keywords/test_array_items_parser.py +0 -0
  234. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/keywords/test_one_of_parser.py +0 -0
  235. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/keywords/test_properties_parser.py +0 -0
  236. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/parsing_analysis.md +0 -0
  237. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/test_context.py +0 -0
  238. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/test_cycle_detection.py +0 -0
  239. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/test_cycle_helpers.py +0 -0
  240. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/test_improved_schema_naming.py +0 -0
  241. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/test_inline_enum_extractor.py +0 -0
  242. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/test_inline_object_promoter.py +0 -0
  243. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/test_logging.py +0 -0
  244. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/test_ref_resolver.py +0 -0
  245. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/test_schema_finalizer.py +0 -0
  246. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/test_schema_parser.py +0 -0
  247. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/test_schema_parser_list_response.py +0 -0
  248. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/parsing/test_type_parser.py +0 -0
  249. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_dataclass_serialization.py +0 -0
  250. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_detect_circular_imports.py +0 -0
  251. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_edge_cases_systematic.py +0 -0
  252. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_exceptions_module.py +0 -0
  253. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_forward_references.py +0 -0
  254. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_http_transport.py +0 -0
  255. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_import_resolution.py +0 -0
  256. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_ir.py +0 -0
  257. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_ir_schema.py +0 -0
  258. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_loader.py +0 -0
  259. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_loader_extensive.py +0 -0
  260. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_loader_invalid_refs.py +0 -0
  261. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_loader_malformed.py +0 -0
  262. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_loader_media_types.py +0 -0
  263. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_pagination.py +0 -0
  264. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_parsing_context.py +0 -0
  265. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_protocol_defaults.py +0 -0
  266. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_schema_parser_specific_case.py +0 -0
  267. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_schemas.py +0 -0
  268. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_simple_self_ref_check.py +0 -0
  269. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_streaming_helpers.py +0 -0
  270. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_telemetry.py +0 -0
  271. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_telemetry_client.py +0 -0
  272. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_utils.py +0 -0
  273. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/test_warning_collector.py +0 -0
  274. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/writers/test_code_writer.py +0 -0
  275. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/writers/test_documentation_writer.py +0 -0
  276. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/writers/test_line_writer.py +0 -0
  277. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/core/writers/writers_analysis.md +0 -0
  278. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/emitters/emitters_analysis.md +0 -0
  279. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/emitters/test_client_emitter.py +0 -0
  280. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/emitters/test_docs_emitter.py +0 -0
  281. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/emitters/test_duplicate_operations.py +0 -0
  282. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/emitters/test_endpoints_emitter.py +0 -0
  283. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/emitters/test_exceptions_emitter.py +0 -0
  284. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/emitters/test_models_emitter.py +0 -0
  285. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/end_to_end/test_dataclass_serialization_e2e.py +0 -0
  286. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/examples/test_developer_experience_demo.py +0 -0
  287. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/generation/generation_analysis.md +0 -0
  288. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/generation_issues/specs/minimal_addmessage_like.json +0 -0
  289. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/generation_issues/test_addmessage_like_issues.py +0 -0
  290. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/generation_issues/test_agent_include_parameter_typing.py +0 -0
  291. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/generation_issues/test_message_batch_response_issue.py +0 -0
  292. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/helpers/helpers_analysis.md +0 -0
  293. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/helpers/test_array_resolver.py +0 -0
  294. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/helpers/test_endpoint_utils.py +0 -0
  295. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/helpers/test_endpoint_utils_extended.py +0 -0
  296. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/helpers/test_get_endpoint_return_types.py +0 -0
  297. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/helpers/test_named_resolver.py +0 -0
  298. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/helpers/test_named_type_resolver.py +0 -0
  299. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/helpers/test_object_resolver.py +0 -0
  300. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/helpers/test_put_endpoint_return_types.py +0 -0
  301. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/helpers/test_type_cleaner.py +0 -0
  302. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/helpers/test_url_utils.py +0 -0
  303. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/integration/test_generated_code_structure.py +0 -0
  304. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/integrations/integrations_analysis.md +0 -0
  305. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/integrations/test_business_swagger_message_type.py +0 -0
  306. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/integrations/test_end_to_end_petstore.py +0 -0
  307. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/specs/response_unwrapping_spec.yaml +0 -0
  308. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/test_analysis_overview.md +0 -0
  309. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/test_init.py +0 -0
  310. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/types/__init__.py +0 -0
  311. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/types/test_contracts_types.py +0 -0
  312. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/types/test_reference_resolver.py +0 -0
  313. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/types/test_response_resolver.py +0 -0
  314. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/types/test_response_strategy.py +0 -0
  315. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/types/test_response_strategy_simplified.py +0 -0
  316. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/types/test_schema_resolver.py +0 -0
  317. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/types/test_type_service.py +0 -0
  318. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/__init__.py +0 -0
  319. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/__init__.py +0 -0
  320. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/generators/__init__.py +0 -0
  321. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/generators/generators_analysis.md +0 -0
  322. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/generators/test_dataclass_integration.py +0 -0
  323. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/generators/test_docstring_generator.py +0 -0
  324. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/generators/test_endpoint_method_generator.py +0 -0
  325. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/generators/test_match_case_response.py +0 -0
  326. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/generators/test_request_generator.py +0 -0
  327. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/generators/test_response_handler_generator.py +0 -0
  328. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/generators/test_response_handler_generator_strategy.py +0 -0
  329. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/generators/test_signature_generator.py +0 -0
  330. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/processors/__init__.py +0 -0
  331. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/processors/test_import_analyzer.py +0 -0
  332. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/processors/test_import_analyzer.py.bak +0 -0
  333. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/processors/test_parameter_processor.py +0 -0
  334. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/endpoint/test_endpoint_visitor.py +0 -0
  335. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/model/__init__.py +0 -0
  336. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/model/test_alias_generator.py +0 -0
  337. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/model/test_dataclass_generator.py +0 -0
  338. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/model/test_enum_generator.py +0 -0
  339. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/test_client_visitor.py +0 -0
  340. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/test_model_visitor.py +0 -0
  341. {pyopenapi_gen-0.8.7 → pyopenapi_gen-0.10.1}/tests/visit/test_visitor.py +0 -0
@@ -0,0 +1,22 @@
1
+ # Bandit configuration for pyopenapi-gen
2
+
3
+ # Skip these specific checks that are acceptable for this project:
4
+ # B101: assert_used - We use assertions for Design by Contract (DbC) as documented
5
+ # B404: import_subprocess - We need subprocess for post-processing (ruff, mypy)
6
+ # B603: subprocess_without_shell_equals_true - We use controlled subprocess calls to trusted tools
7
+ # B110: try_except_pass - Acceptable for telemetry error handling
8
+ skips:
9
+ - B101
10
+ - B404
11
+ - B603
12
+ - B110
13
+
14
+ # Only scan source code, not tests (tests may have different security requirements)
15
+ exclude_dirs:
16
+ - tests/
17
+ - _process/
18
+ - venv/
19
+ - .venv/
20
+
21
+ # Set confidence level to only report medium and high confidence issues
22
+ confidence: MEDIUM
@@ -0,0 +1,23 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main, develop, staging]
8
+ # Run on PRs to provide required "test" status check for branch protection
9
+ # Actual testing is handled by pr-checks.yml, this just satisfies the requirement
10
+
11
+ jobs:
12
+ test:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - name: Provide required test status check
16
+ run: |
17
+ echo "✅ This workflow satisfies the required 'test' status check"
18
+ if [ "${{ github.event_name }}" = "pull_request" ]; then
19
+ echo "PR testing is handled by pr-checks.yml workflow"
20
+ else
21
+ echo "Main branch testing is handled by semantic-release.yml workflow"
22
+ fi
23
+ echo "This minimal workflow prevents branch protection conflicts"
@@ -1,20 +1,20 @@
1
1
  name: Claude Auto-Approve
2
2
 
3
3
  on:
4
- pull_request_review:
5
- types: [submitted]
4
+ workflow_run:
5
+ workflows: ["Claude Code"]
6
+ types: [completed]
6
7
  issue_comment:
7
8
  types: [created]
8
9
 
9
10
  jobs:
10
11
  auto-approve:
11
12
  if: |
12
- (github.event_name == 'pull_request_review' &&
13
- github.event.review.user.login == 'claude[bot]' &&
14
- contains(github.event.review.body, 'APPROVE')) ||
13
+ (github.event_name == 'workflow_run' &&
14
+ github.event.workflow_run.conclusion == 'success') ||
15
15
  (github.event_name == 'issue_comment' &&
16
- github.event.comment.user.login == 'claude[bot]' &&
17
- contains(github.event.comment.body, 'APPROVED'))
16
+ contains(github.event.comment.body, '@claude') &&
17
+ contains(github.event.comment.body, 'approved'))
18
18
  runs-on: ubuntu-latest
19
19
  permissions:
20
20
  contents: write
@@ -31,39 +31,78 @@ jobs:
31
31
 
32
32
  - name: Get PR number
33
33
  id: pr_number
34
- run: |
35
- if [[ "${{ github.event_name }}" == "pull_request_review" ]]; then
36
- echo "pr_number=${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT
37
- elif [[ "${{ github.event_name }}" == "issue_comment" ]]; then
38
- echo "pr_number=${{ github.event.issue.number }}" >> $GITHUB_OUTPUT
39
- fi
34
+ uses: actions/github-script@v7
35
+ with:
36
+ script: |
37
+ let prNumber = null;
38
+
39
+ if (context.eventName === 'workflow_run') {
40
+ // Get PR number from workflow run
41
+ const { data: workflowRun } = await github.rest.actions.getWorkflowRun({
42
+ owner: context.repo.owner,
43
+ repo: context.repo.repo,
44
+ run_id: context.payload.workflow_run.id,
45
+ });
46
+
47
+ if (workflowRun.pull_requests && workflowRun.pull_requests.length > 0) {
48
+ prNumber = workflowRun.pull_requests[0].number;
49
+ }
50
+ } else if (context.eventName === 'issue_comment') {
51
+ prNumber = context.payload.issue.number;
52
+ }
53
+
54
+ console.log(`Found PR number: ${prNumber}`);
55
+ core.setOutput('pr_number', prNumber);
56
+ return prNumber;
40
57
 
41
58
  - name: Check if PR can be auto-approved
42
59
  id: check_approval
60
+ if: steps.pr_number.outputs.pr_number != ''
43
61
  run: |
44
62
  pr_number="${{ steps.pr_number.outputs.pr_number }}"
45
63
 
64
+ if [[ -z "$pr_number" || "$pr_number" == "null" ]]; then
65
+ echo "No PR number found, skipping auto-approval"
66
+ echo "auto_approve=false" >> $GITHUB_OUTPUT
67
+ exit 0
68
+ fi
69
+
46
70
  # Get PR details
47
- pr_data=$(gh pr view $pr_number --json author,title,baseRefName,mergeable,reviewDecision)
71
+ pr_data=$(gh pr view $pr_number --json author,title,baseRefName,mergeable,reviewDecision,headRefName)
48
72
  pr_author=$(echo "$pr_data" | jq -r '.author.login')
49
73
  pr_title=$(echo "$pr_data" | jq -r '.title')
50
74
  pr_base=$(echo "$pr_data" | jq -r '.baseRefName')
75
+ pr_head=$(echo "$pr_data" | jq -r '.headRefName')
51
76
  pr_mergeable=$(echo "$pr_data" | jq -r '.mergeable')
52
77
  review_decision=$(echo "$pr_data" | jq -r '.reviewDecision')
53
78
 
54
- echo "PR Author: $pr_author"
55
- echo "PR Title: $pr_title"
56
- echo "PR Base: $pr_base"
57
- echo "PR Mergeable: $pr_mergeable"
58
- echo "Review Decision: $review_decision"
79
+ echo "PR #$pr_number Analysis:"
80
+ echo " Author: $pr_author"
81
+ echo " Title: $pr_title"
82
+ echo " Base: $pr_base"
83
+ echo " Head: $pr_head"
84
+ echo " Mergeable: $pr_mergeable"
85
+ echo " Review Decision: $review_decision"
59
86
 
60
87
  # Check if this is an eligible PR for auto-approval
61
88
  auto_approve=false
62
89
 
63
- if [[ "$pr_author" == "devops-mindhive" ]] && \
64
- [[ "$pr_title" =~ ^(fix|chore|release): ]] && \
65
- [[ "$pr_mergeable" == "MERGEABLE" ]]; then
66
- auto_approve=true
90
+ # Auto-approve conditions:
91
+ # 1. Hotfix branches (fix critical issues)
92
+ # 2. DevOps bot PRs with fix/chore/release prefixes
93
+ # 3. Dependabot PRs
94
+ if [[ "$pr_head" =~ ^hotfix/ ]] || \
95
+ [[ "$pr_author" == "dependabot[bot]" ]] || \
96
+ ([[ "$pr_author" == "devops-mindhive" ]] && [[ "$pr_title" =~ ^(fix|chore|release): ]]); then
97
+
98
+ if [[ "$pr_mergeable" == "MERGEABLE" ]]; then
99
+ auto_approve=true
100
+ echo "✅ PR eligible for auto-approval"
101
+ else
102
+ echo "❌ PR not mergeable, skipping auto-approval"
103
+ fi
104
+ else
105
+ echo "❌ PR does not meet auto-approval criteria"
67
106
  fi
68
107
 
69
108
  echo "auto_approve=$auto_approve" >> $GITHUB_OUTPUT
@@ -42,11 +42,19 @@ jobs:
42
42
  uses: anthropics/claude-code-action@beta
43
43
  with:
44
44
  anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
45
- # Enable formal PR reviews instead of just comments
46
- create_review: true
47
- auto_approve: true
48
- allowed_tools: |
49
- mcp__github__create_pull_request
50
- mcp__github__create_review
51
- mcp__github__approve_pull_request
45
+ direct_prompt: |
46
+ Review this PR for code quality, security, and compatibility:
47
+
48
+ **For hotfixes and minor fixes:**
49
+ 1. If code quality is good and tests pass, fix any minor issues directly
50
+ 2. Provide detailed analysis in comments
51
+ 3. Note if manual approval is recommended
52
+
53
+ **For larger changes:**
54
+ 1. Provide comprehensive review feedback
55
+ 2. Create issues for complex problems
56
+ 3. Suggest improvements and alternatives
57
+
58
+ Focus on: syntax errors, security issues, type safety, and compatibility.
59
+ timeout_minutes: 60
52
60
 
@@ -0,0 +1,304 @@
1
+ name: Semantic Release
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ workflow_dispatch:
7
+ inputs:
8
+ reason:
9
+ description: 'Reason for manual release'
10
+ required: false
11
+ default: 'Manual release'
12
+
13
+ permissions:
14
+ contents: write
15
+ packages: write
16
+ pull-requests: write
17
+ issues: write
18
+
19
+ jobs:
20
+ release:
21
+ runs-on: ubuntu-latest
22
+ environment: production
23
+ concurrency:
24
+ group: semantic-release
25
+ cancel-in-progress: false
26
+
27
+ steps:
28
+ - name: Checkout code
29
+ uses: actions/checkout@v4
30
+ with:
31
+ fetch-depth: 0
32
+ token: ${{ secrets.SEMANTIC_RELEASE_TOKEN || secrets.GITHUB_TOKEN }}
33
+
34
+ - name: Set up Python
35
+ uses: actions/setup-python@v5
36
+ with:
37
+ python-version: '3.12'
38
+
39
+ - name: Install Poetry
40
+ uses: snok/install-poetry@v1
41
+ with:
42
+ version: latest
43
+ virtualenvs-create: true
44
+ virtualenvs-in-project: true
45
+ virtualenvs-path: .venv
46
+
47
+ - name: Install dependencies
48
+ run: |
49
+ poetry install --with dev
50
+
51
+ - name: Run comprehensive quality checks
52
+ run: |
53
+ poetry run black --check src/ tests/
54
+ poetry run ruff check src/ tests/
55
+ poetry run mypy src/ --strict --no-warn-no-return
56
+ poetry run bandit -r src/ -f txt -c .bandit
57
+
58
+ - name: Run full test suite
59
+ run: |
60
+ poetry run pytest -n 2 --timeout=120 --cov=src --cov-report=term-missing --cov-report=xml --cov-fail-under=85
61
+
62
+ - name: Check for release-worthy changes
63
+ id: check_changes
64
+ run: |
65
+ # Check if there are any commits since the last tag that would trigger a release
66
+ LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
67
+ if [ -n "$LAST_TAG" ]; then
68
+ COMMITS_SINCE_TAG=$(git log --oneline $LAST_TAG..HEAD | wc -l)
69
+ RELEASE_WORTHY=$(git log $LAST_TAG..HEAD --grep="^feat" --grep="^fix" --grep="^perf" --grep="BREAKING CHANGE" --oneline | wc -l)
70
+ else
71
+ COMMITS_SINCE_TAG=1
72
+ RELEASE_WORTHY=1
73
+ fi
74
+
75
+ echo "commits_since_tag=$COMMITS_SINCE_TAG" >> $GITHUB_OUTPUT
76
+ echo "release_worthy=$RELEASE_WORTHY" >> $GITHUB_OUTPUT
77
+ echo "last_tag=$LAST_TAG" >> $GITHUB_OUTPUT
78
+
79
+ if [ "$RELEASE_WORTHY" -gt 0 ]; then
80
+ echo "Found release-worthy changes since $LAST_TAG"
81
+ else
82
+ echo "No release-worthy changes found since $LAST_TAG"
83
+ fi
84
+
85
+ - name: Run semantic-release version
86
+ if: steps.check_changes.outputs.release_worthy > 0 || github.event_name == 'workflow_dispatch'
87
+ env:
88
+ GH_TOKEN: ${{ secrets.SEMANTIC_RELEASE_TOKEN || secrets.GITHUB_TOKEN }}
89
+ run: |
90
+ git config user.name "github-actions[bot]"
91
+ git config user.email "github-actions[bot]@users.noreply.github.com"
92
+ poetry run semantic-release version --skip-build
93
+
94
+ - name: Build packages after version bump
95
+ if: steps.check_changes.outputs.release_worthy > 0 || github.event_name == 'workflow_dispatch'
96
+ run: |
97
+ echo "🧹 Cleaning old packages..."
98
+ rm -rf dist/
99
+ echo "📦 Building packages with updated version..."
100
+ poetry run python -m build
101
+ echo "📋 Package contents:"
102
+ ls -la dist/
103
+
104
+ - name: Check if packages exist after semantic-release
105
+ if: steps.check_changes.outputs.release_worthy > 0 || github.event_name == 'workflow_dispatch'
106
+ run: |
107
+ if [ -d "dist" ] && [ "$(ls -A dist/)" ]; then
108
+ echo "✅ Packages exist in dist/"
109
+ ls -la dist/
110
+
111
+ # Extract version from package filename
112
+ PACKAGE_VERSION=$(ls dist/*.whl | sed 's/.*-\([0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/' | head -1)
113
+ echo "📦 Built package version: $PACKAGE_VERSION"
114
+ echo "package_version=$PACKAGE_VERSION" >> $GITHUB_ENV
115
+
116
+ # Check if version already exists on PyPI
117
+ PYPI_LATEST=$(curl -s "https://pypi.org/pypi/pyopenapi-gen/json" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data['info']['version'])" 2>/dev/null || echo "unknown")
118
+ echo "📚 PyPI latest version: $PYPI_LATEST"
119
+
120
+ if [ "$PACKAGE_VERSION" = "$PYPI_LATEST" ]; then
121
+ echo "⚠️ Version $PACKAGE_VERSION already exists on PyPI"
122
+ echo "This indicates either:"
123
+ echo " - No release-worthy changes since last version"
124
+ echo " - Semantic-release didn't detect conventional commits"
125
+ echo " - Last commit was already a release commit"
126
+ echo "packages_exist=false" >> $GITHUB_ENV
127
+ echo "version_conflict=true" >> $GITHUB_ENV
128
+ else
129
+ echo "✅ New version $PACKAGE_VERSION ready for publishing (current: $PYPI_LATEST → new: $PACKAGE_VERSION)"
130
+ echo "packages_exist=true" >> $GITHUB_ENV
131
+ echo "version_conflict=false" >> $GITHUB_ENV
132
+ fi
133
+ else
134
+ echo "❌ No packages found, semantic-release may not have triggered a release"
135
+ echo "packages_exist=false" >> $GITHUB_ENV
136
+ fi
137
+
138
+ - name: Validate PyPI token availability
139
+ if: (steps.check_changes.outputs.release_worthy > 0 || github.event_name == 'workflow_dispatch') && env.packages_exist == 'true'
140
+ env:
141
+ PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
142
+ run: |
143
+ echo "🔐 Validating PYPI_API_TOKEN secret..."
144
+ if [ -z "$PYPI_TOKEN" ]; then
145
+ echo "❌ PYPI_API_TOKEN secret is not configured in GitHub repository"
146
+ echo ""
147
+ echo "To fix this:"
148
+ echo " 1. Go to: https://github.com/mindhiveoy/pyopenapi_gen/settings/secrets/actions"
149
+ echo " 2. Click 'New repository secret'"
150
+ echo " 3. Name: PYPI_API_TOKEN"
151
+ echo " 4. Value: your PyPI token (starts with pypi-)"
152
+ echo ""
153
+ echo "Your PyPI token should be the same one that works locally."
154
+ exit 1
155
+ fi
156
+
157
+ # Validate token format
158
+ if [[ ! "$PYPI_TOKEN" =~ ^pypi- ]]; then
159
+ echo "⚠️ Token doesn't start with 'pypi-' - this may be incorrect"
160
+ echo "Token length: ${#PYPI_TOKEN} characters"
161
+ else
162
+ echo "✅ Token format looks correct (pypi-...)"
163
+ echo "✅ Token length: ${#PYPI_TOKEN} characters"
164
+ fi
165
+
166
+ - name: Publish to PyPI with twine
167
+ if: (steps.check_changes.outputs.release_worthy > 0 || github.event_name == 'workflow_dispatch') && env.packages_exist == 'true'
168
+ timeout-minutes: 10
169
+ env:
170
+ TWINE_USERNAME: __token__
171
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
172
+ run: |
173
+ echo "🚀 Publishing to PyPI with twine..."
174
+
175
+ echo "✅ Token configured (length: ${#TWINE_PASSWORD})"
176
+ echo "📦 Checking packages..."
177
+ poetry run twine check dist/*
178
+
179
+ echo "🔗 Testing PyPI connectivity..."
180
+ curl -I https://upload.pypi.org/legacy/ || {
181
+ echo "⚠️ PyPI upload endpoint not reachable"
182
+ exit 1
183
+ }
184
+
185
+ echo "📤 Uploading to PyPI with timeout protection..."
186
+ timeout 300 poetry run twine upload \
187
+ --username "$TWINE_USERNAME" \
188
+ --password "$TWINE_PASSWORD" \
189
+ --verbose \
190
+ --disable-progress-bar \
191
+ dist/* || {
192
+ echo "❌ Upload failed or timed out after 5 minutes"
193
+ echo "This could be due to:"
194
+ echo " - Network connectivity issues"
195
+ echo " - PyPI rate limiting"
196
+ echo " - Invalid token permissions"
197
+ echo " - Package already exists (version conflict)"
198
+ exit 1
199
+ }
200
+
201
+ - name: Run semantic-release publish (GitHub release only)
202
+ if: steps.check_changes.outputs.release_worthy > 0 || github.event_name == 'workflow_dispatch'
203
+ env:
204
+ GH_TOKEN: ${{ secrets.SEMANTIC_RELEASE_TOKEN || secrets.GITHUB_TOKEN }}
205
+ run: |
206
+ echo "📝 Creating GitHub release with semantic-release..."
207
+ poetry run semantic-release publish
208
+
209
+ - name: Get release version
210
+ if: success() && (steps.check_changes.outputs.release_worthy > 0 || github.event_name == 'workflow_dispatch')
211
+ id: get_version
212
+ run: |
213
+ # Get the latest tag as the released version
214
+ LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
215
+ echo "released_version=$LATEST_TAG" >> $GITHUB_OUTPUT
216
+ echo "Released version: $LATEST_TAG"
217
+
218
+ - name: Sync version to staging branch
219
+ if: success() && steps.get_version.outputs.released_version != ''
220
+ env:
221
+ GH_TOKEN: ${{ secrets.SEMANTIC_RELEASE_TOKEN || secrets.GITHUB_TOKEN }}
222
+ run: |
223
+ echo "🔄 Syncing main to staging branch..."
224
+
225
+ # Fetch all branches
226
+ git fetch origin staging:staging || echo "Staging branch doesn't exist, skipping"
227
+
228
+ if git show-ref --verify --quiet refs/heads/staging; then
229
+ # Switch to staging and merge main
230
+ git checkout staging
231
+ git merge main --no-edit || {
232
+ echo "⚠️ Merge conflict detected, creating PR instead"
233
+ git merge --abort
234
+ gh pr create \
235
+ --title "chore: sync version ${{ steps.get_version.outputs.released_version }} from main to staging" \
236
+ --body "Automated sync of semantic release version ${{ steps.get_version.outputs.released_version }} from main branch" \
237
+ --base staging \
238
+ --head main \
239
+ --label "automated,version-sync" || echo "PR may already exist"
240
+ } && {
241
+ echo "✅ Successfully merged main into staging"
242
+ git push origin staging || echo "Failed to push to staging"
243
+ }
244
+ else
245
+ echo "ℹ️ Staging branch doesn't exist, skipping sync"
246
+ fi
247
+
248
+ - name: Sync version to develop branch
249
+ if: success() && steps.get_version.outputs.released_version != ''
250
+ env:
251
+ GH_TOKEN: ${{ secrets.SEMANTIC_RELEASE_TOKEN || secrets.GITHUB_TOKEN }}
252
+ run: |
253
+ echo "🔄 Syncing main to develop branch..."
254
+
255
+ # Fetch all branches
256
+ git fetch origin develop:develop || echo "Develop branch doesn't exist, skipping"
257
+
258
+ if git show-ref --verify --quiet refs/heads/develop; then
259
+ # Switch to develop and merge main
260
+ git checkout develop
261
+ git merge main --no-edit || {
262
+ echo "⚠️ Merge conflict detected, creating PR instead"
263
+ git merge --abort
264
+ gh pr create \
265
+ --title "chore: sync version ${{ steps.get_version.outputs.released_version }} from main to develop" \
266
+ --body "Automated sync of semantic release version ${{ steps.get_version.outputs.released_version }} from main branch" \
267
+ --base develop \
268
+ --head main \
269
+ --label "automated,version-sync" || echo "PR may already exist"
270
+ } && {
271
+ echo "✅ Successfully merged main into develop"
272
+ git push origin develop || echo "Failed to push to develop"
273
+ }
274
+ else
275
+ echo "ℹ️ Develop branch doesn't exist, skipping sync"
276
+ fi
277
+
278
+ - name: Create release summary
279
+ if: success()
280
+ run: |
281
+ echo "## 🚀 Release Published" >> $GITHUB_STEP_SUMMARY
282
+ echo "- **Version**: ${{ steps.get_version.outputs.released_version }}" >> $GITHUB_STEP_SUMMARY
283
+ echo "- **PyPI**: [pyopenapi-gen ${{ steps.get_version.outputs.released_version }}](https://pypi.org/project/pyopenapi-gen/${{ steps.get_version.outputs.released_version }})" >> $GITHUB_STEP_SUMMARY
284
+ echo "- **GitHub Release**: [Release Notes](https://github.com/mindhiveoy/pyopenapi_gen/releases/tag/${{ steps.get_version.outputs.released_version }})" >> $GITHUB_STEP_SUMMARY
285
+
286
+ if [ -n "${{ steps.get_version.outputs.released_version }}" ]; then
287
+ echo "- **Branch Sync**: Version synced to staging and develop branches" >> $GITHUB_STEP_SUMMARY
288
+ fi
289
+
290
+ notify-completion:
291
+ needs: release
292
+ runs-on: ubuntu-latest
293
+ if: always()
294
+ steps:
295
+ - name: Report success
296
+ if: needs.release.result == 'success'
297
+ run: |
298
+ echo "✅ Semantic release completed successfully"
299
+
300
+ - name: Report failure
301
+ if: needs.release.result == 'failure'
302
+ run: |
303
+ echo "❌ Semantic release failed"
304
+ exit 1
@@ -1,4 +1,6 @@
1
1
  name: Staging Release (TestPyPI)
2
+ # This workflow handles development releases to TestPyPI
3
+ # Production releases are handled by semantic-release.yml
2
4
 
3
5
  on:
4
6
  push:
@@ -1,8 +1,12 @@
1
- name: Publish to TestPyPI (pre-release)
1
+ name: Publish to TestPyPI (manual)
2
2
 
3
3
  on:
4
- push:
5
- branches: [main]
4
+ workflow_dispatch:
5
+ inputs:
6
+ reason:
7
+ description: 'Reason for manual TestPyPI publish'
8
+ required: false
9
+ default: 'Manual testing'
6
10
 
7
11
  jobs:
8
12
  build-and-testpypi:
@@ -186,4 +186,7 @@ output_*
186
186
  **/.claude/settings.local.json
187
187
  out
188
188
  test_outputs
189
- temp_test
189
+ temp_test_process/
190
+ .deps-installed
191
+
192
+ _process/
@@ -0,0 +1 @@
1
+ 3.12