pyopenapi-gen 0.8.3__tar.gz → 0.8.6__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 (332) hide show
  1. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.github/BRANCH_PROTECTION.md +57 -15
  2. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.github/workflows/ci.yml +3 -5
  3. pyopenapi_gen-0.8.6/.github/workflows/claude-review-trigger.yml +68 -0
  4. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.github/workflows/claude.yml +13 -5
  5. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.github/workflows/main-checks.yml +1 -2
  6. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.github/workflows/pr-checks.yml +3 -4
  7. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.github/workflows/production-release.yml +1 -1
  8. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.github/workflows/testpypi-publish.yml +1 -2
  9. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.gitignore +5 -3
  10. pyopenapi_gen-0.8.6/CHANGELOG.md +130 -0
  11. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/CLAUDE.md +37 -2
  12. pyopenapi_gen-0.8.6/CONTRIBUTING.md +602 -0
  13. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/Makefile +5 -4
  14. pyopenapi_gen-0.8.6/PKG-INFO +383 -0
  15. pyopenapi_gen-0.8.6/README.md +325 -0
  16. pyopenapi_gen-0.8.6/RELEASE_NOTES_v0.8.5.md +81 -0
  17. pyopenapi_gen-0.8.6/RESPONSE_RESOLUTION_REFACTOR.md +137 -0
  18. pyopenapi_gen-0.8.6/debug_after_fix.py +55 -0
  19. pyopenapi_gen-0.8.6/debug_data_schema_names.py +56 -0
  20. pyopenapi_gen-0.8.6/debug_list_issue.py +69 -0
  21. pyopenapi_gen-0.8.6/debug_signature_issue.py +56 -0
  22. pyopenapi_gen-0.8.6/debug_strategy_resolver.py +70 -0
  23. pyopenapi_gen-0.8.6/docs/README.md +79 -0
  24. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/docs/architecture.md +65 -9
  25. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/poetry.lock +61 -185
  26. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/pyproject.toml +48 -13
  27. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/cli.py +5 -22
  28. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/context/import_collector.py +8 -8
  29. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/loader/operations/parser.py +1 -1
  30. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/context.py +2 -1
  31. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/cycle_helpers.py +1 -1
  32. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/keywords/properties_parser.py +4 -4
  33. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/schema_parser.py +4 -4
  34. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/transformers/inline_enum_extractor.py +1 -1
  35. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/postprocess_manager.py +39 -13
  36. pyopenapi_gen-0.8.6/src/pyopenapi_gen/core/schemas.py +125 -0
  37. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/utils.py +8 -3
  38. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/writers/python_construct_renderer.py +57 -9
  39. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/emitters/endpoints_emitter.py +1 -1
  40. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/helpers/endpoint_utils.py +4 -22
  41. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/helpers/type_cleaner.py +1 -1
  42. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/helpers/type_resolution/composition_resolver.py +1 -1
  43. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/helpers/type_resolution/finalizer.py +1 -1
  44. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/types/contracts/types.py +0 -1
  45. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/types/resolvers/response_resolver.py +5 -33
  46. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/types/resolvers/schema_resolver.py +2 -2
  47. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/types/services/type_service.py +0 -18
  48. pyopenapi_gen-0.8.6/src/pyopenapi_gen/types/strategies/__init__.py +5 -0
  49. pyopenapi_gen-0.8.6/src/pyopenapi_gen/types/strategies/response_strategy.py +187 -0
  50. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/endpoint/endpoint_visitor.py +1 -20
  51. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/endpoint/generators/docstring_generator.py +5 -3
  52. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/endpoint/generators/endpoint_method_generator.py +12 -6
  53. pyopenapi_gen-0.8.6/src/pyopenapi_gen/visit/endpoint/generators/response_handler_generator.py +506 -0
  54. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/endpoint/generators/signature_generator.py +7 -4
  55. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/endpoint/processors/import_analyzer.py +4 -2
  56. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/endpoint/processors/parameter_processor.py +1 -1
  57. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/model/dataclass_generator.py +32 -1
  58. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/cli/test_cli_edge_cases.py +7 -8
  59. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/cli/test_cli_edge_cases_comprehensive.py +9 -9
  60. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/cli/test_http_pagination_cli.py +0 -1
  61. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/test_cycle_detection.py +0 -47
  62. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_pagination.py +0 -8
  63. pyopenapi_gen-0.8.6/tests/core/test_schemas.py +773 -0
  64. pyopenapi_gen-0.8.6/tests/core/writers/test_python_construct_renderer_json_wizard.py +213 -0
  65. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/emitters/test_list_response_generation.py +20 -20
  66. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/emitters/test_models_emitter.py +5 -5
  67. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/generation/test_external_core_package.py +1 -1
  68. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/helpers/test_endpoint_utils_extended.py +0 -78
  69. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/helpers/test_named_resolver.py +3 -1
  70. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/helpers/test_object_resolver.py +14 -5
  71. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/helpers/test_type_helper.py +1 -1
  72. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/integrations/test_end_to_end_business_swagger.py +1 -25
  73. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/integrations/test_name_collisions.py +2 -2
  74. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/types/test_business_swagger_integration.py +13 -12
  75. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/types/test_contracts_types.py +0 -3
  76. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/types/test_response_resolver.py +169 -10
  77. pyopenapi_gen-0.8.6/tests/types/test_response_strategy.py +450 -0
  78. pyopenapi_gen-0.8.6/tests/types/test_response_strategy_simplified.py +328 -0
  79. pyopenapi_gen-0.8.6/tests/types/test_schema_resolver.py +643 -0
  80. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/endpoint/generators/test_docstring_generator.py +11 -8
  81. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/endpoint/generators/test_endpoint_method_generator.py +46 -10
  82. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/endpoint/generators/test_match_case_response.py +34 -21
  83. pyopenapi_gen-0.8.6/tests/visit/endpoint/generators/test_response_handler_generator.py +736 -0
  84. pyopenapi_gen-0.8.6/tests/visit/endpoint/generators/test_response_handler_generator_strategy.py +429 -0
  85. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/endpoint/generators/test_signature_generator.py +24 -15
  86. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/endpoint/generators/test_url_args_generator.py +1 -1
  87. pyopenapi_gen-0.8.6/tests/visit/endpoint/processors/test_import_analyzer.py +446 -0
  88. pyopenapi_gen-0.8.3/tests/visit/endpoint/processors/test_import_analyzer.py → pyopenapi_gen-0.8.6/tests/visit/endpoint/processors/test_import_analyzer.py.bak +40 -38
  89. pyopenapi_gen-0.8.6/tests/visit/model/test_dataclass_generator_json_wizard.py +248 -0
  90. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/test_model_visitor.py +45 -43
  91. pyopenapi_gen-0.8.3/PKG-INFO +0 -224
  92. pyopenapi_gen-0.8.3/README.md +0 -182
  93. pyopenapi_gen-0.8.3/src/pyopenapi_gen/core/schemas.py +0 -40
  94. pyopenapi_gen-0.8.3/src/pyopenapi_gen/visit/endpoint/generators/response_handler_generator.py +0 -497
  95. pyopenapi_gen-0.8.3/tests/core/test_schemas.py +0 -203
  96. pyopenapi_gen-0.8.3/tests/generation/test_response_unwrapping.py +0 -391
  97. pyopenapi_gen-0.8.3/tests/types/test_schema_resolver.py +0 -316
  98. pyopenapi_gen-0.8.3/tests/visit/endpoint/generators/test_response_handler_generator.py +0 -734
  99. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.bandit +0 -0
  100. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.cursor/mcp.json +0 -0
  101. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.cursor/rules/architecture.mdc +0 -0
  102. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.cursor/rules/coding-conventions.mdc +0 -0
  103. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.cursor/rules/project-goal.mdc +0 -0
  104. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.cursor/rules/testing.mdc +0 -0
  105. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.github/CODEOWNERS +0 -0
  106. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  107. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  108. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.github/dependabot.yml +0 -0
  109. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.github/workflows/promote-to-staging.yml +0 -0
  110. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.github/workflows/pypi-publish.yml +0 -0
  111. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.github/workflows/staging-publish.yml +0 -0
  112. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/.vscode/settings.json +0 -0
  113. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/LICENSE +0 -0
  114. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/TEST_MAP.md +0 -0
  115. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/docs/endpoint_visitor.md +0 -0
  116. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/docs/helpers.md +0 -0
  117. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/docs/ir_models.md +0 -0
  118. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/docs/line_writer.md +0 -0
  119. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/docs/loader.md +0 -0
  120. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/docs/model_visitor.md +0 -0
  121. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/docs/render_context.md +0 -0
  122. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/docs/unified_type_resolution.md +0 -0
  123. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/input/business_swagger.json +0 -0
  124. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/input/minimal_swagger.json +0 -0
  125. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/input/minimal_syntax_test.json +0 -0
  126. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/input/test_name_collision_spec.json +0 -0
  127. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/mkdocs.yml +0 -0
  128. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/__init__.py +0 -0
  129. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/__main__.py +0 -0
  130. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/context/file_manager.py +0 -0
  131. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/context/render_context.py +0 -0
  132. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/__init__.py +0 -0
  133. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/auth/base.py +0 -0
  134. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/auth/plugins.py +0 -0
  135. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/exceptions.py +0 -0
  136. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/http_transport.py +0 -0
  137. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/loader/__init__.py +0 -0
  138. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/loader/loader.py +0 -0
  139. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/loader/operations/__init__.py +0 -0
  140. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/loader/operations/post_processor.py +0 -0
  141. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/loader/operations/request_body.py +0 -0
  142. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/loader/parameters/__init__.py +0 -0
  143. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/loader/parameters/parser.py +0 -0
  144. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/loader/responses/__init__.py +0 -0
  145. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/loader/responses/parser.py +0 -0
  146. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/loader/schemas/__init__.py +0 -0
  147. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/loader/schemas/extractor.py +0 -0
  148. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/pagination.py +0 -0
  149. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/__init__.py +0 -0
  150. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/common/__init__.py +0 -0
  151. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/common/ref_resolution/__init__.py +0 -0
  152. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/__init__.py +0 -0
  153. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/cyclic_properties.py +0 -0
  154. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/direct_cycle.py +0 -0
  155. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/existing_schema.py +0 -0
  156. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/list_response.py +0 -0
  157. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/missing_ref.py +0 -0
  158. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/new_schema.py +0 -0
  159. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/stripped_suffix.py +0 -0
  160. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/common/ref_resolution/resolve_schema_ref.py +0 -0
  161. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/common/type_parser.py +0 -0
  162. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/keywords/__init__.py +0 -0
  163. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/keywords/all_of_parser.py +0 -0
  164. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/keywords/any_of_parser.py +0 -0
  165. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/keywords/array_items_parser.py +0 -0
  166. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/keywords/one_of_parser.py +0 -0
  167. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/schema_finalizer.py +0 -0
  168. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/transformers/__init__.py +0 -0
  169. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/transformers/inline_object_promoter.py +0 -0
  170. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/parsing/unified_cycle_detection.py +0 -0
  171. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/streaming_helpers.py +0 -0
  172. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/telemetry.py +0 -0
  173. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/warning_collector.py +0 -0
  174. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/writers/code_writer.py +0 -0
  175. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/writers/documentation_writer.py +0 -0
  176. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core/writers/line_writer.py +0 -0
  177. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/core_package_template/README.md +0 -0
  178. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/emit/models_emitter.py +0 -0
  179. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/emitters/client_emitter.py +0 -0
  180. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/emitters/core_emitter.py +0 -0
  181. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/emitters/docs_emitter.py +0 -0
  182. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/emitters/exceptions_emitter.py +0 -0
  183. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/emitters/models_emitter.py +0 -0
  184. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/generator/client_generator.py +0 -0
  185. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/helpers/__init__.py +0 -0
  186. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/helpers/type_helper.py +0 -0
  187. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/helpers/type_resolution/__init__.py +0 -0
  188. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/helpers/type_resolution/array_resolver.py +0 -0
  189. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/helpers/type_resolution/named_resolver.py +0 -0
  190. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/helpers/type_resolution/object_resolver.py +0 -0
  191. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/helpers/type_resolution/primitive_resolver.py +0 -0
  192. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/helpers/type_resolution/resolver.py +0 -0
  193. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/helpers/url_utils.py +0 -0
  194. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/http_types.py +0 -0
  195. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/ir.py +0 -0
  196. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/py.typed +0 -0
  197. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/types/__init__.py +0 -0
  198. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/types/contracts/__init__.py +0 -0
  199. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/types/contracts/protocols.py +0 -0
  200. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/types/resolvers/__init__.py +0 -0
  201. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/types/resolvers/reference_resolver.py +0 -0
  202. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/types/services/__init__.py +0 -0
  203. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/client_visitor.py +0 -0
  204. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/docs_visitor.py +0 -0
  205. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/endpoint/__init__.py +0 -0
  206. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/endpoint/generators/__init__.py +0 -0
  207. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/endpoint/generators/request_generator.py +0 -0
  208. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/endpoint/generators/url_args_generator.py +0 -0
  209. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/endpoint/processors/__init__.py +0 -0
  210. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/exception_visitor.py +0 -0
  211. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/model/__init__.py +0 -0
  212. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/model/alias_generator.py +0 -0
  213. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/model/enum_generator.py +0 -0
  214. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/model/model_visitor.py +0 -0
  215. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/src/pyopenapi_gen/visit/visitor.py +0 -0
  216. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/__init__.py +0 -0
  217. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/auth/auth_analysis.md +0 -0
  218. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/auth/test_auth_base.py +0 -0
  219. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/auth/test_auth_plugins.py +0 -0
  220. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/cli/cli_analysis.md +0 -0
  221. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/cli/test_cli_backup_diff.py +0 -0
  222. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/cli/test_cli_internal_utils.py +0 -0
  223. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/context/context_analysis.md +0 -0
  224. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/context/test_file_manager.py +0 -0
  225. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/context/test_import_collector.py +0 -0
  226. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/context/test_render_context.py +0 -0
  227. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/context/test_render_context_imports.py +0 -0
  228. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/context/test_render_context_relative_paths.py +0 -0
  229. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/core_analysis.md +0 -0
  230. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/loader/test_extractor.py +0 -0
  231. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/common/ref_resolution/helpers/helpers_analysis.md +0 -0
  232. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/common/ref_resolution/helpers/test_cyclic_properties.py +0 -0
  233. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/common/ref_resolution/helpers/test_direct_cycle.py +0 -0
  234. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/common/ref_resolution/helpers/test_existing_schema.py +0 -0
  235. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/common/ref_resolution/helpers/test_list_response.py +0 -0
  236. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/common/ref_resolution/helpers/test_missing_ref.py +0 -0
  237. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/common/ref_resolution/helpers/test_new_schema.py +0 -0
  238. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/common/ref_resolution/helpers/test_stripped_suffix.py +0 -0
  239. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/keywords/__init__.py +0 -0
  240. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/keywords/keywords_analysis.md +0 -0
  241. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/keywords/test_all_of_parser.py +0 -0
  242. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/keywords/test_any_of_parser.py +0 -0
  243. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/keywords/test_array_items_parser.py +0 -0
  244. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/keywords/test_one_of_parser.py +0 -0
  245. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/keywords/test_properties_parser.py +0 -0
  246. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/parsing_analysis.md +0 -0
  247. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/test_context.py +0 -0
  248. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/test_cycle_helpers.py +0 -0
  249. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/test_improved_schema_naming.py +0 -0
  250. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/test_inline_enum_extractor.py +0 -0
  251. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/test_inline_object_promoter.py +0 -0
  252. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/test_logging.py +0 -0
  253. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/test_ref_resolver.py +0 -0
  254. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/test_schema_finalizer.py +0 -0
  255. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/test_schema_parser.py +0 -0
  256. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/test_schema_parser_list_response.py +0 -0
  257. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/parsing/test_type_parser.py +0 -0
  258. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_dataclass_serialization.py +0 -0
  259. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_detect_circular_imports.py +0 -0
  260. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_edge_cases_integration.py +0 -0
  261. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_edge_cases_systematic.py +0 -0
  262. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_exceptions_module.py +0 -0
  263. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_forward_references.py +0 -0
  264. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_http_transport.py +0 -0
  265. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_import_resolution.py +0 -0
  266. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_ir.py +0 -0
  267. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_ir_schema.py +0 -0
  268. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_loader.py +0 -0
  269. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_loader_extensive.py +0 -0
  270. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_loader_invalid_refs.py +0 -0
  271. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_loader_malformed.py +0 -0
  272. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_loader_media_types.py +0 -0
  273. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_parsing_context.py +0 -0
  274. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_protocol_defaults.py +0 -0
  275. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_schema_parser_specific_case.py +0 -0
  276. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_simple_self_ref_check.py +0 -0
  277. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_streaming_helpers.py +0 -0
  278. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_telemetry.py +0 -0
  279. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_telemetry_client.py +0 -0
  280. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_utils.py +0 -0
  281. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/test_warning_collector.py +0 -0
  282. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/writers/test_code_writer.py +0 -0
  283. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/writers/test_documentation_writer.py +0 -0
  284. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/writers/test_line_writer.py +0 -0
  285. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/core/writers/writers_analysis.md +0 -0
  286. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/emitters/emitters_analysis.md +0 -0
  287. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/emitters/test_client_emitter.py +0 -0
  288. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/emitters/test_docs_emitter.py +0 -0
  289. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/emitters/test_duplicate_operations.py +0 -0
  290. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/emitters/test_endpoints_emitter.py +0 -0
  291. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/emitters/test_exceptions_emitter.py +0 -0
  292. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/end_to_end/test_dataclass_serialization_e2e.py +0 -0
  293. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/examples/test_developer_experience_demo.py +0 -0
  294. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/generation/generation_analysis.md +0 -0
  295. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/generation_issues/specs/minimal_addmessage_like.json +0 -0
  296. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/generation_issues/test_addmessage_like_issues.py +0 -0
  297. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/generation_issues/test_agent_include_parameter_typing.py +0 -0
  298. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/generation_issues/test_message_batch_response_issue.py +0 -0
  299. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/helpers/helpers_analysis.md +0 -0
  300. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/helpers/test_array_resolver.py +0 -0
  301. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/helpers/test_endpoint_utils.py +0 -0
  302. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/helpers/test_get_endpoint_return_types.py +0 -0
  303. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/helpers/test_named_type_resolver.py +0 -0
  304. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/helpers/test_put_endpoint_return_types.py +0 -0
  305. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/helpers/test_type_cleaner.py +0 -0
  306. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/helpers/test_url_utils.py +0 -0
  307. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/helpers/test_utils_helpers.py +0 -0
  308. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/integration/test_generated_code_structure.py +0 -0
  309. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/integrations/integrations_analysis.md +0 -0
  310. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/integrations/test_business_swagger_message_type.py +0 -0
  311. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/integrations/test_end_to_end_petstore.py +0 -0
  312. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/specs/response_unwrapping_spec.yaml +0 -0
  313. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/test_analysis_overview.md +0 -0
  314. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/test_init.py +0 -0
  315. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/types/__init__.py +0 -0
  316. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/types/test_reference_resolver.py +0 -0
  317. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/types/test_type_service.py +0 -0
  318. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/__init__.py +0 -0
  319. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/endpoint/__init__.py +0 -0
  320. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/endpoint/generators/__init__.py +0 -0
  321. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/endpoint/generators/generators_analysis.md +0 -0
  322. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/endpoint/generators/test_dataclass_integration.py +0 -0
  323. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/endpoint/generators/test_request_generator.py +0 -0
  324. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/endpoint/processors/__init__.py +0 -0
  325. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/endpoint/processors/test_parameter_processor.py +0 -0
  326. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/endpoint/test_endpoint_visitor.py +0 -0
  327. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/model/__init__.py +0 -0
  328. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/model/test_alias_generator.py +0 -0
  329. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/model/test_dataclass_generator.py +0 -0
  330. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/model/test_enum_generator.py +0 -0
  331. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/test_client_visitor.py +0 -0
  332. {pyopenapi_gen-0.8.3 → pyopenapi_gen-0.8.6}/tests/visit/test_visitor.py +0 -0
@@ -1,10 +1,18 @@
1
1
  # Branch Protection Configuration
2
2
 
3
- This document outlines the required GitHub branch protection settings for the `develop` branch.
3
+ This document outlines the GitHub branch protection settings for the `develop`, `staging`, and `main` branches.
4
+
5
+ ## 🛡️ Branch Protection Status
6
+
7
+ All three critical branches are now **FULLY PROTECTED** with the following settings:
8
+
9
+ - **main**: ✅ Protected with full CI/CD enforcement
10
+ - **staging**: ✅ Protected with full CI/CD enforcement
11
+ - **develop**: ✅ Protected with full CI/CD enforcement
4
12
 
5
13
  ## Required Settings
6
14
 
7
- ### Branch Protection Rules for `develop`
15
+ ### Branch Protection Rules for `develop`, `staging`, and `main`
8
16
 
9
17
  1. **Require pull request reviews before merging**
10
18
  - Required approving reviews: 1
@@ -14,11 +22,11 @@ This document outlines the required GitHub branch protection settings for the `d
14
22
  2. **Require status checks to pass before merging**
15
23
  - Require branches to be up to date before merging: ✅
16
24
  - Required status checks:
17
- - `quality-checks (3.10)`
18
- - `quality-checks (3.11)`
19
- - `quality-checks (3.12)`
20
- - `security-scan`
21
- - `integration-tests`
25
+ - `format-check` (Black formatting)
26
+ - `lint` (Ruff linting)
27
+ - `typecheck` (MyPy type checking)
28
+ - `security` (Bandit security scanning)
29
+ - `test` (Full test suite with 85% coverage)
22
30
 
23
31
  3. **Require conversation resolution before merging**: ✅
24
32
 
@@ -34,6 +42,22 @@ This document outlines the required GitHub branch protection settings for the `d
34
42
 
35
43
  9. **Allow deletions**: ❌
36
44
 
45
+ ## 🔒 Protection Features
46
+
47
+ ### Deletion Protection
48
+ All branches are protected from accidental deletion:
49
+ - Force pushes are disabled
50
+ - Branch deletion is explicitly forbidden
51
+ - Admin privileges still enforce protection rules
52
+
53
+ ### Quality Gates
54
+ Every PR must pass all quality checks:
55
+ - Code formatting (Black)
56
+ - Linting (Ruff)
57
+ - Type checking (MyPy strict mode)
58
+ - Security scanning (Bandit)
59
+ - Test suite with 85% coverage minimum
60
+
37
61
  ## How to Configure
38
62
 
39
63
  ### Via GitHub Web Interface
@@ -44,16 +68,34 @@ This document outlines the required GitHub branch protection settings for the `d
44
68
  4. Configure the settings as outlined above
45
69
  5. Save the branch protection rule
46
70
 
47
- ### Via GitHub CLI (if available)
71
+ ### Via GitHub CLI
72
+
73
+ The protection was applied using GitHub CLI. Here's how to configure each branch:
48
74
 
49
75
  ```bash
50
- # Example command (adjust as needed)
51
- gh api repos/:owner/:repo/branches/develop/protection \
52
- --method PUT \
53
- --field required_status_checks='{"strict":true,"contexts":["quality-checks (3.10)","quality-checks (3.11)","quality-checks (3.12)","security-scan","integration-tests"]}' \
54
- --field enforce_admins=true \
55
- --field required_pull_request_reviews='{"required_approving_review_count":1,"dismiss_stale_reviews":true}' \
56
- --field restrictions=null
76
+ # Create protection JSON
77
+ cat > branch_protection.json << EOF
78
+ {
79
+ "required_status_checks": {
80
+ "strict": true,
81
+ "contexts": ["format-check", "lint", "typecheck", "security", "test"]
82
+ },
83
+ "enforce_admins": true,
84
+ "required_pull_request_reviews": {
85
+ "required_approving_review_count": 1,
86
+ "dismiss_stale_reviews": true,
87
+ "require_code_owner_reviews": false
88
+ },
89
+ "restrictions": null,
90
+ "allow_deletions": false,
91
+ "allow_force_pushes": false
92
+ }
93
+ EOF
94
+
95
+ # Apply to each branch
96
+ gh api --method PUT repos/OWNER/REPO/branches/main/protection --input branch_protection.json
97
+ gh api --method PUT repos/OWNER/REPO/branches/develop/protection --input branch_protection.json
98
+ gh api --method PUT repos/OWNER/REPO/branches/staging/protection --input branch_protection.json
57
99
  ```
58
100
 
59
101
  ## Quality Gates Enforced
@@ -2,9 +2,9 @@ name: CI
2
2
 
3
3
  on:
4
4
  push:
5
- branches: [main, develop]
5
+ branches: [main, develop, staging]
6
6
  pull_request:
7
- branches: [main, develop]
7
+ branches: [main, develop, staging]
8
8
 
9
9
  jobs:
10
10
  test:
@@ -39,6 +39,4 @@ jobs:
39
39
  poetry run mypy src/
40
40
  - name: Run tests with coverage
41
41
  run: |
42
- poetry run pytest --cov=src --cov-report=xml
43
- - name: Generate HTML coverage report
44
- run: poetry run pytest --cov=src --cov-report=html
42
+ poetry run pytest --cov=src --cov-report=xml --cov-report=html
@@ -0,0 +1,68 @@
1
+ name: Notify Claude for PR Review
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, synchronize, ready_for_review]
6
+
7
+ jobs:
8
+ notify-claude:
9
+ runs-on: ubuntu-latest
10
+ if: github.event.pull_request.draft == false
11
+
12
+ permissions:
13
+ contents: read
14
+ pull-requests: write
15
+
16
+ steps:
17
+ - name: Checkout repository
18
+ uses: actions/checkout@v4
19
+ with:
20
+ token: ${{ secrets.GITHUB_TOKEN }}
21
+
22
+ - name: Check if PR needs Claude review
23
+ id: needs_review
24
+ run: |
25
+ pr_author="${{ github.event.pull_request.user.login }}"
26
+ pr_title="${{ github.event.pull_request.title }}"
27
+ pr_base="${{ github.event.pull_request.base.ref }}"
28
+
29
+ echo "PR Author: $pr_author"
30
+ echo "PR Title: $pr_title"
31
+ echo "PR Base Branch: $pr_base"
32
+
33
+ # PRs that should get Claude review:
34
+ # 1. ALL PRs targeting develop branch (main development branch)
35
+ # 2. Dependabot PRs (dependency updates)
36
+ # 3. Version bump PRs from devops-mindhive
37
+ # 4. Documentation PRs from devops-mindhive
38
+ # 5. PRs with [claude-review] tag
39
+
40
+ needs_review=false
41
+
42
+ if [[ "$pr_base" == "develop" ]] || \
43
+ [[ "$pr_author" == "dependabot[bot]" ]] || \
44
+ [[ "$pr_author" == "devops-mindhive" && "$pr_title" =~ ^(release|chore|docs): ]] || \
45
+ [[ "$pr_title" =~ \[claude-review\] ]]; then
46
+ needs_review=true
47
+ fi
48
+
49
+ echo "needs_review=$needs_review" >> $GITHUB_OUTPUT
50
+
51
+ if [[ "$needs_review" == "true" ]]; then
52
+ echo "✅ PR needs Claude review"
53
+ else
54
+ echo "❌ PR does not need automatic Claude review"
55
+ fi
56
+
57
+ - name: Request Claude review
58
+ if: steps.needs_review.outputs.needs_review == 'true'
59
+ run: |
60
+ gh pr comment ${{ github.event.pull_request.number }} --body "@claude Please review this PR for code quality, security, and compatibility. If you find any issues:
61
+
62
+ 1. **For fixable issues** (formatting, linting, small bugs): Please fix them directly by committing to this PR branch
63
+ 2. **For larger issues**: Comment with specific feedback and create issues if needed
64
+ 3. **If everything looks good**: Approve and merge the PR
65
+
66
+ You have full access to modify code, run tests, and ensure the PR meets our quality standards."
67
+ env:
68
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -9,6 +9,8 @@ on:
9
9
  types: [opened, assigned]
10
10
  pull_request_review:
11
11
  types: [submitted]
12
+ pull_request:
13
+ types: [opened, synchronize, ready_for_review]
12
14
 
13
15
  jobs:
14
16
  claude:
@@ -16,18 +18,24 @@ jobs:
16
18
  (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17
19
  (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18
20
  (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19
- (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
21
+ (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))) ||
22
+ (github.event_name == 'pull_request' && github.event.pull_request.draft == false)
20
23
  runs-on: ubuntu-latest
21
24
  permissions:
22
- contents: read
23
- pull-requests: read
24
- issues: read
25
+ contents: write
26
+ pull-requests: write
27
+ issues: write
25
28
  id-token: write
29
+ actions: read
30
+ checks: read
31
+ statuses: read
32
+ repository-projects: read
26
33
  steps:
27
34
  - name: Checkout repository
28
35
  uses: actions/checkout@v4
29
36
  with:
30
- fetch-depth: 1
37
+ fetch-depth: 0
38
+ token: ${{ secrets.GITHUB_TOKEN }}
31
39
 
32
40
  - name: Run Claude Code
33
41
  id: claude
@@ -10,7 +10,7 @@ jobs:
10
10
  runs-on: ubuntu-latest
11
11
  strategy:
12
12
  matrix:
13
- python-version: ["3.10", "3.11", "3.12"]
13
+ python-version: ["3.12"]
14
14
 
15
15
  steps:
16
16
  - name: Checkout code
@@ -57,7 +57,6 @@ jobs:
57
57
 
58
58
  - name: Upload coverage artifacts
59
59
  uses: actions/upload-artifact@v4
60
- if: matrix.python-version == '3.12'
61
60
  with:
62
61
  name: coverage-report
63
62
  path: htmlcov/
@@ -2,7 +2,7 @@ name: Pull Request Checks
2
2
 
3
3
  on:
4
4
  pull_request:
5
- branches: [develop]
5
+ branches: [develop, staging, main]
6
6
  workflow_dispatch:
7
7
 
8
8
  jobs:
@@ -10,7 +10,7 @@ jobs:
10
10
  runs-on: ubuntu-latest
11
11
  strategy:
12
12
  matrix:
13
- python-version: ["3.10", "3.11", "3.12"]
13
+ python-version: ["3.12"]
14
14
 
15
15
  steps:
16
16
  - name: Checkout code
@@ -59,7 +59,6 @@ jobs:
59
59
 
60
60
  - name: Upload coverage to Codecov
61
61
  uses: codecov/codecov-action@v4
62
- if: matrix.python-version == '3.12'
63
62
  with:
64
63
  file: ./coverage.xml
65
64
  flags: unittests
@@ -131,7 +130,7 @@ jobs:
131
130
  run: |
132
131
  poetry run pyopenapi-gen --help
133
132
  # Test basic generation
134
- poetry run pyopenapi-gen gen input/minimal_swagger.json --project-root ./test_output --output-package test_client --force --no-postprocess
133
+ poetry run pyopenapi-gen input/minimal_swagger.json --project-root ./test_output --output-package test_client --force --no-postprocess
135
134
 
136
135
  - name: Verify generated client structure
137
136
  run: |
@@ -148,7 +148,7 @@ jobs:
148
148
 
149
149
  ## ✅ Compatibility
150
150
 
151
- - Python 3.10, 3.11, 3.12
151
+ - Python 3.12+
152
152
  - Linux, macOS
153
153
  - Enterprise-ready with comprehensive error handling
154
154
  draft: false
@@ -3,12 +3,11 @@ name: Publish to TestPyPI (pre-release)
3
3
  on:
4
4
  push:
5
5
  branches: [main]
6
- pull_request:
7
- branches: [main]
8
6
 
9
7
  jobs:
10
8
  build-and-testpypi:
11
9
  runs-on: ubuntu-latest
10
+ environment: staging
12
11
  steps:
13
12
  - uses: actions/checkout@v4
14
13
  - name: Set up Python
@@ -37,20 +37,21 @@ pip-log.txt
37
37
  pip-delete-this-directory.txt
38
38
 
39
39
  # Unit test / coverage reports
40
- htmlcov/
41
40
  .tox/
42
41
  .nox/
43
42
  .coverage
44
43
  .coverage.*
45
44
  .cache
46
45
  nosetests.xml
47
- coverage.xml
48
46
  *.cover
49
47
  *.py,cover
50
48
  .hypothesis/
51
49
  .pytest_cache/
52
50
  cover/
53
51
 
52
+ # Coverage reports folder
53
+ coverage_reports/
54
+
54
55
  # Translations
55
56
  *.mo
56
57
  *.pot
@@ -184,4 +185,5 @@ output
184
185
  output_*
185
186
  **/.claude/settings.local.json
186
187
  out
187
- test_outputs
188
+ test_outputs
189
+ temp_test
@@ -0,0 +1,130 @@
1
+ # Changelog
2
+
3
+ All notable changes to PyOpenAPI Generator are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.8.4] - 2024-11-06
11
+
12
+ ### Added
13
+ - Claude GitHub App automation for PR reviews and fixes
14
+ - Auto-review for all PRs targeting develop branch
15
+ - Professional-grade documentation overhaul with comprehensive README.md
16
+ - Detailed contributing guidelines in CONTRIBUTING.md
17
+ - Formal changelog protocol following Keep a Changelog format
18
+ - Documentation index in docs/README.md with navigation
19
+ - Universal Why→What→How documentation structure standards
20
+
21
+ ### Changed
22
+ - TestPyPI workflow now uses staging environment for proper secret access
23
+ - Enhanced README.md with modern badges, better structure, and comprehensive examples
24
+ - Improved project metadata and documentation standards in pyproject.toml
25
+ - Updated architecture documentation to follow established standards
26
+ - Optimized CI workflow to eliminate duplicate test execution
27
+
28
+ ### Fixed
29
+ - Claude.yml workflow validation errors (removed invalid metadata permission)
30
+ - TestPyPI publishing failures due to secret access issues
31
+
32
+ ### Removed
33
+ - Unused Jinja2 dependency (project uses visitor pattern, not templates)
34
+ - Feature status promises to avoid implementation commitments
35
+
36
+ ## [0.8.3] - 2024-11-06
37
+
38
+ ### Changed
39
+ - Minor improvements and maintenance updates
40
+
41
+ ## [0.8.1] - 2024-11-06
42
+
43
+ ### Added
44
+ - Enhanced schema handling capabilities
45
+ - Minor improvements to code generation
46
+
47
+ ### Changed
48
+ - Improved schema processing logic
49
+
50
+ ## [0.8.0] - 2024-11-06
51
+
52
+ ### Added
53
+ - ⭐ **NEW**: Unified type resolution system (`types/` package)
54
+ - Clean architecture with contracts, resolvers, and services
55
+ - Dependency injection with protocol-based design
56
+ - Comprehensive test coverage for type resolution
57
+ - Enterprise-grade developer experience improvements
58
+ - Unified architecture across all components
59
+
60
+ ### Changed
61
+ - Major refactoring to use unified type resolution throughout codebase
62
+ - Enhanced code generation reliability and consistency
63
+ - Improved error handling and type safety
64
+
65
+ ### Fixed
66
+ - All failing tests resolved with new architecture
67
+ - mypy import errors resolved with proper httpx dependency
68
+
69
+ ### Technical Details
70
+ - Implemented unified type resolution system for consistent type handling
71
+ - Applied black formatting to all source files
72
+ - Enhanced testing coverage and reliability
73
+
74
+ ## [0.7.x] - Previous Versions
75
+
76
+ ### Added
77
+ - Core OpenAPI client generation functionality
78
+ - Async-first Python client architecture
79
+ - Advanced cycle detection for complex schemas
80
+ - Pluggable authentication system
81
+ - Smart pagination support
82
+ - Response unwrapping capabilities
83
+ - Tag-based operation organization
84
+ - Comprehensive error handling
85
+ - Self-contained client generation (zero runtime dependencies)
86
+
87
+ ### Features Established
88
+ - Three-stage pipeline: Load → Visit → Emit
89
+ - Intermediate Representation (IR) for stable code generation
90
+ - Support for Python 3.10-3.12
91
+ - Integration with modern Python tooling (Black, Ruff, mypy)
92
+ - Comprehensive test suite with high coverage requirements
93
+
94
+ ---
95
+
96
+ ## Release Notes Format
97
+
98
+ Each release includes:
99
+
100
+ - **Added**: New features and capabilities
101
+ - **Changed**: Modifications to existing functionality
102
+ - **Deprecated**: Features marked for future removal
103
+ - **Removed**: Features that have been removed
104
+ - **Fixed**: Bug fixes and issue resolutions
105
+ - **Security**: Security vulnerability fixes
106
+
107
+ ## Version History Links
108
+
109
+ - [Unreleased]: Compare against latest release
110
+ - [0.8.3]: https://github.com/your-org/pyopenapi-gen/releases/tag/v0.8.3
111
+ - [0.8.1]: https://github.com/your-org/pyopenapi-gen/releases/tag/v0.8.1
112
+ - [0.8.0]: https://github.com/your-org/pyopenapi-gen/releases/tag/v0.8.0
113
+
114
+ ## Contributing to the Changelog
115
+
116
+ When contributing changes:
117
+
118
+ 1. Add entries to the `[Unreleased]` section
119
+ 2. Use the appropriate category (Added, Changed, Fixed, etc.)
120
+ 3. Write clear, descriptive entries
121
+ 4. Include issue/PR references when relevant
122
+ 5. Follow the established format and tone
123
+
124
+ Example entry:
125
+ ```markdown
126
+ ### Added
127
+ - OAuth2 authentication support with refresh token handling (#123)
128
+ ```
129
+
130
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for complete guidelines.
@@ -1,6 +1,41 @@
1
1
  # CLAUDE.md
2
2
 
3
- This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
3
+ This file provides guidance to Claude Code (claude.ai/code) and the Claude GitHub App when working with code in this repository.
4
+
5
+ ## Claude GitHub App Capabilities
6
+
7
+ The Claude GitHub App is configured with extensive permissions to independently operate on this repository:
8
+
9
+ ### Automated PR Review & Fixes
10
+ - **Code Review**: Automatically triggered for dependabot PRs, version bumps, and documentation changes
11
+ - **Issue Fixing**: Can directly commit fixes to PR branches for:
12
+ - Formatting issues (Black, Ruff)
13
+ - Linting violations
14
+ - Type checking errors
15
+ - Security issues
16
+ - Small bugs and improvements
17
+ - **Quality Assurance**: Runs `make quality` and `make test` to ensure all changes meet standards
18
+ - **Merge Decisions**: Approves and merges PRs when all criteria are met
19
+
20
+ ### Repository Management
21
+ - **Issue Creation**: Creates detailed issues for complex problems that need human attention
22
+ - **Branch Management**: Can work on feature branches and create new branches as needed
23
+ - **Release Management**: Assists with version bumps and changelog updates
24
+ - **Documentation**: Updates documentation to reflect code changes
25
+
26
+ ### Permissions
27
+ The Claude GitHub App has the following permissions:
28
+ - `contents: write` - Modify files and commit changes
29
+ - `pull-requests: write` - Review, approve, and merge PRs
30
+ - `issues: write` - Create and manage issues
31
+ - `actions: read` - Monitor CI/CD status
32
+ - `checks: read` - Review test results
33
+ - `statuses: read` - Check status checks
34
+
35
+ ### Triggering Claude Reviews
36
+ 1. **Automatic**: PRs from dependabot, devops-mindhive (docs/release), or with `[claude-review]` tag
37
+ 2. **Manual**: Comment `@claude` on any PR, issue, or review to request assistance
38
+ 3. **On PR Events**: New PRs automatically get Claude attention for quality review
4
39
 
5
40
  # PyOpenAPI Generator
6
41
 
@@ -391,7 +426,7 @@ Located in `core/parsing/unified_cycle_detection.py` with:
391
426
  - **Formatting**: Black (120 char line length)
392
427
  - **Linting**: Ruff for code quality and import sorting
393
428
  - **Type Safety**: mypy strict mode with 100% coverage
394
- - **Compatibility**: Python 3.10-3.12
429
+ - **Compatibility**: Python 3.12+
395
430
 
396
431
  ### Testing Requirements
397
432
  Follow cursor rules strictly: