pyopenapi-gen 0.14.3__tar.gz → 0.16.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.

Potentially problematic release.


This version of pyopenapi-gen might be problematic. Click here for more details.

Files changed (339) hide show
  1. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/workflows/semantic-release.yml +33 -0
  2. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.gitignore +5 -1
  3. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/CHANGELOG.md +181 -0
  4. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/CLAUDE.md +233 -0
  5. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/Makefile +7 -2
  6. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/PKG-INFO +1 -1
  7. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/coverage.xml +124 -103
  8. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/input/business_swagger.json +420 -285
  9. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/pyproject.toml +4 -4
  10. pyopenapi_gen-0.16.1/scripts/sync_version_to_init.py +139 -0
  11. pyopenapi_gen-0.16.1/scripts/validate_version_sync.py +152 -0
  12. pyopenapi_gen-0.16.1/src/pyopenapi_gen/__init__.py +223 -0
  13. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/loader/parameters/parser.py +3 -3
  14. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/postprocess_manager.py +8 -8
  15. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/telemetry.py +5 -3
  16. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/types/resolvers/schema_resolver.py +21 -2
  17. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/types/services/type_service.py +4 -0
  18. pyopenapi_gen-0.16.1/tests/api/test_programmatic_api.py +328 -0
  19. pyopenapi_gen-0.16.1/tests/types/test_missing_imports_bug.py +202 -0
  20. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/types/test_schema_resolver.py +32 -0
  21. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/test_model_visitor.py +5 -3
  22. pyopenapi_gen-0.14.3/src/pyopenapi_gen/__init__.py +0 -114
  23. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.bandit +0 -0
  24. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.cursor/mcp.json +0 -0
  25. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.cursor/rules/architecture.mdc +0 -0
  26. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.cursor/rules/coding-conventions.mdc +0 -0
  27. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.cursor/rules/project-goal.mdc +0 -0
  28. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.cursor/rules/testing.mdc +0 -0
  29. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/BRANCH_PROTECTION.md +0 -0
  30. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/CLAUDE_CONFIGURATION.md +0 -0
  31. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/CODEOWNERS +0 -0
  32. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  33. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  34. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/dependabot.yml +0 -0
  35. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/workflows/ci.yml +0 -0
  36. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/workflows/claude-auto-approve.yml +0 -0
  37. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/workflows/claude-review-trigger.yml +0 -0
  38. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/workflows/claude.yml +0 -0
  39. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/workflows/pr-checks.yml +0 -0
  40. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/workflows/production-release.yml.backup +0 -0
  41. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/workflows/promote-to-staging.yml +0 -0
  42. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/workflows/staging-publish.yml +0 -0
  43. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.github/workflows/testpypi-publish.yml +0 -0
  44. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.python-version +0 -0
  45. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/.vscode/settings.json +0 -0
  46. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/CONTRIBUTING.md +0 -0
  47. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/LICENSE +0 -0
  48. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/README.md +0 -0
  49. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/docs/README.md +0 -0
  50. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/docs/architecture.md +0 -0
  51. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/docs/endpoint_visitor.md +0 -0
  52. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/docs/helpers.md +0 -0
  53. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/docs/ir_models.md +0 -0
  54. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/docs/line_writer.md +0 -0
  55. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/docs/loader.md +0 -0
  56. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/docs/model_visitor.md +0 -0
  57. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/docs/release-automation.md +0 -0
  58. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/docs/render_context.md +0 -0
  59. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/docs/unified_type_resolution.md +0 -0
  60. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/input/minimal_swagger.json +0 -0
  61. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/input/minimal_syntax_test.json +0 -0
  62. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/input/test_name_collision_spec.json +0 -0
  63. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/mkdocs.yml +0 -0
  64. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/poetry.lock +0 -0
  65. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/__main__.py +0 -0
  66. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/cli.py +0 -0
  67. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/context/CLAUDE.md +0 -0
  68. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/context/file_manager.py +0 -0
  69. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/context/import_collector.py +0 -0
  70. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/context/render_context.py +0 -0
  71. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/CLAUDE.md +0 -0
  72. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/__init__.py +0 -0
  73. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/auth/base.py +0 -0
  74. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/auth/plugins.py +0 -0
  75. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/exceptions.py +0 -0
  76. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/http_status_codes.py +0 -0
  77. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/http_transport.py +0 -0
  78. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/loader/__init__.py +0 -0
  79. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/loader/loader.py +0 -0
  80. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/loader/operations/__init__.py +0 -0
  81. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/loader/operations/parser.py +0 -0
  82. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/loader/operations/post_processor.py +0 -0
  83. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/loader/operations/request_body.py +0 -0
  84. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/loader/parameters/__init__.py +0 -0
  85. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/loader/responses/__init__.py +0 -0
  86. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/loader/responses/parser.py +0 -0
  87. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/loader/schemas/__init__.py +0 -0
  88. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/loader/schemas/extractor.py +0 -0
  89. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/pagination.py +0 -0
  90. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/__init__.py +0 -0
  91. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/common/__init__.py +0 -0
  92. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/__init__.py +0 -0
  93. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/__init__.py +0 -0
  94. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/cyclic_properties.py +0 -0
  95. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/direct_cycle.py +0 -0
  96. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/existing_schema.py +0 -0
  97. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/list_response.py +0 -0
  98. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/missing_ref.py +0 -0
  99. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/new_schema.py +0 -0
  100. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/stripped_suffix.py +0 -0
  101. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/resolve_schema_ref.py +0 -0
  102. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/common/type_parser.py +0 -0
  103. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/context.py +0 -0
  104. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/cycle_helpers.py +0 -0
  105. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/keywords/__init__.py +0 -0
  106. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/keywords/all_of_parser.py +0 -0
  107. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/keywords/any_of_parser.py +0 -0
  108. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/keywords/array_items_parser.py +0 -0
  109. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/keywords/one_of_parser.py +0 -0
  110. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/keywords/properties_parser.py +0 -0
  111. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/schema_finalizer.py +0 -0
  112. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/schema_parser.py +0 -0
  113. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/transformers/__init__.py +0 -0
  114. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/transformers/inline_enum_extractor.py +0 -0
  115. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/transformers/inline_object_promoter.py +0 -0
  116. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/parsing/unified_cycle_detection.py +0 -0
  117. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/schemas.py +0 -0
  118. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/streaming_helpers.py +0 -0
  119. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/utils.py +0 -0
  120. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/warning_collector.py +0 -0
  121. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/writers/code_writer.py +0 -0
  122. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/writers/documentation_writer.py +0 -0
  123. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/writers/line_writer.py +0 -0
  124. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core/writers/python_construct_renderer.py +0 -0
  125. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/core_package_template/README.md +0 -0
  126. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/emit/models_emitter.py +0 -0
  127. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/emitters/CLAUDE.md +0 -0
  128. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/emitters/client_emitter.py +0 -0
  129. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/emitters/core_emitter.py +0 -0
  130. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/emitters/docs_emitter.py +0 -0
  131. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/emitters/endpoints_emitter.py +0 -0
  132. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/emitters/exceptions_emitter.py +0 -0
  133. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/emitters/models_emitter.py +0 -0
  134. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/generator/CLAUDE.md +0 -0
  135. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/generator/client_generator.py +0 -0
  136. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/helpers/CLAUDE.md +0 -0
  137. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/helpers/__init__.py +0 -0
  138. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/helpers/endpoint_utils.py +0 -0
  139. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/helpers/type_cleaner.py +0 -0
  140. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/helpers/type_helper.py +0 -0
  141. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/helpers/type_resolution/__init__.py +0 -0
  142. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/helpers/type_resolution/array_resolver.py +0 -0
  143. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/helpers/type_resolution/composition_resolver.py +0 -0
  144. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/helpers/type_resolution/finalizer.py +0 -0
  145. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/helpers/type_resolution/named_resolver.py +0 -0
  146. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/helpers/type_resolution/object_resolver.py +0 -0
  147. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/helpers/type_resolution/primitive_resolver.py +0 -0
  148. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/helpers/type_resolution/resolver.py +0 -0
  149. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/helpers/url_utils.py +0 -0
  150. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/http_types.py +0 -0
  151. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/ir.py +0 -0
  152. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/py.typed +0 -0
  153. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/types/CLAUDE.md +0 -0
  154. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/types/__init__.py +0 -0
  155. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/types/contracts/__init__.py +0 -0
  156. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/types/contracts/protocols.py +0 -0
  157. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/types/contracts/types.py +0 -0
  158. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/types/resolvers/__init__.py +0 -0
  159. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/types/resolvers/reference_resolver.py +0 -0
  160. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/types/resolvers/response_resolver.py +0 -0
  161. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/types/services/__init__.py +0 -0
  162. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/types/strategies/__init__.py +0 -0
  163. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/types/strategies/response_strategy.py +0 -0
  164. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/CLAUDE.md +0 -0
  165. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/client_visitor.py +0 -0
  166. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/docs_visitor.py +0 -0
  167. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/endpoint/__init__.py +0 -0
  168. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/endpoint/endpoint_visitor.py +0 -0
  169. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/endpoint/generators/__init__.py +0 -0
  170. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/endpoint/generators/docstring_generator.py +0 -0
  171. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/endpoint/generators/endpoint_method_generator.py +0 -0
  172. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/endpoint/generators/request_generator.py +0 -0
  173. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/endpoint/generators/response_handler_generator.py +0 -0
  174. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/endpoint/generators/signature_generator.py +0 -0
  175. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/endpoint/generators/url_args_generator.py +0 -0
  176. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/endpoint/processors/__init__.py +0 -0
  177. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/endpoint/processors/import_analyzer.py +0 -0
  178. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/endpoint/processors/parameter_processor.py +0 -0
  179. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/exception_visitor.py +0 -0
  180. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/model/__init__.py +0 -0
  181. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/model/alias_generator.py +0 -0
  182. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/model/dataclass_generator.py +0 -0
  183. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/model/enum_generator.py +0 -0
  184. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/model/model_visitor.py +0 -0
  185. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/src/pyopenapi_gen/visit/visitor.py +0 -0
  186. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/__init__.py +0 -0
  187. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/auth/auth_analysis.md +0 -0
  188. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/auth/test_auth_base.py +0 -0
  189. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/auth/test_auth_plugins.py +0 -0
  190. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/cli/cli_analysis.md +0 -0
  191. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/cli/test_cli_backup_diff.py +0 -0
  192. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/cli/test_cli_edge_cases.py +0 -0
  193. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/cli/test_cli_edge_cases_comprehensive.py +0 -0
  194. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/cli/test_cli_internal_utils.py +0 -0
  195. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/cli/test_http_pagination_cli.py +0 -0
  196. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/context/context_analysis.md +0 -0
  197. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/context/test_core_import_path.py +0 -0
  198. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/context/test_file_manager.py +0 -0
  199. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/context/test_import_collector.py +0 -0
  200. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/context/test_render_context.py +0 -0
  201. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/context/test_render_context_imports.py +0 -0
  202. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/context/test_render_context_relative_paths.py +0 -0
  203. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/core_analysis.md +0 -0
  204. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/loader/parameters/test_inline_enum_array_params.py +0 -0
  205. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/loader/test_extractor.py +0 -0
  206. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/loader/test_top_level_enum_extraction.py +0 -0
  207. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/common/ref_resolution/helpers/helpers_analysis.md +0 -0
  208. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/common/ref_resolution/helpers/test_cyclic_properties.py +0 -0
  209. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/common/ref_resolution/helpers/test_direct_cycle.py +0 -0
  210. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/common/ref_resolution/helpers/test_existing_schema.py +0 -0
  211. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/common/ref_resolution/helpers/test_list_response.py +0 -0
  212. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/common/ref_resolution/helpers/test_missing_ref.py +0 -0
  213. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/common/ref_resolution/helpers/test_new_schema.py +0 -0
  214. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/common/ref_resolution/helpers/test_stripped_suffix.py +0 -0
  215. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/keywords/__init__.py +0 -0
  216. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/keywords/keywords_analysis.md +0 -0
  217. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/keywords/test_all_of_parser.py +0 -0
  218. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/keywords/test_any_of_parser.py +0 -0
  219. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/keywords/test_array_items_parser.py +0 -0
  220. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/keywords/test_one_of_parser.py +0 -0
  221. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/keywords/test_properties_parser.py +0 -0
  222. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/parsing_analysis.md +0 -0
  223. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/test_context.py +0 -0
  224. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/test_cycle_detection.py +0 -0
  225. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/test_cycle_helpers.py +0 -0
  226. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/test_improved_schema_naming.py +0 -0
  227. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/test_inline_enum_extractor.py +0 -0
  228. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/test_inline_object_promoter.py +0 -0
  229. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/test_logging.py +0 -0
  230. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/test_ref_resolver.py +0 -0
  231. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/test_schema_finalizer.py +0 -0
  232. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/test_schema_parser.py +0 -0
  233. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/test_schema_parser_list_response.py +0 -0
  234. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/parsing/test_type_parser.py +0 -0
  235. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_dataclass_serialization.py +0 -0
  236. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_detect_circular_imports.py +0 -0
  237. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_edge_cases_integration.py +0 -0
  238. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_edge_cases_systematic.py +0 -0
  239. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_exceptions_module.py +0 -0
  240. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_forward_references.py +0 -0
  241. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_http_transport.py +0 -0
  242. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_import_resolution.py +0 -0
  243. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_ir.py +0 -0
  244. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_ir_schema.py +0 -0
  245. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_loader.py +0 -0
  246. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_loader_extensive.py +0 -0
  247. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_loader_invalid_refs.py +0 -0
  248. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_loader_malformed.py +0 -0
  249. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_loader_media_types.py +0 -0
  250. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_pagination.py +0 -0
  251. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_parsing_context.py +0 -0
  252. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_protocol_defaults.py +0 -0
  253. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_schema_parser_specific_case.py +0 -0
  254. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_schemas.py +0 -0
  255. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_simple_self_ref_check.py +0 -0
  256. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_streaming_helpers.py +0 -0
  257. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_telemetry.py +0 -0
  258. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_telemetry_client.py +0 -0
  259. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_utils.py +0 -0
  260. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/test_warning_collector.py +0 -0
  261. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/writers/test_code_writer.py +0 -0
  262. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/writers/test_documentation_writer.py +0 -0
  263. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/writers/test_line_writer.py +0 -0
  264. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/writers/test_python_construct_renderer_json_wizard.py +0 -0
  265. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/core/writers/writers_analysis.md +0 -0
  266. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/emitters/emitters_analysis.md +0 -0
  267. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/emitters/test_client_emitter.py +0 -0
  268. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/emitters/test_docs_emitter.py +0 -0
  269. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/emitters/test_duplicate_operations.py +0 -0
  270. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/emitters/test_endpoints_emitter.py +0 -0
  271. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/emitters/test_exceptions_emitter.py +0 -0
  272. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/emitters/test_list_response_generation.py +0 -0
  273. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/emitters/test_models_emitter.py +0 -0
  274. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/end_to_end/test_dataclass_serialization_e2e.py +0 -0
  275. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/examples/test_developer_experience_demo.py +0 -0
  276. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/generation/generation_analysis.md +0 -0
  277. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/generation/test_external_core_package.py +0 -0
  278. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/generation_issues/specs/minimal_addmessage_like.json +0 -0
  279. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/generation_issues/test_addmessage_like_issues.py +0 -0
  280. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/generation_issues/test_agent_include_parameter_typing.py +0 -0
  281. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/generation_issues/test_message_batch_response_issue.py +0 -0
  282. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/helpers/helpers_analysis.md +0 -0
  283. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/helpers/test_array_resolver.py +0 -0
  284. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/helpers/test_endpoint_utils.py +0 -0
  285. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/helpers/test_endpoint_utils_extended.py +0 -0
  286. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/helpers/test_get_endpoint_return_types.py +0 -0
  287. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/helpers/test_named_resolver.py +0 -0
  288. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/helpers/test_named_type_resolver.py +0 -0
  289. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/helpers/test_object_resolver.py +0 -0
  290. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/helpers/test_put_endpoint_return_types.py +0 -0
  291. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/helpers/test_type_cleaner.py +0 -0
  292. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/helpers/test_type_helper.py +0 -0
  293. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/helpers/test_url_utils.py +0 -0
  294. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/helpers/test_utils_helpers.py +0 -0
  295. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/integration/test_generated_code_structure.py +0 -0
  296. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/integrations/integrations_analysis.md +0 -0
  297. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/integrations/test_business_swagger_message_type.py +0 -0
  298. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/integrations/test_end_to_end_business_swagger.py +0 -0
  299. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/integrations/test_end_to_end_petstore.py +0 -0
  300. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/integrations/test_name_collisions.py +0 -0
  301. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/specs/response_unwrapping_spec.yaml +0 -0
  302. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/test_analysis_overview.md +0 -0
  303. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/test_init.py +0 -0
  304. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/types/__init__.py +0 -0
  305. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/types/test_business_swagger_integration.py +0 -0
  306. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/types/test_contracts_types.py +0 -0
  307. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/types/test_reference_resolver.py +0 -0
  308. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/types/test_response_resolver.py +0 -0
  309. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/types/test_response_strategy.py +0 -0
  310. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/types/test_response_strategy_simplified.py +0 -0
  311. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/types/test_schema_resolver_enums.py +0 -0
  312. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/types/test_type_service.py +0 -0
  313. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/__init__.py +0 -0
  314. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/__init__.py +0 -0
  315. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/generators/__init__.py +0 -0
  316. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/generators/generators_analysis.md +0 -0
  317. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/generators/test_dataclass_integration.py +0 -0
  318. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/generators/test_docstring_generator.py +0 -0
  319. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/generators/test_endpoint_method_generator.py +0 -0
  320. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/generators/test_match_case_response.py +0 -0
  321. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/generators/test_request_generator.py +0 -0
  322. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/generators/test_response_handler_generator.py +0 -0
  323. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/generators/test_response_handler_generator_strategy.py +0 -0
  324. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/generators/test_signature_generator.py +0 -0
  325. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/generators/test_url_args_generator.py +0 -0
  326. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/processors/__init__.py +0 -0
  327. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/processors/test_import_analyzer.py +0 -0
  328. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/processors/test_import_analyzer.py.bak +0 -0
  329. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/processors/test_parameter_processor.py +0 -0
  330. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/endpoint/test_endpoint_visitor.py +0 -0
  331. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/model/__init__.py +0 -0
  332. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/model/test_alias_generator.py +0 -0
  333. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/model/test_dataclass_generator.py +0 -0
  334. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/model/test_dataclass_generator_json_wizard.py +0 -0
  335. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/model/test_enum_generator.py +0 -0
  336. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/model/test_json_value_integration.py +0 -0
  337. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/model/test_json_value_wrapper.py +0 -0
  338. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/test_client_visitor.py +0 -0
  339. {pyopenapi_gen-0.14.3 → pyopenapi_gen-0.16.1}/tests/visit/test_visitor.py +0 -0
@@ -48,6 +48,12 @@ jobs:
48
48
  run: |
49
49
  poetry install --with dev
50
50
 
51
+ - name: Validate version synchronisation
52
+ run: |
53
+ echo "🔍 Checking that all version files are synchronised..."
54
+ poetry run python scripts/validate_version_sync.py
55
+ echo "✅ All version files are in sync"
56
+
51
57
  - name: Run comprehensive quality checks
52
58
  run: |
53
59
  poetry run black --check src/ tests/
@@ -91,6 +97,33 @@ jobs:
91
97
  git config user.email "github-actions[bot]@users.noreply.github.com"
92
98
  poetry run semantic-release version --skip-build
93
99
 
100
+ - name: Sync version to __init__.py
101
+ if: steps.check_changes.outputs.release_worthy > 0 || github.event_name == 'workflow_dispatch'
102
+ env:
103
+ GH_TOKEN: ${{ secrets.SEMANTIC_RELEASE_TOKEN || secrets.GITHUB_TOKEN }}
104
+ run: |
105
+ echo "🔄 Syncing version from pyproject.toml to __init__.py..."
106
+
107
+ # Fetch latest to ensure we have the semantic-release commit
108
+ git fetch origin main
109
+ git reset --hard origin/main
110
+
111
+ # Run sync script
112
+ poetry run python scripts/sync_version_to_init.py
113
+
114
+ # Check if __init__.py was modified
115
+ if git diff --quiet src/pyopenapi_gen/__init__.py; then
116
+ echo "✅ __init__.py already in sync, no changes needed"
117
+ else
118
+ echo "📝 __init__.py was updated, creating follow-up commit..."
119
+ git config user.name "github-actions[bot]"
120
+ git config user.email "github-actions[bot]@users.noreply.github.com"
121
+ git add src/pyopenapi_gen/__init__.py
122
+ git commit -m "chore(release): sync __init__.py version [skip ci]"
123
+ git push origin main
124
+ echo "✅ Version sync complete and committed"
125
+ fi
126
+
94
127
  - name: Build packages after version bump
95
128
  if: steps.check_changes.outputs.release_worthy > 0 || github.event_name == 'workflow_dispatch'
96
129
  run: |
@@ -195,4 +195,8 @@ _process/
195
195
  coverage_reports/
196
196
 
197
197
  logs
198
- agent-plan.json
198
+ agent-plan.json
199
+
200
+ # Bug reports and analysis documents (keep in _process/ folder)
201
+ *-bug-report.md
202
+ *-analysis.md
@@ -1,6 +1,175 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v0.16.1 (2025-10-13)
5
+
6
+ ### Bug Fixes
7
+
8
+ - **version**: Manually sync __init__.py to 0.16.0 after failed workflow
9
+ ([`7ee9090`](https://github.com/mindhiveoy/pyopenapi_gen/commit/7ee90902add14d93d471418b56514a8bcafd81cb))
10
+
11
+ The semantic-release workflow successfully created version 0.16.0 but failed when trying to push the
12
+ __init__.py sync due to the force-with-lease issue.
13
+
14
+ This commit manually syncs __init__.py to 0.16.0 to match pyproject.toml. Future releases will use
15
+ the new workflow logic with follow-up commits.
16
+
17
+ - **workflow**: Use follow-up commit instead of amending for version sync
18
+ ([`96f2014`](https://github.com/mindhiveoy/pyopenapi_gen/commit/96f2014bb10ecbfbe3873db32ea6a5f8334542a2))
19
+
20
+ ISSUE: The git push --force-with-lease was failing with "stale info" because: 1. semantic-release
21
+ creates and pushes a commit 2. Our sync script tried to amend that commit 3. force-with-lease
22
+ detected remote had changed and rejected the push
23
+
24
+ SOLUTION: Changed strategy to use a follow-up commit instead of amending: 1. Fetch latest from
25
+ origin/main after semantic-release pushes 2. Reset --hard to origin/main to sync local state 3.
26
+ Run sync script to update __init__.py 4. If changed, create a NEW commit with [skip ci] flag 5.
27
+ Push normally (no force needed)
28
+
29
+ Benefits: - Safer: No force-pushing required - Cleaner: Normal git flow with proper commit sequence
30
+ - Prevents loops: [skip ci] prevents triggering another workflow run
31
+
32
+ This will result in two commits per release (semantic-release + sync) but is more reliable than
33
+ force-pushing.
34
+
35
+ Fixes: https://github.com/mindhiveoy/pyopenapi_gen/actions/runs/18461834318
36
+
37
+
38
+ ## v0.16.0 (2025-10-13)
39
+
40
+ ### Bug Fixes
41
+
42
+ - **api**: Improve type annotation for generate_client return type
43
+ ([`f35d99c`](https://github.com/mindhiveoy/pyopenapi_gen/commit/f35d99c1d2233a20fdd1a69ef0a175ab902513c4))
44
+
45
+ - Change return type from List[Any] to List[Path] for better type safety - Add proper pathlib.Path
46
+ import to support the type annotation - Enhances IDE support and type checking for programmatic
47
+ API users
48
+
49
+ 🤖 Generated with [Claude Code](https://claude.ai/code)
50
+
51
+ Co-authored-by: Ville Venäläinen <undefined@users.noreply.github.com>
52
+
53
+ - **api**: Update business_swagger.json descriptions and schemas
54
+ ([`6496144`](https://github.com/mindhiveoy/pyopenapi_gen/commit/6496144200fb8dfb28275f0d111138107775fa29))
55
+
56
+ - **lint**: Correct import ordering in __init__.py for Ruff compliance
57
+ ([`a159807`](https://github.com/mindhiveoy/pyopenapi_gen/commit/a159807fd1932206dd44c805629683998c88707f))
58
+
59
+ - **release**: Sync __init__.py version automatically in semantic-release workflow
60
+ ([`7f28674`](https://github.com/mindhiveoy/pyopenapi_gen/commit/7f2867449be1b75b2fc4b7c04073fcad3320e865))
61
+
62
+ ISSUE: Semantic-release was updating pyproject.toml version but leaving __init__.py at the old
63
+ version, causing the version validation to fail.
64
+
65
+ SOLUTION: 1. Fixed immediate issue: Updated __init__.py to match pyproject.toml (0.15.0) 2. Added
66
+ automatic sync: Created scripts/sync_version_to_init.py to sync version from pyproject.toml to
67
+ __init__.py 3. Updated workflow: Added step after semantic-release version bump that runs the sync
68
+ script and amends the commit if __init__.py was updated
69
+
70
+ This ensures all version files stay synchronized after every semantic-release run.
71
+
72
+ Fixes: https://github.com/mindhiveoy/pyopenapi_gen/actions/runs/18461374998
73
+
74
+ - **security**: Address Bandit security warnings with proper logging and nosec annotations
75
+ ([`f9b0ff3`](https://github.com/mindhiveoy/pyopenapi_gen/commit/f9b0ff3e73ebeaaed49fc631429835ee6e99a33c))
76
+
77
+ Fixed all Bandit security warnings: - Replace try-except-pass with proper exception logging in
78
+ parser.py - Replace try-except-pass with logging in telemetry.py - Add nosec B603 annotations to
79
+ all subprocess.run() calls with explanations - Add nosec B404 annotation to subprocess import with
80
+ justification
81
+
82
+ Changes: - parser.py: Log exceptions instead of silent pass for debugging - telemetry.py: Log
83
+ telemetry failures for debugging - postprocess_manager.py: Document all subprocess calls are safe
84
+ (hardcoded commands, no shell)
85
+
86
+ Bandit now reports zero issues (8 properly suppressed with nosec). All quality checks pass.
87
+
88
+ - **types**: Add binary format mapping to unified type resolver
89
+ ([`ecba081`](https://github.com/mindhiveoy/pyopenapi_gen/commit/ecba081b37a217277ea61d58b30d1f0a7ac2e04d))
90
+
91
+ - Add 'binary' to format_mapping in OpenAPISchemaResolver._resolve_string() - Ensures string schemas
92
+ with format=binary resolve to bytes type - Adds comprehensive test coverage for binary format
93
+ resolution - Closes gap between legacy and unified type systems
94
+
95
+ Before: string fields with format=binary were typed as str
96
+
97
+ After: string fields with format=binary are correctly typed as bytes
98
+
99
+ ### Features
100
+
101
+ - **api**: Add developer-friendly programmatic API with generate_client()
102
+ ([`ec8ad0c`](https://github.com/mindhiveoy/pyopenapi_gen/commit/ec8ad0c7b166e9cb523a91d97f8639f050d940c3))
103
+
104
+ Add a clean, function-based API for programmatic usage alongside the existing CLI.
105
+
106
+ Key additions: - generate_client() convenience function for simple library usage - Export
107
+ ClientGenerator and GenerationError at package level - Comprehensive documentation with examples
108
+ in CLAUDE.md - Full test coverage with 9 new tests in tests/api/
109
+
110
+ Benefits: - Simple one-function API: generate_client(spec_path, project_root, output_package) - No
111
+ need to import from deep paths or understand internal structure - Proper error handling with
112
+ exported GenerationError exception - Fully backward compatible - all existing code continues to
113
+ work - Matches patterns from similar tools (openapi-python-client, datamodel-code-generator)
114
+
115
+ Documentation includes: - Basic usage examples - Advanced usage with error handling - Multi-client
116
+ generation scripts - Build system integration examples - Complete API reference
117
+
118
+ All tests pass (9 new + existing), type-safe (mypy strict), and quality checks pass.
119
+
120
+ ### Refactoring
121
+
122
+ - **init**: Remove unused HTTPMethod enum and IR dataclasses
123
+ ([`7b096ed`](https://github.com/mindhiveoy/pyopenapi_gen/commit/7b096ed321612823976a2e7b7a995d0aaf024312))
124
+
125
+
126
+ ## v0.15.0 (2025-10-11)
127
+
128
+ ### Bug Fixes
129
+
130
+ - **release**: Correct semantic-release configuration and sync version to 0.14.3
131
+ ([`cfa0813`](https://github.com/mindhiveoy/pyopenapi_gen/commit/cfa081393657acfaa0a1c6a29243746748872b28))
132
+
133
+ Problem: - semantic-release v9 was configured with deprecated `version_pattern` syntax - This caused
134
+ __init__.py to not be automatically updated during releases - Version validation failed in CI
135
+ because __init__.py (0.10.2) != pyproject.toml (0.14.3)
136
+
137
+ Solution: - Updated semantic-release config to use `version_variables` (v9+ syntax) - Synced
138
+ __init__.py version to 0.14.3 to match pyproject.toml - Now semantic-release will automatically
139
+ update all version locations
140
+
141
+ Changes: - pyproject.toml: Changed version_pattern → version_variables -
142
+ src/pyopenapi_gen/__init__.py: Updated __version__ from 0.10.2 → 0.14.3
143
+
144
+ This ensures future releases automatically sync all version files.
145
+
146
+ - **types**: Correct self-import detection to avoid false positives with similar filenames
147
+ ([`cfee36e`](https://github.com/mindhiveoy/pyopenapi_gen/commit/cfee36e4c8c57d84c0c1d967a7936c5daddf2197))
148
+
149
+ Problem: - Self-import check used .endswith() for filename comparison - This caused false positives
150
+ when one filename was a suffix of another - Example:
151
+ "vector_index_with_embedding_response_data.py".endswith("embedding_response_data.py") == True -
152
+ Result: Missing imports for forward referenced types, causing NameError at runtime
153
+
154
+ Solution: - Changed to exact basename comparison using os.path.basename() - Only files with
155
+ identical basenames are treated as self-imports - Added comprehensive regression tests covering: -
156
+ Similar module names (not self-imports) - Actual self-references (forward refs without imports) -
157
+ Exact filename matching requirements
158
+
159
+ Changes: - src/pyopenapi_gen/types/resolvers/schema_resolver.py: Fixed self-import detection logic -
160
+ tests/types/test_missing_imports_bug.py: Added 3 regression tests -
161
+ tests/visit/test_model_visitor.py: Updated test expectations for correct import behavior -
162
+ .gitignore: Added patterns to ignore bug report and analysis documents
163
+
164
+ Testing: - All 1309 tests pass - Verified with real business_swagger.json that previously failed -
165
+ Generated code now includes correct imports for cross-module references
166
+
167
+ ### Features
168
+
169
+ - **versioning**: Add version synchronization validation script and integrate into quality checks
170
+ ([`de2ecb8`](https://github.com/mindhiveoy/pyopenapi_gen/commit/de2ecb8c63711230e890bae1cf79f22d5594c551))
171
+
172
+
4
173
  ## v0.14.3 (2025-10-11)
5
174
 
6
175
  ### Bug Fixes
@@ -112,6 +281,11 @@ Technical context: - mypy --strict requires explicit types for union type assign
112
281
 
113
282
  Resolves: mypy error "Incompatible types in assignment (expression has type...)"
114
283
 
284
+ ### Chores
285
+
286
+ - Merge latest changes from main
287
+ ([`44487cc`](https://github.com/mindhiveoy/pyopenapi_gen/commit/44487cce571920b5e2c34814c38cbab67b956097))
288
+
115
289
  ### Code Style
116
290
 
117
291
  - **format**: Apply Black formatting to modernised type syntax changes
@@ -826,6 +1000,13 @@ All 1,265 tests now pass consistently across environments.
826
1000
  testing still handled by pr-checks.yml for PRs - This unblocks PR merging while avoiding test
827
1001
  duplication
828
1002
 
1003
+ - **ci**: Ensure Poetry is available in PATH for semantic-release build command
1004
+ ([`0a68f6e`](https://github.com/mindhiveoy/pyopenapi_gen/commit/0a68f6e4ace7fb998c4ddec14c7cf67713d7ce73))
1005
+
1006
+ - Add explicit PATH setup for Poetry before semantic-release step - Add verification step to confirm
1007
+ Poetry availability - Fixes 'poetry: command not found' error in semantic release pipeline -
1008
+ Resolves build command failure preventing automated releases
1009
+
829
1010
  - **ci**: Ensure Poetry is available in PATH for semantic-release build command
830
1011
  ([#46](https://github.com/mindhiveoy/pyopenapi_gen/pull/46),
831
1012
  [`3734aac`](https://github.com/mindhiveoy/pyopenapi_gen/commit/3734aacb74eda746375c7d88c45715a1f18f33a1))
@@ -605,6 +605,239 @@ pyopenapi-gen api_v2.yaml --project-root . --output-package pyapis.v2 --core-pac
605
605
  # └── v2/ # Second client
606
606
  ```
607
607
 
608
+ ## Using as a Library (Programmatic API)
609
+
610
+ ### Why Programmatic Usage?
611
+ The generator was designed to work both as a CLI tool and as a Python library. Programmatic usage enables integration with build systems, CI/CD pipelines, code generators, and custom tooling. You get the same powerful code generation capabilities with full Python API access.
612
+
613
+ ### What Is the Programmatic API?
614
+ A simple, function-based API that wraps the internal `ClientGenerator` class, providing a clean entry point for library usage without requiring knowledge of internal structure.
615
+
616
+ ### How to Use Programmatically
617
+
618
+ #### Basic Usage
619
+ ```python
620
+ from pyopenapi_gen import generate_client
621
+
622
+ # Simple client generation
623
+ files = generate_client(
624
+ spec_path="input/openapi.yaml",
625
+ project_root=".",
626
+ output_package="pyapis.my_client"
627
+ )
628
+
629
+ print(f"Generated {len(files)} files")
630
+ ```
631
+
632
+ #### Advanced Usage with All Options
633
+ ```python
634
+ from pyopenapi_gen import generate_client, GenerationError
635
+
636
+ try:
637
+ files = generate_client(
638
+ spec_path="input/openapi.yaml",
639
+ project_root=".",
640
+ output_package="pyapis.my_client",
641
+ core_package="pyapis.core", # Optional shared core
642
+ force=True, # Overwrite without diff check
643
+ no_postprocess=False, # Run Black + mypy
644
+ verbose=True # Show progress
645
+ )
646
+
647
+ # Process generated files
648
+ for file_path in files:
649
+ print(f"Generated: {file_path}")
650
+
651
+ except GenerationError as e:
652
+ print(f"Generation failed: {e}")
653
+ # Handle error appropriately
654
+ ```
655
+
656
+ #### Multi-Client Generation Script
657
+ ```python
658
+ from pyopenapi_gen import generate_client
659
+ from pathlib import Path
660
+
661
+ # Configuration for multiple clients
662
+ clients = [
663
+ {
664
+ "spec": "api_v1.yaml",
665
+ "package": "pyapis.client_v1",
666
+ },
667
+ {
668
+ "spec": "api_v2.yaml",
669
+ "package": "pyapis.client_v2",
670
+ },
671
+ ]
672
+
673
+ # Shared core package
674
+ core_package = "pyapis.core"
675
+
676
+ # Generate all clients
677
+ for client_config in clients:
678
+ print(f"Generating {client_config['package']}...")
679
+
680
+ generate_client(
681
+ spec_path=client_config["spec"],
682
+ project_root=".",
683
+ output_package=client_config["package"],
684
+ core_package=core_package,
685
+ force=True,
686
+ verbose=True
687
+ )
688
+
689
+ print("All clients generated successfully!")
690
+ ```
691
+
692
+ #### Integration with Build Systems
693
+ ```python
694
+ # Example: Custom build script
695
+ import sys
696
+ from pathlib import Path
697
+ from pyopenapi_gen import generate_client, GenerationError
698
+
699
+ def build_api_clients():
700
+ """Generate all API clients as part of build process"""
701
+
702
+ specs_dir = Path("specs")
703
+ output_root = Path("src/pyapis")
704
+
705
+ # Find all OpenAPI specs
706
+ spec_files = list(specs_dir.glob("*.yaml")) + list(specs_dir.glob("*.json"))
707
+
708
+ if not spec_files:
709
+ print("No OpenAPI specs found in specs/")
710
+ return False
711
+
712
+ # Generate clients
713
+ for spec_file in spec_files:
714
+ client_name = spec_file.stem
715
+ package_name = f"pyapis.{client_name}"
716
+
717
+ print(f"Generating client for {spec_file.name}...")
718
+
719
+ try:
720
+ generate_client(
721
+ spec_path=str(spec_file),
722
+ project_root="src",
723
+ output_package=package_name,
724
+ core_package="pyapis.core",
725
+ force=True
726
+ )
727
+ except GenerationError as e:
728
+ print(f"Failed to generate {client_name}: {e}", file=sys.stderr)
729
+ return False
730
+
731
+ return True
732
+
733
+ if __name__ == "__main__":
734
+ success = build_api_clients()
735
+ sys.exit(0 if success else 1)
736
+ ```
737
+
738
+ ### API Reference
739
+
740
+ #### `generate_client()` Function
741
+
742
+ ```python
743
+ def generate_client(
744
+ spec_path: str,
745
+ project_root: str,
746
+ output_package: str,
747
+ core_package: str | None = None,
748
+ force: bool = False,
749
+ no_postprocess: bool = False,
750
+ verbose: bool = False,
751
+ ) -> List[Path]
752
+ ```
753
+
754
+ **Parameters**:
755
+ - `spec_path`: Path to OpenAPI spec file (YAML or JSON)
756
+ - `project_root`: Root directory of your Python project
757
+ - `output_package`: Python package name (e.g., `'pyapis.my_client'`)
758
+ - `core_package`: Optional shared core package name (defaults to `{output_package}.core`)
759
+ - `force`: Skip diff check and overwrite existing output
760
+ - `no_postprocess`: Skip Black formatting and mypy type checking
761
+ - `verbose`: Print detailed progress information
762
+
763
+ **Returns**: List of `Path` objects for all generated files
764
+
765
+ **Raises**: `GenerationError` if generation fails
766
+
767
+ #### `ClientGenerator` Class (Advanced)
768
+
769
+ For advanced use cases requiring more control:
770
+
771
+ ```python
772
+ from pyopenapi_gen import ClientGenerator, GenerationError
773
+ from pathlib import Path
774
+
775
+ # Create generator with custom settings
776
+ generator = ClientGenerator(verbose=True)
777
+
778
+ # Generate with full control
779
+ try:
780
+ files = generator.generate(
781
+ spec_path="openapi.yaml",
782
+ project_root=Path("."),
783
+ output_package="pyapis.my_client",
784
+ core_package="pyapis.core",
785
+ force=False,
786
+ no_postprocess=False
787
+ )
788
+ except GenerationError as e:
789
+ print(f"Generation failed: {e}")
790
+ ```
791
+
792
+ #### `GenerationError` Exception
793
+
794
+ Raised when generation fails. Contains contextual information about the failure:
795
+
796
+ ```python
797
+ from pyopenapi_gen import generate_client, GenerationError
798
+
799
+ try:
800
+ generate_client(
801
+ spec_path="invalid.yaml",
802
+ project_root=".",
803
+ output_package="test"
804
+ )
805
+ except GenerationError as e:
806
+ # Exception message includes context
807
+ print(f"Error: {e}")
808
+ # Typical causes:
809
+ # - Invalid OpenAPI specification
810
+ # - File I/O errors
811
+ # - Type checking failures
812
+ # - Invalid project structure
813
+ ```
814
+
815
+ ### Comparison: CLI vs Programmatic API
816
+
817
+ **CLI Usage**:
818
+ ```bash
819
+ pyopenapi-gen input/openapi.yaml \
820
+ --project-root . \
821
+ --output-package pyapis.my_client \
822
+ --force \
823
+ --verbose
824
+ ```
825
+
826
+ **Equivalent Programmatic Usage**:
827
+ ```python
828
+ from pyopenapi_gen import generate_client
829
+
830
+ generate_client(
831
+ spec_path="input/openapi.yaml",
832
+ project_root=".",
833
+ output_package="pyapis.my_client",
834
+ force=True,
835
+ verbose=True
836
+ )
837
+ ```
838
+
839
+ Both approaches use the same underlying implementation and produce identical results.
840
+
608
841
  ## Release Management & Semantic Versioning
609
842
 
610
843
  ### Automated Release Pipeline
@@ -66,11 +66,15 @@ security: deps
66
66
  @echo "🔒 Running security checks..."
67
67
  poetry run bandit -r src/ -c pyproject.toml -f json -o coverage_reports/bandit.json || poetry run bandit -r src/ -c pyproject.toml
68
68
 
69
+ version-check: deps
70
+ @echo "🔍 Validating version synchronisation..."
71
+ poetry run python scripts/validate_version_sync.py
72
+
69
73
  # Combined quality commands
70
74
  quality-fix: format lint-fix
71
75
  @echo "✅ Auto-fixed all possible quality issues"
72
76
 
73
- quality: format-check lint typecheck security
77
+ quality: format-check lint typecheck security version-check
74
78
  @echo "✅ All quality checks passed"
75
79
 
76
80
  # Testing commands
@@ -163,7 +167,7 @@ help:
163
167
  @echo " clean - Clean all build artifacts and virtual environment"
164
168
  @echo ""
165
169
  @echo "Quality commands:"
166
- @echo " quality - Run all quality checks (format, lint, typecheck, security)"
170
+ @echo " quality - Run all quality checks (format, lint, typecheck, security, version)"
167
171
  @echo " quality-fix - Auto-fix formatting and linting issues"
168
172
  @echo " format - Format code with Black"
169
173
  @echo " format-check - Check code formatting"
@@ -171,6 +175,7 @@ help:
171
175
  @echo " lint-fix - Auto-fix linting issues"
172
176
  @echo " typecheck - Type check with mypy"
173
177
  @echo " security - Security scan with Bandit"
178
+ @echo " version-check - Validate version synchronisation across files"
174
179
  @echo ""
175
180
  @echo "Testing commands:"
176
181
  @echo " test - Run all tests with coverage (parallel, 85% required)"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyopenapi-gen
3
- Version: 0.14.3
3
+ Version: 0.16.1
4
4
  Summary: Modern, async-first Python client generator for OpenAPI specifications with advanced cycle detection and unified type resolution
5
5
  Project-URL: Homepage, https://github.com/your-org/pyopenapi-gen
6
6
  Project-URL: Documentation, https://github.com/your-org/pyopenapi-gen/blob/main/README.md