pyopenapi-gen 0.13.0__tar.gz → 0.14.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.
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/CHANGELOG.md +290 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/CLAUDE.md +0 -5
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/PKG-INFO +1 -1
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/coverage.xml +1307 -1163
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/input/business_swagger.json +4108 -3913
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/pyproject.toml +2 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/cli.py +3 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/context/import_collector.py +10 -10
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/context/render_context.py +13 -13
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/auth/plugins.py +7 -7
- pyopenapi_gen-0.14.1/src/pyopenapi_gen/core/http_status_codes.py +218 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/http_transport.py +19 -19
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/loader/operations/parser.py +2 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/loader/operations/request_body.py +3 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/loader/parameters/parser.py +3 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/loader/responses/parser.py +2 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/loader/schemas/extractor.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/pagination.py +3 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/list_response.py +3 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/missing_ref.py +2 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/new_schema.py +3 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/stripped_suffix.py +3 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/resolve_schema_ref.py +2 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/common/type_parser.py +2 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/context.py +10 -10
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/cycle_helpers.py +5 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/keywords/all_of_parser.py +5 -5
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/keywords/any_of_parser.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/keywords/array_items_parser.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/keywords/one_of_parser.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/keywords/properties_parser.py +5 -5
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/schema_finalizer.py +15 -15
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/schema_parser.py +44 -25
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/transformers/inline_enum_extractor.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/transformers/inline_object_promoter.py +7 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/unified_cycle_detection.py +10 -10
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/postprocess_manager.py +85 -12
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/schemas.py +10 -10
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/streaming_helpers.py +5 -7
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/telemetry.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/utils.py +7 -7
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/writers/code_writer.py +2 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/writers/documentation_writer.py +18 -18
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/writers/line_writer.py +3 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/writers/python_construct_renderer.py +15 -11
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/emit/models_emitter.py +2 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/emitters/core_emitter.py +3 -5
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/emitters/endpoints_emitter.py +12 -12
- pyopenapi_gen-0.14.1/src/pyopenapi_gen/emitters/exceptions_emitter.py +187 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/emitters/models_emitter.py +6 -6
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/generator/client_generator.py +10 -8
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/helpers/endpoint_utils.py +16 -18
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/helpers/type_cleaner.py +66 -53
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/helpers/type_helper.py +7 -7
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/helpers/type_resolution/array_resolver.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/helpers/type_resolution/composition_resolver.py +5 -5
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/helpers/type_resolution/finalizer.py +38 -22
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/helpers/type_resolution/named_resolver.py +4 -5
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/helpers/type_resolution/object_resolver.py +11 -11
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/helpers/type_resolution/primitive_resolver.py +1 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/helpers/type_resolution/resolver.py +2 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/ir.py +32 -34
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/types/contracts/protocols.py +5 -5
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/types/contracts/types.py +2 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/types/resolvers/reference_resolver.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/types/resolvers/response_resolver.py +6 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/types/resolvers/schema_resolver.py +32 -16
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/types/services/type_service.py +55 -9
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/types/strategies/response_strategy.py +6 -7
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/client_visitor.py +5 -7
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/endpoint/generators/docstring_generator.py +7 -7
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/endpoint/generators/request_generator.py +5 -5
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/endpoint/generators/response_handler_generator.py +41 -19
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/endpoint/generators/signature_generator.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/endpoint/generators/url_args_generator.py +17 -17
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/endpoint/processors/import_analyzer.py +8 -8
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/endpoint/processors/parameter_processor.py +13 -13
- pyopenapi_gen-0.14.1/src/pyopenapi_gen/visit/exception_visitor.py +90 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/model/alias_generator.py +1 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/model/dataclass_generator.py +139 -10
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/model/model_visitor.py +2 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/visitor.py +3 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/auth/test_auth_base.py +1 -1
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/auth/test_auth_plugins.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/context/test_import_collector.py +3 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/context/test_render_context.py +4 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/loader/parameters/test_inline_enum_array_params.py +1 -1
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/common/ref_resolution/helpers/test_list_response.py +1 -1
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/common/ref_resolution/helpers/test_missing_ref.py +1 -1
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/common/ref_resolution/helpers/test_new_schema.py +3 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/common/ref_resolution/helpers/test_stripped_suffix.py +1 -1
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/keywords/test_all_of_parser.py +28 -28
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/keywords/test_any_of_parser.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/keywords/test_array_items_parser.py +2 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/keywords/test_one_of_parser.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/keywords/test_properties_parser.py +15 -15
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/test_cycle_detection.py +14 -14
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/test_improved_schema_naming.py +2 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/test_inline_enum_extractor.py +15 -15
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/test_logging.py +3 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/test_schema_finalizer.py +14 -14
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/test_schema_parser.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/test_schema_parser_list_response.py +7 -7
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/test_type_parser.py +5 -5
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_dataclass_serialization.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_detect_circular_imports.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_forward_references.py +1 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_import_resolution.py +1 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_loader.py +8 -8
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_pagination.py +10 -10
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_schemas.py +6 -6
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/writers/test_python_construct_renderer_json_wizard.py +2 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/emitters/test_endpoints_emitter.py +14 -12
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/emitters/test_exceptions_emitter.py +9 -5
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/emitters/test_list_response_generation.py +1 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/emitters/test_models_emitter.py +20 -23
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/examples/test_developer_experience_demo.py +3 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/generation_issues/test_addmessage_like_issues.py +7 -7
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/generation_issues/test_agent_include_parameter_typing.py +13 -6
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/helpers/test_endpoint_utils.py +2 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/helpers/test_endpoint_utils_extended.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/helpers/test_object_resolver.py +25 -25
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/helpers/test_type_cleaner.py +114 -66
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/helpers/test_type_helper.py +97 -114
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/integrations/test_business_swagger_message_type.py +12 -12
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/types/test_response_resolver.py +9 -9
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/types/test_response_strategy.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/types/test_response_strategy_simplified.py +2 -2
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/types/test_schema_resolver.py +94 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/types/test_type_service.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/generators/test_dataclass_integration.py +7 -7
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/generators/test_docstring_generator.py +11 -11
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/generators/test_match_case_response.py +5 -5
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/generators/test_response_handler_generator.py +5 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/generators/test_response_handler_generator_strategy.py +4 -3
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/generators/test_signature_generator.py +11 -11
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/generators/test_url_args_generator.py +30 -30
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/processors/test_import_analyzer.py +20 -20
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/processors/test_parameter_processor.py +19 -20
- pyopenapi_gen-0.14.1/tests/visit/model/test_json_value_integration.py +252 -0
- pyopenapi_gen-0.14.1/tests/visit/model/test_json_value_wrapper.py +234 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/test_client_visitor.py +4 -4
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/test_model_visitor.py +29 -35
- pyopenapi_gen-0.13.0/src/pyopenapi_gen/emitters/exceptions_emitter.py +0 -52
- pyopenapi_gen-0.13.0/src/pyopenapi_gen/visit/exception_visitor.py +0 -52
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.bandit +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.cursor/mcp.json +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.cursor/rules/architecture.mdc +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.cursor/rules/coding-conventions.mdc +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.cursor/rules/project-goal.mdc +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.cursor/rules/testing.mdc +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/BRANCH_PROTECTION.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/CLAUDE_CONFIGURATION.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/CODEOWNERS +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/dependabot.yml +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/workflows/ci.yml +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/workflows/claude-auto-approve.yml +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/workflows/claude-review-trigger.yml +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/workflows/claude.yml +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/workflows/pr-checks.yml +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/workflows/production-release.yml.backup +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/workflows/promote-to-staging.yml +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/workflows/semantic-release.yml +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/workflows/staging-publish.yml +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.github/workflows/testpypi-publish.yml +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.gitignore +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.python-version +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/.vscode/settings.json +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/CONTRIBUTING.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/LICENSE +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/Makefile +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/README.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/docs/README.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/docs/architecture.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/docs/endpoint_visitor.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/docs/helpers.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/docs/ir_models.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/docs/line_writer.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/docs/loader.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/docs/model_visitor.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/docs/release-automation.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/docs/render_context.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/docs/unified_type_resolution.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/input/minimal_swagger.json +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/input/minimal_syntax_test.json +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/input/test_name_collision_spec.json +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/mkdocs.yml +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/poetry.lock +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/__main__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/context/CLAUDE.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/context/file_manager.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/CLAUDE.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/auth/base.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/exceptions.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/loader/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/loader/loader.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/loader/operations/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/loader/operations/post_processor.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/loader/parameters/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/loader/responses/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/loader/schemas/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/common/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/cyclic_properties.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/direct_cycle.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/existing_schema.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/keywords/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/parsing/transformers/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core/warning_collector.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/core_package_template/README.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/emitters/CLAUDE.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/emitters/client_emitter.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/emitters/docs_emitter.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/generator/CLAUDE.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/helpers/CLAUDE.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/helpers/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/helpers/type_resolution/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/helpers/url_utils.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/http_types.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/py.typed +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/types/CLAUDE.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/types/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/types/contracts/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/types/resolvers/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/types/services/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/types/strategies/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/CLAUDE.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/docs_visitor.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/endpoint/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/endpoint/endpoint_visitor.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/endpoint/generators/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/endpoint/generators/endpoint_method_generator.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/endpoint/processors/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/model/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/src/pyopenapi_gen/visit/model/enum_generator.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/auth/auth_analysis.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/cli/cli_analysis.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/cli/test_cli_backup_diff.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/cli/test_cli_edge_cases.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/cli/test_cli_edge_cases_comprehensive.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/cli/test_cli_internal_utils.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/cli/test_http_pagination_cli.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/context/context_analysis.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/context/test_file_manager.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/context/test_render_context_imports.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/context/test_render_context_relative_paths.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/core_analysis.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/loader/test_extractor.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/loader/test_top_level_enum_extraction.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/common/ref_resolution/helpers/helpers_analysis.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/common/ref_resolution/helpers/test_cyclic_properties.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/common/ref_resolution/helpers/test_direct_cycle.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/common/ref_resolution/helpers/test_existing_schema.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/keywords/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/keywords/keywords_analysis.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/parsing_analysis.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/test_context.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/test_cycle_helpers.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/test_inline_object_promoter.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/parsing/test_ref_resolver.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_edge_cases_integration.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_edge_cases_systematic.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_exceptions_module.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_http_transport.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_ir.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_ir_schema.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_loader_extensive.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_loader_invalid_refs.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_loader_malformed.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_loader_media_types.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_parsing_context.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_protocol_defaults.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_schema_parser_specific_case.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_simple_self_ref_check.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_streaming_helpers.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_telemetry.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_telemetry_client.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_utils.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/test_warning_collector.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/writers/test_code_writer.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/writers/test_documentation_writer.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/writers/test_line_writer.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/core/writers/writers_analysis.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/emitters/emitters_analysis.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/emitters/test_client_emitter.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/emitters/test_docs_emitter.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/emitters/test_duplicate_operations.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/end_to_end/test_dataclass_serialization_e2e.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/generation/generation_analysis.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/generation/test_external_core_package.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/generation_issues/specs/minimal_addmessage_like.json +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/generation_issues/test_message_batch_response_issue.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/helpers/helpers_analysis.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/helpers/test_array_resolver.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/helpers/test_get_endpoint_return_types.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/helpers/test_named_resolver.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/helpers/test_named_type_resolver.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/helpers/test_put_endpoint_return_types.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/helpers/test_url_utils.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/helpers/test_utils_helpers.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/integration/test_generated_code_structure.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/integrations/integrations_analysis.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/integrations/test_end_to_end_business_swagger.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/integrations/test_end_to_end_petstore.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/integrations/test_name_collisions.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/specs/response_unwrapping_spec.yaml +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/test_analysis_overview.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/test_init.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/types/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/types/test_business_swagger_integration.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/types/test_contracts_types.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/types/test_reference_resolver.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/types/test_schema_resolver_enums.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/generators/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/generators/generators_analysis.md +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/generators/test_endpoint_method_generator.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/generators/test_request_generator.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/processors/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/processors/test_import_analyzer.py.bak +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/endpoint/test_endpoint_visitor.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/model/__init__.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/model/test_alias_generator.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/model/test_dataclass_generator.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/model/test_dataclass_generator_json_wizard.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/model/test_enum_generator.py +0 -0
- {pyopenapi_gen-0.13.0 → pyopenapi_gen-0.14.1}/tests/visit/test_visitor.py +0 -0
@@ -1,6 +1,296 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
3
|
|
4
|
+
## v0.14.1 (2025-10-10)
|
5
|
+
|
6
|
+
### Bug Fixes
|
7
|
+
|
8
|
+
- **exceptions**: Sort alias names before generating __all__ list
|
9
|
+
([`3a623ec`](https://github.com/mindhiveoy/pyopenapi_gen/commit/3a623ecde7457410ab3c0ed2a62adfdb378d3f6a))
|
10
|
+
|
11
|
+
- **helpers**: Modernize TypeCleaner for Python 3.9+ type syntax and union preservation
|
12
|
+
([`856fc33`](https://github.com/mindhiveoy/pyopenapi_gen/commit/856fc330752fa1046aac0fb028376329569d8b99))
|
13
|
+
|
14
|
+
Extended TypeCleaner to handle modern Python type syntax patterns:
|
15
|
+
|
16
|
+
1. Dict/dict case sensitivity (Lines 69, 261-296): - Added "or container == 'dict'" to container
|
17
|
+
type detection - Updated _clean_dict_type() to handle both Dict[] and dict[] - Always outputs
|
18
|
+
lowercase dict[] per Python 3.9+ conventions - Preserves backward compatibility during transition
|
19
|
+
period
|
20
|
+
|
21
|
+
2. Modern union syntax preservation (Lines 45-51): - Added early handling for " | " to prevent type
|
22
|
+
truncation - Detects top-level unions before container parsing - Splits by pipe, cleans parts
|
23
|
+
independently, rejoins with union operator - Prevents "List[X] | None" being treated as malformed
|
24
|
+
List type
|
25
|
+
|
26
|
+
3. Optional to modern union conversion: - Updated special cases to convert Optional[X] to X | None
|
27
|
+
format - Removed Optional from imports (no longer needed) - Modernizes type annotations throughout
|
28
|
+
cleaned output
|
29
|
+
|
30
|
+
Bug fixes resolved: - 36 syntax errors from union truncation: "List[X] | None" → "List[X] | Non]" -
|
31
|
+
Case sensitivity failures after Ruff auto-formatting Dict → dict - Inconsistent type syntax in
|
32
|
+
generated code
|
33
|
+
|
34
|
+
Impact: Fixes business_swagger.json client generation errors
|
35
|
+
|
36
|
+
Quality gates: All 1278 tests passing, zero regressions
|
37
|
+
|
38
|
+
- **parsing**: Add type annotation for additionalProperties field to resolve mypy error
|
39
|
+
([`6d4244a`](https://github.com/mindhiveoy/pyopenapi_gen/commit/6d4244a00a35d375c666510ec61754c1d36774e8))
|
40
|
+
|
41
|
+
Define explicit type for additional_properties_value parameter in _parse_schema(): - Type
|
42
|
+
annotation: bool | IRSchema | None - Resolves mypy strict mode error on line 566 - Supports three
|
43
|
+
OpenAPI additionalProperties patterns: * bool: true/false for allowing/disallowing additional
|
44
|
+
properties * IRSchema: schema object defining additional property validation * None:
|
45
|
+
additionalProperties not specified in OpenAPI spec
|
46
|
+
|
47
|
+
Technical context: - mypy --strict requires explicit types for union type assignments - Field can
|
48
|
+
receive different types based on OpenAPI specification structure - Conditional assignment at line
|
49
|
+
573 assigns bool, dict-parsed IRSchema, or None - No functional changes, only type safety
|
50
|
+
improvement for static analysis
|
51
|
+
|
52
|
+
Resolves: mypy error "Incompatible types in assignment (expression has type...)"
|
53
|
+
|
54
|
+
### Code Style
|
55
|
+
|
56
|
+
- **format**: Apply Black formatting to modernised type syntax changes
|
57
|
+
([`3fb6baa`](https://github.com/mindhiveoy/pyopenapi_gen/commit/3fb6baaf6d1e2c1918cd0d64935f7d5a390daadc))
|
58
|
+
|
59
|
+
- **format**: Apply Ruff auto-formatting to entire codebase
|
60
|
+
([`3b0ab6b`](https://github.com/mindhiveoy/pyopenapi_gen/commit/3b0ab6bcabe4caeee33a0e09f83bf28f58bfde76))
|
61
|
+
|
62
|
+
Applied Ruff formatting to 116 files for code style consistency: - Executed: make quality-fix (Ruff
|
63
|
+
format + lint --fix) - Changes: Import sorting, line breaks, whitespace normalization - No
|
64
|
+
functional changes, only formatting adjustments
|
65
|
+
|
66
|
+
Files affected: - src/pyopenapi_gen/: 72 files (core, helpers, types, visit, emitters) - tests/: 44
|
67
|
+
files (all test modules) - input/business_swagger.json: Reformatted JSON structure
|
68
|
+
|
69
|
+
Formatting changes: - Import statement ordering per PEP 8 - Line length normalization (120 char
|
70
|
+
limit) - Trailing whitespace removal - Consistent indentation and spacing
|
71
|
+
|
72
|
+
Quality gates: ✅ make format-check: PASSED ✅ make lint: PASSED ✅ make typecheck: PASSED ✅ make test:
|
73
|
+
1278 passed, 88.48% coverage
|
74
|
+
|
75
|
+
No functional changes, zero test regressions
|
76
|
+
|
77
|
+
- **lint**: Remove unused TypeFinalizer import from alias_generator
|
78
|
+
([`7b27e7c`](https://github.com/mindhiveoy/pyopenapi_gen/commit/7b27e7c5306c252bd816661e6815395ec431f2ce))
|
79
|
+
|
80
|
+
### Refactoring
|
81
|
+
|
82
|
+
- **types**: Enforce modern Python 3.10+ type syntax across unified type system
|
83
|
+
([`f642a67`](https://github.com/mindhiveoy/pyopenapi_gen/commit/f642a679760d84aa7f3c3fdbefd856056b8a02bd))
|
84
|
+
|
85
|
+
Eliminate legacy Optional[X] syntax in favour of modern X | None throughout the unified type
|
86
|
+
resolution pipeline, establishing architectural guarantees with three-layer protection against
|
87
|
+
Optional[X] leaks.
|
88
|
+
|
89
|
+
Technical changes:
|
90
|
+
|
91
|
+
1. UnifiedTypeService (_format_resolved_type): - Added SANITY CHECK raising ValueError for
|
92
|
+
Optional[X] production - Reordered formatting: quote forward refs BEFORE adding | None - Modern
|
93
|
+
syntax: "DataSource" | None (not "DataSource | None") - Architecture guarantee: ONLY X | None
|
94
|
+
syntax, NEVER Optional[X]
|
95
|
+
|
96
|
+
2. TypeFinalizer (_wrap_with_optional_if_needed): - Added SANITY CHECK with error logging for
|
97
|
+
Optional[X] reception - Removed all Optional import statements (not needed in Python 3.10+) -
|
98
|
+
Fixed operation order: clean BEFORE wrapping prevents TypeCleaner breaking patterns - Defensive
|
99
|
+
conversion with warning for architectural violations
|
100
|
+
|
101
|
+
3. ResponseHandlerGenerator (_get_base_schema_deserialization_code): - Added SANITY CHECK for
|
102
|
+
Optional[X] in response deserialization - New code path for modern X | None syntax handling -
|
103
|
+
Removed Optional from type checking and model detection - Maintains backward compatibility with
|
104
|
+
defensive conversion
|
105
|
+
|
106
|
+
4. SchemaResolver: - Fixed null schema handling to respect required parameter - Changed
|
107
|
+
_resolve_any() to accept required parameter for correct optionality - Updated all Any fallbacks to
|
108
|
+
respect required throughout resolver chain
|
109
|
+
|
110
|
+
5. ResponseResolver: - Modernised AsyncIterator[Dict[str, Any]] to AsyncIterator[dict[str, Any]] -
|
111
|
+
Removed unnecessary Dict import (uses lowercase dict)
|
112
|
+
|
113
|
+
6. AliasGenerator & DataclassGenerator: - Removed duplicate TypeCleaner calls (already handled by
|
114
|
+
TypeFinalizer) - TypeFinalizer now performs cleaning in correct order - Added type hints to
|
115
|
+
dict-like methods (keys, values, items)
|
116
|
+
|
117
|
+
Three-layer protection against Optional[X]: - Layer 1: UnifiedTypeService raises exception if
|
118
|
+
Optional[X] produced - Layer 2: TypeFinalizer logs error if Optional[X] received - Layer 3:
|
119
|
+
ResponseHandlerGenerator logs error if Optional[X] in deserialization
|
120
|
+
|
121
|
+
Breaking changes: None (defensive conversions maintain compatibility)
|
122
|
+
|
123
|
+
All tests passing: 1298 tests, zero regressions
|
124
|
+
|
125
|
+
### Testing
|
126
|
+
|
127
|
+
- Update test assertions for modern Python 3.10+ type syntax
|
128
|
+
([`9644bf7`](https://github.com/mindhiveoy/pyopenapi_gen/commit/9644bf72d41769510b3d9a6774521ee5fd75b6c9))
|
129
|
+
|
130
|
+
Update test expectations to align with unified type system's modern X | None syntax, removing
|
131
|
+
assertions for Optional import presence and modernising type checking patterns.
|
132
|
+
|
133
|
+
Test changes:
|
134
|
+
|
135
|
+
1. test_type_helper.py: - Removed 8 assertions checking for Optional import (not needed in Python
|
136
|
+
3.10+) - Updated finalize() expectations to use X | None syntax - Fixed Union type expectations:
|
137
|
+
Union[int, float] | None (not Optional[Union[...]])
|
138
|
+
|
139
|
+
2. test_loader.py: - Updated regex to match modern dict[str, Any] (not Dict[str, Any]) - Updated
|
140
|
+
both params and query_params patterns
|
141
|
+
|
142
|
+
3. test_endpoints_emitter.py: - Accept both Dict and dict in type checking - Removed strict Optional
|
143
|
+
import requirement
|
144
|
+
|
145
|
+
4. test_models_emitter.py: - Updated datetime test: Python 3.10+ doesn't need Optional import -
|
146
|
+
Updated optional list factory test: only List import needed - Updated union anyof test: accepts
|
147
|
+
modern syntax
|
148
|
+
|
149
|
+
5. test_type_cleaner.py: - Fixed test to use public API instead of private _clean_simple_patterns -
|
150
|
+
Tests now verify clean_type_parameters() public interface
|
151
|
+
|
152
|
+
6. test_agent_include_parameter_typing.py: - Added circular reference placeholder detection - Test
|
153
|
+
now handles unified cycle detection properly
|
154
|
+
|
155
|
+
7. test_response_resolver.py, test_schema_resolver.py, test_business_swagger_message_type.py: -
|
156
|
+
Updated type expectations for modern syntax - Removed Optional-specific assertions
|
157
|
+
|
158
|
+
All test updates are assertion-only (no logic changes) Test results: 1298 tests passing, 2 warnings
|
159
|
+
(expected from edge case tests)
|
160
|
+
|
161
|
+
- **regression**: Add comprehensive coverage for three critical bug classes
|
162
|
+
([`0b5a7ba`](https://github.com/mindhiveoy/pyopenapi_gen/commit/0b5a7ba44d7b58007ef5ed0d446547ec34f8199f))
|
163
|
+
|
164
|
+
Added 8 regression tests protecting against recently discovered bugs:
|
165
|
+
|
166
|
+
1. JsonValue wrapper class generation (1 test) File: tests/visit/model/test_json_value_wrapper.py
|
167
|
+
Scenario: Schema with additionalProperties: {nullable: true} Bug: Generated empty class instead of
|
168
|
+
dict-like wrapper with __getitem__ Protection: Validates wrapper class structure and dict-like
|
169
|
+
interface
|
170
|
+
|
171
|
+
2. Null schema resolution (4 tests) File: tests/types/test_schema_resolver.py Bug: Schemas with
|
172
|
+
type=None resolved to None instead of Any Impact: Type name collisions across unrelated fields in
|
173
|
+
generated code Tests cover: - test_resolve_schema__null_type_schema__returns_any -
|
174
|
+
test_resolve_schema__null_type_schema_optional__returns_any_with_optional_flag -
|
175
|
+
test_resolve_schema__schema_no_type_no_generation_name__returns_any -
|
176
|
+
test_resolve_schema__schema_no_type_but_has_generation_name__resolves_as_named
|
177
|
+
|
178
|
+
3. Modern union syntax preservation (2 tests) File: tests/helpers/test_type_cleaner.py Bug:
|
179
|
+
Top-level unions "List[X] | None" truncated to "List[X] | Non]" Impact: 36 syntax errors in
|
180
|
+
business_swagger.json client Tests cover: -
|
181
|
+
test_clean_type_parameters__modern_union_syntax_with_list__preserves_full_type -
|
182
|
+
test_clean_type_parameters__modern_union_syntax_nested__handles_correctly
|
183
|
+
|
184
|
+
4. Integration test (1 test) File: tests/visit/model/test_json_value_integration.py End-to-end
|
185
|
+
validation of wrapper generation pipeline
|
186
|
+
|
187
|
+
Test execution results: - New tests: 8/8 PASSING - Total suite: 1278 passed - Coverage: 88.48%
|
188
|
+
(above 85% requirement) - Zero regressions introduced
|
189
|
+
|
190
|
+
Protects against: business_swagger.json generation failures discovered in production
|
191
|
+
|
192
|
+
|
193
|
+
## v0.14.0 (2025-10-06)
|
194
|
+
|
195
|
+
### Documentation
|
196
|
+
|
197
|
+
- Remove legacy commands from development guide
|
198
|
+
([`396680e`](https://github.com/mindhiveoy/pyopenapi_gen/commit/396680e93f15cabc638af0a1170853cfa3d6e5de))
|
199
|
+
|
200
|
+
Removed outdated "Legacy Commands" section from CLAUDE.md development guide as modern commands are
|
201
|
+
already documented in "Essential Commands" section.
|
202
|
+
|
203
|
+
Technical Details: - Removed 5 lines of legacy command documentation - Deleted commands that are
|
204
|
+
superseded by Makefile targets: * pytest --cov=src --cov-report=html (use: make test-cov) * ruff
|
205
|
+
check --fix src/ (use: make lint-fix) * mypy src/ --strict (use: make typecheck) - Modern
|
206
|
+
equivalents already documented with better descriptions - Simplified development workflow
|
207
|
+
documentation
|
208
|
+
|
209
|
+
Impact: - No functional changes - Documentation now clearer with single source of truth for commands
|
210
|
+
- Developers directed to use consistent Makefile targets
|
211
|
+
|
212
|
+
### Features
|
213
|
+
|
214
|
+
- **exceptions**: Implement human-readable exception names and shared core registry
|
215
|
+
([`6983037`](https://github.com/mindhiveoy/pyopenapi_gen/commit/69830375a5a8e93b14c6cf2cf7b289093b57a346))
|
216
|
+
|
217
|
+
Replaces generic numeric exception names with semantic, human-readable names and adds registry
|
218
|
+
system for multi-client shared core scenarios.
|
219
|
+
|
220
|
+
Technical Details: - Created http_status_codes.py with comprehensive HTTP status code mapping (400 →
|
221
|
+
BadRequestError, 404 → NotFoundError, 500 → InternalServerError) - Exception classes now include
|
222
|
+
human-readable status names in docstrings - Filters out 2xx success codes from exception
|
223
|
+
generation (no error classes for successful responses using is_error_code() helper) - Implements
|
224
|
+
.exception_registry.json to track exceptions needed by each client in shared core scenarios -
|
225
|
+
Registry prevents last client from overwriting exceptions needed by earlier clients when multiple
|
226
|
+
clients share a core package - Generated exception_aliases.py is Ruff-compliant from generation
|
227
|
+
(proper import ordering with third-party before local, correct spacing)
|
228
|
+
|
229
|
+
Breaking Changes: - Generated exception class names changed from Error{code} to semantic names
|
230
|
+
(Error404 → NotFoundError, Error401 → UnauthorisedError, etc.) - Affects generated client code but
|
231
|
+
not runtime behavior - ExceptionsEmitter.emit() now accepts optional client_package_name parameter
|
232
|
+
- ExceptionVisitor.visit() returns tuple of (code, names, status_codes) instead of (code, names)
|
233
|
+
|
234
|
+
Migration Notes: - Regenerate all clients to get new human-readable exception names - No code
|
235
|
+
changes required for clients using exception handling - Registry file (.exception_registry.json)
|
236
|
+
automatically managed - Clients continue to catch exceptions the same way, just with better names
|
237
|
+
|
238
|
+
Implementation: - HTTP_EXCEPTION_NAMES maps status codes to semantic class names -
|
239
|
+
get_exception_class_name() provides consistent name resolution - get_status_name() provides
|
240
|
+
human-readable descriptions - is_error_code() filters to only 4xx/5xx codes - Registry system uses
|
241
|
+
JSON to track multi-client exception requirements
|
242
|
+
|
243
|
+
### Performance Improvements
|
244
|
+
|
245
|
+
- **postprocess**: Optimize Ruff execution with bulk operations (25x faster)
|
246
|
+
([`eed3c34`](https://github.com/mindhiveoy/pyopenapi_gen/commit/eed3c346da9ddbb9daa1d745e8bc8f8f46c6e9b6))
|
247
|
+
|
248
|
+
Changed from per-file Ruff subprocess calls to bulk operations on all files, reducing generation
|
249
|
+
time from 120+ seconds to 5.4 seconds for large specs.
|
250
|
+
|
251
|
+
Technical Details: - Added remove_unused_imports_bulk(), sort_imports_bulk(), format_code_bulk()
|
252
|
+
methods that process all files in a single subprocess call - Changed from 2,331 individual
|
253
|
+
subprocess calls to 3 bulk calls for 777 files - Performance improvement: 120+ seconds → 5.4
|
254
|
+
seconds (25x speedup) - Temporarily disabled mypy type checking for faster iteration
|
255
|
+
(configurable, can be re-enabled when full validation needed) - Fixed docstring empty line
|
256
|
+
handling in PythonConstructRenderer to avoid trailing whitespace (Ruff W293 compliance)
|
257
|
+
|
258
|
+
Implementation Approach: - Subprocess.run() executes ruff with list of all file paths as arguments
|
259
|
+
instead of individual calls per file - Maintained existing error handling and output filtering
|
260
|
+
logic - Preserved per-file methods for backward compatibility - Empty lines in class body_lines
|
261
|
+
now use writer.newline() instead of write_line("") to prevent indentation on blank lines
|
262
|
+
|
263
|
+
Performance Impact: - Large spec generation (777 files): 120s → 5.4s - No change to generated code
|
264
|
+
quality or Ruff compliance - All formatting, linting, and import organization still applied - Mypy
|
265
|
+
still available but disabled by default for speed
|
266
|
+
|
267
|
+
Non-breaking Change: - Generated code quality unchanged - All existing functionality preserved -
|
268
|
+
Mypy can be re-enabled by uncommenting lines 63-68 in postprocess_manager.py
|
269
|
+
|
270
|
+
### Testing
|
271
|
+
|
272
|
+
- Update exception tests for human-readable names
|
273
|
+
([`26e2aef`](https://github.com/mindhiveoy/pyopenapi_gen/commit/26e2aef9df2e713a1d4098608f7c191bcd5992ab))
|
274
|
+
|
275
|
+
Updated all exception-related tests to expect new human-readable exception names instead of generic
|
276
|
+
numeric names (NotFoundError vs Error404).
|
277
|
+
|
278
|
+
Technical Details: - Updated test_exceptions_emitter.py assertions: * Now expects NotFoundError
|
279
|
+
instead of Error404 * Now expects InternalServerError instead of Error500 * Added validation for
|
280
|
+
human-readable status descriptions in docstrings * Removed HTTPError import assertion (no longer
|
281
|
+
used in exception_aliases.py) - Updated test_response_handler_generator.py: * Changed Error404
|
282
|
+
assertions to NotFoundError * Updated test docstrings to reflect human-readable names - Updated
|
283
|
+
test_match_case_response.py: * Changed Error400/401/404/500 to BadRequestError/UnauthorisedError/
|
284
|
+
NotFoundError/InternalServerError - Updated test_response_handler_generator_strategy.py: * Changed
|
285
|
+
Error404/500 assertions to NotFoundError/InternalServerError
|
286
|
+
|
287
|
+
Test Results: - All 1,280 tests passing (100% success rate) - Coverage maintained at 85%+ - All
|
288
|
+
exception-related assertions updated and verified - No test failures or regressions
|
289
|
+
|
290
|
+
Changes Tested: - Exception class name generation - Exception docstring content - Import statements
|
291
|
+
in generated code - Response handler error raising - Match-case statement error handling
|
292
|
+
|
293
|
+
|
4
294
|
## v0.13.0 (2025-09-08)
|
5
295
|
|
6
296
|
### Bug Fixes
|
@@ -94,11 +94,6 @@ make test-fast # Run tests, stop on first failure
|
|
94
94
|
make test-cov # Run tests in parallel with coverage report (85% required)
|
95
95
|
pytest -n auto # Run tests in parallel (faster, use with --timeout=300 if needed)
|
96
96
|
|
97
|
-
# Legacy Commands (still work)
|
98
|
-
pytest --cov=src --cov-report=html # Generate coverage report
|
99
|
-
ruff check --fix src/ # Auto-fix linting issues
|
100
|
-
mypy src/ --strict # Strict type checking
|
101
|
-
|
102
97
|
# Development
|
103
98
|
make build # Build package
|
104
99
|
make clean # Clean build artifacts
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: pyopenapi-gen
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.14.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
|