pyopenapi-gen 0.14.0__tar.gz → 0.14.2__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.
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/CHANGELOG.md +212 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/PKG-INFO +1 -1
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/coverage.xml +1104 -1061
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/input/business_swagger.json +4108 -3913
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/pyproject.toml +2 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/cli.py +3 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/context/import_collector.py +10 -10
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/context/render_context.py +13 -13
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/auth/plugins.py +7 -7
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/http_status_codes.py +2 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/http_transport.py +19 -19
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/loader/operations/parser.py +2 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/loader/operations/request_body.py +3 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/loader/parameters/parser.py +3 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/loader/responses/parser.py +2 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/loader/schemas/extractor.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/pagination.py +3 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/list_response.py +3 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/missing_ref.py +2 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/new_schema.py +3 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/stripped_suffix.py +3 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/common/ref_resolution/resolve_schema_ref.py +2 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/common/type_parser.py +2 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/context.py +10 -10
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/cycle_helpers.py +5 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/keywords/all_of_parser.py +5 -5
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/keywords/any_of_parser.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/keywords/array_items_parser.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/keywords/one_of_parser.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/keywords/properties_parser.py +5 -5
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/schema_finalizer.py +15 -15
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/schema_parser.py +44 -25
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/transformers/inline_enum_extractor.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/transformers/inline_object_promoter.py +7 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/unified_cycle_detection.py +10 -10
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/schemas.py +10 -10
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/streaming_helpers.py +5 -7
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/telemetry.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/utils.py +7 -7
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/writers/code_writer.py +2 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/writers/documentation_writer.py +18 -18
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/writers/line_writer.py +3 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/writers/python_construct_renderer.py +10 -10
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/emit/models_emitter.py +2 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/emitters/core_emitter.py +3 -5
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/emitters/endpoints_emitter.py +24 -16
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/emitters/exceptions_emitter.py +4 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/emitters/models_emitter.py +6 -6
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/generator/client_generator.py +6 -6
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/helpers/endpoint_utils.py +16 -18
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/helpers/type_cleaner.py +66 -53
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/helpers/type_helper.py +7 -7
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/helpers/type_resolution/array_resolver.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/helpers/type_resolution/composition_resolver.py +5 -5
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/helpers/type_resolution/finalizer.py +38 -22
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/helpers/type_resolution/named_resolver.py +4 -5
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/helpers/type_resolution/object_resolver.py +11 -11
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/helpers/type_resolution/primitive_resolver.py +1 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/helpers/type_resolution/resolver.py +2 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/ir.py +32 -34
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/types/contracts/protocols.py +5 -5
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/types/contracts/types.py +2 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/types/resolvers/reference_resolver.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/types/resolvers/response_resolver.py +6 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/types/resolvers/schema_resolver.py +32 -16
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/types/services/type_service.py +55 -9
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/types/strategies/response_strategy.py +6 -7
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/client_visitor.py +5 -7
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/endpoint/generators/docstring_generator.py +7 -7
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/endpoint/generators/request_generator.py +5 -5
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/endpoint/generators/response_handler_generator.py +38 -17
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/endpoint/generators/signature_generator.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/endpoint/generators/url_args_generator.py +17 -17
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/endpoint/processors/import_analyzer.py +8 -8
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/endpoint/processors/parameter_processor.py +13 -13
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/model/alias_generator.py +1 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/model/dataclass_generator.py +139 -10
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/model/model_visitor.py +2 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/visitor.py +3 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/auth/test_auth_base.py +1 -1
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/auth/test_auth_plugins.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/context/test_import_collector.py +3 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/context/test_render_context.py +4 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/loader/parameters/test_inline_enum_array_params.py +1 -1
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/common/ref_resolution/helpers/test_list_response.py +1 -1
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/common/ref_resolution/helpers/test_missing_ref.py +1 -1
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/common/ref_resolution/helpers/test_new_schema.py +3 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/common/ref_resolution/helpers/test_stripped_suffix.py +1 -1
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/keywords/test_all_of_parser.py +28 -28
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/keywords/test_any_of_parser.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/keywords/test_array_items_parser.py +2 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/keywords/test_one_of_parser.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/keywords/test_properties_parser.py +15 -15
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/test_cycle_detection.py +14 -14
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/test_improved_schema_naming.py +2 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/test_inline_enum_extractor.py +15 -15
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/test_logging.py +3 -3
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/test_schema_finalizer.py +14 -14
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/test_schema_parser.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/test_schema_parser_list_response.py +7 -7
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/test_type_parser.py +5 -5
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_dataclass_serialization.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_detect_circular_imports.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_forward_references.py +1 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_import_resolution.py +1 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_loader.py +8 -8
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_pagination.py +10 -10
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_schemas.py +6 -6
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/writers/test_python_construct_renderer_json_wizard.py +2 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/emitters/test_duplicate_operations.py +89 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/emitters/test_endpoints_emitter.py +14 -12
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/emitters/test_list_response_generation.py +1 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/emitters/test_models_emitter.py +20 -23
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/examples/test_developer_experience_demo.py +3 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/generation_issues/test_addmessage_like_issues.py +7 -7
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/generation_issues/test_agent_include_parameter_typing.py +13 -6
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/helpers/test_endpoint_utils.py +2 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/helpers/test_endpoint_utils_extended.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/helpers/test_object_resolver.py +25 -25
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/helpers/test_type_cleaner.py +114 -66
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/helpers/test_type_helper.py +97 -114
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/integrations/test_business_swagger_message_type.py +12 -12
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/types/test_response_resolver.py +9 -9
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/types/test_response_strategy.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/types/test_response_strategy_simplified.py +2 -2
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/types/test_schema_resolver.py +94 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/types/test_type_service.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/generators/test_dataclass_integration.py +7 -7
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/generators/test_docstring_generator.py +11 -11
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/generators/test_response_handler_generator_strategy.py +1 -1
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/generators/test_signature_generator.py +11 -11
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/generators/test_url_args_generator.py +30 -30
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/processors/test_import_analyzer.py +20 -20
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/processors/test_parameter_processor.py +19 -20
- pyopenapi_gen-0.14.2/tests/visit/model/test_json_value_integration.py +252 -0
- pyopenapi_gen-0.14.2/tests/visit/model/test_json_value_wrapper.py +234 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/test_client_visitor.py +4 -4
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/test_model_visitor.py +29 -35
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.bandit +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.cursor/mcp.json +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.cursor/rules/architecture.mdc +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.cursor/rules/coding-conventions.mdc +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.cursor/rules/project-goal.mdc +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.cursor/rules/testing.mdc +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/BRANCH_PROTECTION.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/CLAUDE_CONFIGURATION.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/CODEOWNERS +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/dependabot.yml +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/workflows/ci.yml +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/workflows/claude-auto-approve.yml +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/workflows/claude-review-trigger.yml +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/workflows/claude.yml +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/workflows/pr-checks.yml +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/workflows/production-release.yml.backup +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/workflows/promote-to-staging.yml +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/workflows/semantic-release.yml +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/workflows/staging-publish.yml +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.github/workflows/testpypi-publish.yml +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.gitignore +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.python-version +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/.vscode/settings.json +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/CLAUDE.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/CONTRIBUTING.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/LICENSE +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/Makefile +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/README.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/docs/README.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/docs/architecture.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/docs/endpoint_visitor.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/docs/helpers.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/docs/ir_models.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/docs/line_writer.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/docs/loader.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/docs/model_visitor.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/docs/release-automation.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/docs/render_context.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/docs/unified_type_resolution.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/input/minimal_swagger.json +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/input/minimal_syntax_test.json +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/input/test_name_collision_spec.json +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/mkdocs.yml +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/poetry.lock +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/__main__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/context/CLAUDE.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/context/file_manager.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/CLAUDE.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/auth/base.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/exceptions.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/loader/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/loader/loader.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/loader/operations/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/loader/operations/post_processor.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/loader/parameters/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/loader/responses/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/loader/schemas/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/common/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/common/ref_resolution/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/cyclic_properties.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/direct_cycle.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/existing_schema.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/keywords/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/parsing/transformers/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/postprocess_manager.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core/warning_collector.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/core_package_template/README.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/emitters/CLAUDE.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/emitters/client_emitter.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/emitters/docs_emitter.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/generator/CLAUDE.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/helpers/CLAUDE.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/helpers/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/helpers/type_resolution/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/helpers/url_utils.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/http_types.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/py.typed +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/types/CLAUDE.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/types/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/types/contracts/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/types/resolvers/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/types/services/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/types/strategies/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/CLAUDE.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/docs_visitor.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/endpoint/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/endpoint/endpoint_visitor.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/endpoint/generators/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/endpoint/generators/endpoint_method_generator.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/endpoint/processors/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/exception_visitor.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/model/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/src/pyopenapi_gen/visit/model/enum_generator.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/auth/auth_analysis.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/cli/cli_analysis.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/cli/test_cli_backup_diff.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/cli/test_cli_edge_cases.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/cli/test_cli_edge_cases_comprehensive.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/cli/test_cli_internal_utils.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/cli/test_http_pagination_cli.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/context/context_analysis.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/context/test_file_manager.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/context/test_render_context_imports.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/context/test_render_context_relative_paths.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/core_analysis.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/loader/test_extractor.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/loader/test_top_level_enum_extraction.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/common/ref_resolution/helpers/helpers_analysis.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/common/ref_resolution/helpers/test_cyclic_properties.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/common/ref_resolution/helpers/test_direct_cycle.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/common/ref_resolution/helpers/test_existing_schema.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/keywords/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/keywords/keywords_analysis.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/parsing_analysis.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/test_context.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/test_cycle_helpers.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/test_inline_object_promoter.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/parsing/test_ref_resolver.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_edge_cases_integration.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_edge_cases_systematic.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_exceptions_module.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_http_transport.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_ir.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_ir_schema.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_loader_extensive.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_loader_invalid_refs.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_loader_malformed.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_loader_media_types.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_parsing_context.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_protocol_defaults.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_schema_parser_specific_case.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_simple_self_ref_check.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_streaming_helpers.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_telemetry.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_telemetry_client.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_utils.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/test_warning_collector.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/writers/test_code_writer.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/writers/test_documentation_writer.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/writers/test_line_writer.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/core/writers/writers_analysis.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/emitters/emitters_analysis.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/emitters/test_client_emitter.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/emitters/test_docs_emitter.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/emitters/test_exceptions_emitter.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/end_to_end/test_dataclass_serialization_e2e.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/generation/generation_analysis.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/generation/test_external_core_package.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/generation_issues/specs/minimal_addmessage_like.json +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/generation_issues/test_message_batch_response_issue.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/helpers/helpers_analysis.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/helpers/test_array_resolver.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/helpers/test_get_endpoint_return_types.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/helpers/test_named_resolver.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/helpers/test_named_type_resolver.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/helpers/test_put_endpoint_return_types.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/helpers/test_url_utils.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/helpers/test_utils_helpers.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/integration/test_generated_code_structure.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/integrations/integrations_analysis.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/integrations/test_end_to_end_business_swagger.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/integrations/test_end_to_end_petstore.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/integrations/test_name_collisions.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/specs/response_unwrapping_spec.yaml +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/test_analysis_overview.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/test_init.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/types/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/types/test_business_swagger_integration.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/types/test_contracts_types.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/types/test_reference_resolver.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/types/test_schema_resolver_enums.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/generators/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/generators/generators_analysis.md +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/generators/test_endpoint_method_generator.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/generators/test_match_case_response.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/generators/test_request_generator.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/generators/test_response_handler_generator.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/processors/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/processors/test_import_analyzer.py.bak +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/endpoint/test_endpoint_visitor.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/model/__init__.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/model/test_alias_generator.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/model/test_dataclass_generator.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/model/test_dataclass_generator_json_wizard.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/model/test_enum_generator.py +0 -0
- {pyopenapi_gen-0.14.0 → pyopenapi_gen-0.14.2}/tests/visit/test_visitor.py +0 -0
@@ -1,6 +1,218 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
3
|
|
4
|
+
## v0.14.2 (2025-10-10)
|
5
|
+
|
6
|
+
### Bug Fixes
|
7
|
+
|
8
|
+
- **endpoints**: Prevent _2_2 suffix accumulation in multi-tag operations
|
9
|
+
([`89e500f`](https://github.com/mindhiveoy/pyopenapi_gen/commit/89e500f9c9963492454bc3177fabf872052baac5))
|
10
|
+
|
11
|
+
Operations with multiple tags previously accumulated duplicate suffixes (_2_2, _2_2_2) because the
|
12
|
+
same IROperation object was modified multiple times during per-tag deduplication.
|
13
|
+
|
14
|
+
**Root Cause:** When an operation has multiple tags (e.g., ["Users", "Admin", "Internal"]), the SAME
|
15
|
+
IROperation object reference was added to multiple tag group lists. The per-tag deduplication
|
16
|
+
modified the same object repeatedly, causing suffix accumulation.
|
17
|
+
|
18
|
+
**Solution:** - Implement global deduplication BEFORE tag grouping - New method:
|
19
|
+
_deduplicate_operation_ids_globally() - Called once before tag splitting - Ensures each operation
|
20
|
+
is renamed at most once - Removed per-tag deduplication call
|
21
|
+
|
22
|
+
**Testing:** - Existing test for single-tag duplicates still passes - New test verifies multi-tag
|
23
|
+
operations get consistent naming - Reproduction test confirms fix resolves _2_2 accumulation - All
|
24
|
+
1299 tests pass with 88.16% coverage
|
25
|
+
|
26
|
+
|
27
|
+
## v0.14.1 (2025-10-10)
|
28
|
+
|
29
|
+
### Bug Fixes
|
30
|
+
|
31
|
+
- **exceptions**: Sort alias names before generating __all__ list
|
32
|
+
([`3a623ec`](https://github.com/mindhiveoy/pyopenapi_gen/commit/3a623ecde7457410ab3c0ed2a62adfdb378d3f6a))
|
33
|
+
|
34
|
+
- **helpers**: Modernize TypeCleaner for Python 3.9+ type syntax and union preservation
|
35
|
+
([`856fc33`](https://github.com/mindhiveoy/pyopenapi_gen/commit/856fc330752fa1046aac0fb028376329569d8b99))
|
36
|
+
|
37
|
+
Extended TypeCleaner to handle modern Python type syntax patterns:
|
38
|
+
|
39
|
+
1. Dict/dict case sensitivity (Lines 69, 261-296): - Added "or container == 'dict'" to container
|
40
|
+
type detection - Updated _clean_dict_type() to handle both Dict[] and dict[] - Always outputs
|
41
|
+
lowercase dict[] per Python 3.9+ conventions - Preserves backward compatibility during transition
|
42
|
+
period
|
43
|
+
|
44
|
+
2. Modern union syntax preservation (Lines 45-51): - Added early handling for " | " to prevent type
|
45
|
+
truncation - Detects top-level unions before container parsing - Splits by pipe, cleans parts
|
46
|
+
independently, rejoins with union operator - Prevents "List[X] | None" being treated as malformed
|
47
|
+
List type
|
48
|
+
|
49
|
+
3. Optional to modern union conversion: - Updated special cases to convert Optional[X] to X | None
|
50
|
+
format - Removed Optional from imports (no longer needed) - Modernizes type annotations throughout
|
51
|
+
cleaned output
|
52
|
+
|
53
|
+
Bug fixes resolved: - 36 syntax errors from union truncation: "List[X] | None" → "List[X] | Non]" -
|
54
|
+
Case sensitivity failures after Ruff auto-formatting Dict → dict - Inconsistent type syntax in
|
55
|
+
generated code
|
56
|
+
|
57
|
+
Impact: Fixes business_swagger.json client generation errors
|
58
|
+
|
59
|
+
Quality gates: All 1278 tests passing, zero regressions
|
60
|
+
|
61
|
+
- **parsing**: Add type annotation for additionalProperties field to resolve mypy error
|
62
|
+
([`6d4244a`](https://github.com/mindhiveoy/pyopenapi_gen/commit/6d4244a00a35d375c666510ec61754c1d36774e8))
|
63
|
+
|
64
|
+
Define explicit type for additional_properties_value parameter in _parse_schema(): - Type
|
65
|
+
annotation: bool | IRSchema | None - Resolves mypy strict mode error on line 566 - Supports three
|
66
|
+
OpenAPI additionalProperties patterns: * bool: true/false for allowing/disallowing additional
|
67
|
+
properties * IRSchema: schema object defining additional property validation * None:
|
68
|
+
additionalProperties not specified in OpenAPI spec
|
69
|
+
|
70
|
+
Technical context: - mypy --strict requires explicit types for union type assignments - Field can
|
71
|
+
receive different types based on OpenAPI specification structure - Conditional assignment at line
|
72
|
+
573 assigns bool, dict-parsed IRSchema, or None - No functional changes, only type safety
|
73
|
+
improvement for static analysis
|
74
|
+
|
75
|
+
Resolves: mypy error "Incompatible types in assignment (expression has type...)"
|
76
|
+
|
77
|
+
### Code Style
|
78
|
+
|
79
|
+
- **format**: Apply Black formatting to modernised type syntax changes
|
80
|
+
([`3fb6baa`](https://github.com/mindhiveoy/pyopenapi_gen/commit/3fb6baaf6d1e2c1918cd0d64935f7d5a390daadc))
|
81
|
+
|
82
|
+
- **format**: Apply Ruff auto-formatting to entire codebase
|
83
|
+
([`3b0ab6b`](https://github.com/mindhiveoy/pyopenapi_gen/commit/3b0ab6bcabe4caeee33a0e09f83bf28f58bfde76))
|
84
|
+
|
85
|
+
Applied Ruff formatting to 116 files for code style consistency: - Executed: make quality-fix (Ruff
|
86
|
+
format + lint --fix) - Changes: Import sorting, line breaks, whitespace normalization - No
|
87
|
+
functional changes, only formatting adjustments
|
88
|
+
|
89
|
+
Files affected: - src/pyopenapi_gen/: 72 files (core, helpers, types, visit, emitters) - tests/: 44
|
90
|
+
files (all test modules) - input/business_swagger.json: Reformatted JSON structure
|
91
|
+
|
92
|
+
Formatting changes: - Import statement ordering per PEP 8 - Line length normalization (120 char
|
93
|
+
limit) - Trailing whitespace removal - Consistent indentation and spacing
|
94
|
+
|
95
|
+
Quality gates: ✅ make format-check: PASSED ✅ make lint: PASSED ✅ make typecheck: PASSED ✅ make test:
|
96
|
+
1278 passed, 88.48% coverage
|
97
|
+
|
98
|
+
No functional changes, zero test regressions
|
99
|
+
|
100
|
+
- **lint**: Remove unused TypeFinalizer import from alias_generator
|
101
|
+
([`7b27e7c`](https://github.com/mindhiveoy/pyopenapi_gen/commit/7b27e7c5306c252bd816661e6815395ec431f2ce))
|
102
|
+
|
103
|
+
### Refactoring
|
104
|
+
|
105
|
+
- **types**: Enforce modern Python 3.10+ type syntax across unified type system
|
106
|
+
([`f642a67`](https://github.com/mindhiveoy/pyopenapi_gen/commit/f642a679760d84aa7f3c3fdbefd856056b8a02bd))
|
107
|
+
|
108
|
+
Eliminate legacy Optional[X] syntax in favour of modern X | None throughout the unified type
|
109
|
+
resolution pipeline, establishing architectural guarantees with three-layer protection against
|
110
|
+
Optional[X] leaks.
|
111
|
+
|
112
|
+
Technical changes:
|
113
|
+
|
114
|
+
1. UnifiedTypeService (_format_resolved_type): - Added SANITY CHECK raising ValueError for
|
115
|
+
Optional[X] production - Reordered formatting: quote forward refs BEFORE adding | None - Modern
|
116
|
+
syntax: "DataSource" | None (not "DataSource | None") - Architecture guarantee: ONLY X | None
|
117
|
+
syntax, NEVER Optional[X]
|
118
|
+
|
119
|
+
2. TypeFinalizer (_wrap_with_optional_if_needed): - Added SANITY CHECK with error logging for
|
120
|
+
Optional[X] reception - Removed all Optional import statements (not needed in Python 3.10+) -
|
121
|
+
Fixed operation order: clean BEFORE wrapping prevents TypeCleaner breaking patterns - Defensive
|
122
|
+
conversion with warning for architectural violations
|
123
|
+
|
124
|
+
3. ResponseHandlerGenerator (_get_base_schema_deserialization_code): - Added SANITY CHECK for
|
125
|
+
Optional[X] in response deserialization - New code path for modern X | None syntax handling -
|
126
|
+
Removed Optional from type checking and model detection - Maintains backward compatibility with
|
127
|
+
defensive conversion
|
128
|
+
|
129
|
+
4. SchemaResolver: - Fixed null schema handling to respect required parameter - Changed
|
130
|
+
_resolve_any() to accept required parameter for correct optionality - Updated all Any fallbacks to
|
131
|
+
respect required throughout resolver chain
|
132
|
+
|
133
|
+
5. ResponseResolver: - Modernised AsyncIterator[Dict[str, Any]] to AsyncIterator[dict[str, Any]] -
|
134
|
+
Removed unnecessary Dict import (uses lowercase dict)
|
135
|
+
|
136
|
+
6. AliasGenerator & DataclassGenerator: - Removed duplicate TypeCleaner calls (already handled by
|
137
|
+
TypeFinalizer) - TypeFinalizer now performs cleaning in correct order - Added type hints to
|
138
|
+
dict-like methods (keys, values, items)
|
139
|
+
|
140
|
+
Three-layer protection against Optional[X]: - Layer 1: UnifiedTypeService raises exception if
|
141
|
+
Optional[X] produced - Layer 2: TypeFinalizer logs error if Optional[X] received - Layer 3:
|
142
|
+
ResponseHandlerGenerator logs error if Optional[X] in deserialization
|
143
|
+
|
144
|
+
Breaking changes: None (defensive conversions maintain compatibility)
|
145
|
+
|
146
|
+
All tests passing: 1298 tests, zero regressions
|
147
|
+
|
148
|
+
### Testing
|
149
|
+
|
150
|
+
- Update test assertions for modern Python 3.10+ type syntax
|
151
|
+
([`9644bf7`](https://github.com/mindhiveoy/pyopenapi_gen/commit/9644bf72d41769510b3d9a6774521ee5fd75b6c9))
|
152
|
+
|
153
|
+
Update test expectations to align with unified type system's modern X | None syntax, removing
|
154
|
+
assertions for Optional import presence and modernising type checking patterns.
|
155
|
+
|
156
|
+
Test changes:
|
157
|
+
|
158
|
+
1. test_type_helper.py: - Removed 8 assertions checking for Optional import (not needed in Python
|
159
|
+
3.10+) - Updated finalize() expectations to use X | None syntax - Fixed Union type expectations:
|
160
|
+
Union[int, float] | None (not Optional[Union[...]])
|
161
|
+
|
162
|
+
2. test_loader.py: - Updated regex to match modern dict[str, Any] (not Dict[str, Any]) - Updated
|
163
|
+
both params and query_params patterns
|
164
|
+
|
165
|
+
3. test_endpoints_emitter.py: - Accept both Dict and dict in type checking - Removed strict Optional
|
166
|
+
import requirement
|
167
|
+
|
168
|
+
4. test_models_emitter.py: - Updated datetime test: Python 3.10+ doesn't need Optional import -
|
169
|
+
Updated optional list factory test: only List import needed - Updated union anyof test: accepts
|
170
|
+
modern syntax
|
171
|
+
|
172
|
+
5. test_type_cleaner.py: - Fixed test to use public API instead of private _clean_simple_patterns -
|
173
|
+
Tests now verify clean_type_parameters() public interface
|
174
|
+
|
175
|
+
6. test_agent_include_parameter_typing.py: - Added circular reference placeholder detection - Test
|
176
|
+
now handles unified cycle detection properly
|
177
|
+
|
178
|
+
7. test_response_resolver.py, test_schema_resolver.py, test_business_swagger_message_type.py: -
|
179
|
+
Updated type expectations for modern syntax - Removed Optional-specific assertions
|
180
|
+
|
181
|
+
All test updates are assertion-only (no logic changes) Test results: 1298 tests passing, 2 warnings
|
182
|
+
(expected from edge case tests)
|
183
|
+
|
184
|
+
- **regression**: Add comprehensive coverage for three critical bug classes
|
185
|
+
([`0b5a7ba`](https://github.com/mindhiveoy/pyopenapi_gen/commit/0b5a7ba44d7b58007ef5ed0d446547ec34f8199f))
|
186
|
+
|
187
|
+
Added 8 regression tests protecting against recently discovered bugs:
|
188
|
+
|
189
|
+
1. JsonValue wrapper class generation (1 test) File: tests/visit/model/test_json_value_wrapper.py
|
190
|
+
Scenario: Schema with additionalProperties: {nullable: true} Bug: Generated empty class instead of
|
191
|
+
dict-like wrapper with __getitem__ Protection: Validates wrapper class structure and dict-like
|
192
|
+
interface
|
193
|
+
|
194
|
+
2. Null schema resolution (4 tests) File: tests/types/test_schema_resolver.py Bug: Schemas with
|
195
|
+
type=None resolved to None instead of Any Impact: Type name collisions across unrelated fields in
|
196
|
+
generated code Tests cover: - test_resolve_schema__null_type_schema__returns_any -
|
197
|
+
test_resolve_schema__null_type_schema_optional__returns_any_with_optional_flag -
|
198
|
+
test_resolve_schema__schema_no_type_no_generation_name__returns_any -
|
199
|
+
test_resolve_schema__schema_no_type_but_has_generation_name__resolves_as_named
|
200
|
+
|
201
|
+
3. Modern union syntax preservation (2 tests) File: tests/helpers/test_type_cleaner.py Bug:
|
202
|
+
Top-level unions "List[X] | None" truncated to "List[X] | Non]" Impact: 36 syntax errors in
|
203
|
+
business_swagger.json client Tests cover: -
|
204
|
+
test_clean_type_parameters__modern_union_syntax_with_list__preserves_full_type -
|
205
|
+
test_clean_type_parameters__modern_union_syntax_nested__handles_correctly
|
206
|
+
|
207
|
+
4. Integration test (1 test) File: tests/visit/model/test_json_value_integration.py End-to-end
|
208
|
+
validation of wrapper generation pipeline
|
209
|
+
|
210
|
+
Test execution results: - New tests: 8/8 PASSING - Total suite: 1278 passed - Coverage: 88.48%
|
211
|
+
(above 85% requirement) - Zero regressions introduced
|
212
|
+
|
213
|
+
Protects against: business_swagger.json generation failures discovered in production
|
214
|
+
|
215
|
+
|
4
216
|
## v0.14.0 (2025-10-06)
|
5
217
|
|
6
218
|
### Documentation
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: pyopenapi-gen
|
3
|
-
Version: 0.14.
|
3
|
+
Version: 0.14.2
|
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
|