pyopenapi-gen 0.19.0__tar.gz → 0.20.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyopenapi-gen might be problematic. Click here for more details.
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.gitignore +3 -1
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/CHANGELOG.md +66 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/PKG-INFO +1 -1
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/coverage.xml +81 -76
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/pyproject.toml +2 -2
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/__init__.py +1 -1
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/utils.py +5 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/endpoint/generators/endpoint_method_generator.py +2 -2
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/endpoint/generators/overload_generator.py +9 -2
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_dataclass_serialization.py +194 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/end_to_end/test_dataclass_serialization_e2e.py +60 -49
- pyopenapi_gen-0.20.1/tests/generation_issues/test_overload_naming_issues.py +203 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/generators/test_endpoint_method_generator.py +61 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/generators/test_overload_generator.py +84 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.bandit +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.cursor/mcp.json +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.cursor/rules/architecture.mdc +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.cursor/rules/coding-conventions.mdc +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.cursor/rules/project-goal.mdc +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.cursor/rules/testing.mdc +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/BRANCH_PROTECTION.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/CLAUDE_CONFIGURATION.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/CODEOWNERS +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/dependabot.yml +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/workflows/ci.yml +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/workflows/claude-auto-approve.yml +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/workflows/claude-review-trigger.yml +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/workflows/claude.yml +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/workflows/pr-checks.yml +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/workflows/production-release.yml.backup +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/workflows/promote-to-staging.yml +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/workflows/semantic-release.yml +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/workflows/staging-publish.yml +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.github/workflows/testpypi-publish.yml +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.python-version +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/.vscode/settings.json +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/CLAUDE.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/CONTRIBUTING.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/LICENSE +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/Makefile +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/README.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/docs/README.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/docs/architecture.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/docs/endpoint_visitor.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/docs/helpers.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/docs/ir_models.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/docs/line_writer.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/docs/loader.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/docs/model_visitor.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/docs/release-automation.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/docs/render_context.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/docs/unified_type_resolution.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/input/business_swagger.json +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/input/minimal_swagger.json +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/input/minimal_syntax_test.json +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/input/test_name_collision_spec.json +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/mkdocs.yml +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/poetry.lock +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/scripts/sync_version_to_init.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/scripts/validate_version_sync.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/__main__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/cli.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/context/CLAUDE.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/context/file_manager.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/context/import_collector.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/context/render_context.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/CLAUDE.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/auth/base.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/auth/plugins.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/exceptions.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/http_status_codes.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/http_transport.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/loader/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/loader/loader.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/loader/operations/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/loader/operations/parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/loader/operations/post_processor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/loader/operations/request_body.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/loader/parameters/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/loader/parameters/parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/loader/responses/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/loader/responses/parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/loader/schemas/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/loader/schemas/extractor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/pagination.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/common/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/cyclic_properties.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/direct_cycle.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/existing_schema.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/list_response.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/missing_ref.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/new_schema.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/stripped_suffix.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/resolve_schema_ref.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/common/type_parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/context.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/cycle_helpers.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/keywords/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/keywords/all_of_parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/keywords/any_of_parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/keywords/array_items_parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/keywords/one_of_parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/keywords/properties_parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/schema_finalizer.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/schema_parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/transformers/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/transformers/inline_enum_extractor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/transformers/inline_object_promoter.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/parsing/unified_cycle_detection.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/postprocess_manager.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/schemas.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/streaming_helpers.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/telemetry.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/warning_collector.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/writers/code_writer.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/writers/documentation_writer.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/writers/line_writer.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core/writers/python_construct_renderer.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/core_package_template/README.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/emit/models_emitter.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/emitters/CLAUDE.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/emitters/client_emitter.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/emitters/core_emitter.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/emitters/docs_emitter.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/emitters/endpoints_emitter.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/emitters/exceptions_emitter.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/emitters/models_emitter.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/generator/CLAUDE.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/generator/client_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/helpers/CLAUDE.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/helpers/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/helpers/endpoint_utils.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/helpers/type_cleaner.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/helpers/type_helper.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/helpers/type_resolution/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/helpers/type_resolution/array_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/helpers/type_resolution/composition_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/helpers/type_resolution/finalizer.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/helpers/type_resolution/named_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/helpers/type_resolution/object_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/helpers/type_resolution/primitive_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/helpers/type_resolution/resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/helpers/url_utils.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/http_types.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/ir.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/py.typed +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/types/CLAUDE.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/types/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/types/contracts/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/types/contracts/protocols.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/types/contracts/types.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/types/resolvers/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/types/resolvers/reference_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/types/resolvers/response_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/types/resolvers/schema_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/types/services/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/types/services/type_service.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/types/strategies/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/types/strategies/response_strategy.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/CLAUDE.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/client_visitor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/docs_visitor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/endpoint/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/endpoint/endpoint_visitor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/endpoint/generators/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/endpoint/generators/docstring_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/endpoint/generators/request_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/endpoint/generators/response_handler_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/endpoint/generators/signature_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/endpoint/generators/url_args_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/endpoint/processors/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/endpoint/processors/import_analyzer.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/endpoint/processors/parameter_processor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/exception_visitor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/model/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/model/alias_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/model/dataclass_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/model/enum_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/model/model_visitor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/src/pyopenapi_gen/visit/visitor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/api/test_programmatic_api.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/auth/auth_analysis.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/auth/test_auth_base.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/auth/test_auth_plugins.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/cli/cli_analysis.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/cli/test_cli_backup_diff.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/cli/test_cli_edge_cases.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/cli/test_cli_edge_cases_comprehensive.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/cli/test_cli_internal_utils.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/cli/test_http_pagination_cli.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/context/context_analysis.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/context/test_core_import_path.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/context/test_file_manager.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/context/test_import_collector.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/context/test_render_context.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/context/test_render_context_imports.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/context/test_render_context_relative_paths.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/core_analysis.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/loader/parameters/test_inline_enum_array_params.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/loader/test_extractor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/loader/test_top_level_enum_extraction.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/common/ref_resolution/helpers/helpers_analysis.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/common/ref_resolution/helpers/test_cyclic_properties.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/common/ref_resolution/helpers/test_direct_cycle.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/common/ref_resolution/helpers/test_existing_schema.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/common/ref_resolution/helpers/test_list_response.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/common/ref_resolution/helpers/test_missing_ref.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/common/ref_resolution/helpers/test_new_schema.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/common/ref_resolution/helpers/test_stripped_suffix.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/keywords/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/keywords/keywords_analysis.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/keywords/test_all_of_parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/keywords/test_any_of_parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/keywords/test_array_items_parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/keywords/test_one_of_parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/keywords/test_properties_parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/parsing_analysis.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/test_context.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/test_cycle_detection.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/test_cycle_helpers.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/test_improved_schema_naming.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/test_inline_enum_extractor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/test_inline_object_promoter.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/test_logging.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/test_ref_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/test_schema_finalizer.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/test_schema_parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/test_schema_parser_list_response.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/parsing/test_type_parser.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_detect_circular_imports.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_edge_cases_integration.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_edge_cases_systematic.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_exceptions_module.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_forward_references.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_http_transport.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_import_resolution.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_ir.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_ir_schema.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_loader.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_loader_extensive.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_loader_invalid_refs.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_loader_malformed.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_loader_media_types.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_pagination.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_parsing_context.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_protocol_defaults.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_schema_parser_specific_case.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_schemas.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_simple_self_ref_check.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_streaming_helpers.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_telemetry.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_telemetry_client.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_utils.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/test_warning_collector.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/writers/test_code_writer.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/writers/test_documentation_writer.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/writers/test_line_writer.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/writers/test_python_construct_renderer_json_wizard.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/core/writers/writers_analysis.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/emitters/emitters_analysis.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/emitters/test_client_emitter.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/emitters/test_docs_emitter.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/emitters/test_duplicate_operations.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/emitters/test_endpoints_emitter.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/emitters/test_exceptions_emitter.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/emitters/test_list_response_generation.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/emitters/test_models_emitter.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/examples/test_developer_experience_demo.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/generation/generation_analysis.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/generation/test_external_core_package.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/generation_issues/specs/minimal_addmessage_like.json +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/generation_issues/test_addmessage_like_issues.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/generation_issues/test_agent_include_parameter_typing.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/generation_issues/test_message_batch_response_issue.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/helpers/helpers_analysis.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/helpers/test_array_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/helpers/test_endpoint_utils.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/helpers/test_endpoint_utils_extended.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/helpers/test_get_endpoint_return_types.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/helpers/test_named_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/helpers/test_named_type_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/helpers/test_object_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/helpers/test_put_endpoint_return_types.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/helpers/test_type_cleaner.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/helpers/test_type_helper.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/helpers/test_url_utils.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/helpers/test_utils_helpers.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/integration/test_generated_code_structure.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/integrations/integrations_analysis.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/integrations/test_business_swagger_message_type.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/integrations/test_end_to_end_business_swagger.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/integrations/test_end_to_end_petstore.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/integrations/test_name_collisions.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/specs/response_unwrapping_spec.yaml +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/test_analysis_overview.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/test_init.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/types/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/types/test_business_swagger_integration.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/types/test_contracts_types.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/types/test_missing_imports_bug.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/types/test_reference_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/types/test_response_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/types/test_response_strategy.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/types/test_response_strategy_simplified.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/types/test_schema_resolver.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/types/test_schema_resolver_enums.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/types/test_type_service.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/generators/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/generators/generators_analysis.md +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/generators/test_dataclass_integration.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/generators/test_docstring_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/generators/test_match_case_response.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/generators/test_request_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/generators/test_response_handler_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/generators/test_response_handler_generator_strategy.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/generators/test_signature_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/generators/test_url_args_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/processors/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/processors/test_import_analyzer.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/processors/test_import_analyzer.py.bak +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/processors/test_parameter_processor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/endpoint/test_endpoint_visitor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/model/__init__.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/model/test_alias_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/model/test_dataclass_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/model/test_dataclass_generator_json_wizard.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/model/test_enum_generator.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/model/test_json_value_integration.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/model/test_json_value_wrapper.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/test_client_visitor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/test_model_visitor.py +0 -0
- {pyopenapi_gen-0.19.0 → pyopenapi_gen-0.20.1}/tests/visit/test_visitor.py +0 -0
|
@@ -1,6 +1,72 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## v0.20.1 (2025-10-21)
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
- **codegen**: Resolve method naming and file handling in overloaded endpoints
|
|
9
|
+
([`190e581`](https://github.com/mindhiveoy/pyopenapi_gen/commit/190e5819e99edf37d14722b075069851d03c4c3b))
|
|
10
|
+
|
|
11
|
+
This commit fixes two critical issues in code generation for operations with multiple content types
|
|
12
|
+
(overloaded methods):
|
|
13
|
+
|
|
14
|
+
1. **Method Naming**: Overloaded methods were using camelCase from OpenAPI operationId instead of
|
|
15
|
+
converting to Python's snake_case convention. - Fixed: Added NameSanitizer.sanitize_method_name()
|
|
16
|
+
in overload_generator.py - Example: updateDocument -> update_document
|
|
17
|
+
|
|
18
|
+
2. **File Upload Handling**: Multipart/form-data file uploads were incorrectly being passed through
|
|
19
|
+
DataclassSerializer.serialize(), which is designed for dataclass-to-dict conversion, not file I/O.
|
|
20
|
+
- Fixed: Pass file dict directly to httpx transport in endpoint_method_generator.py - Rationale:
|
|
21
|
+
httpx expects raw IO objects, not serialized data
|
|
22
|
+
|
|
23
|
+
Both issues only affected operations with multiple content types (JSON + multipart). Standard
|
|
24
|
+
single-content-type operations were unaffected.
|
|
25
|
+
|
|
26
|
+
Changes: - src/pyopenapi_gen/visit/endpoint/generators/overload_generator.py: Added NameSanitizer
|
|
27
|
+
import and method name sanitisation in two locations (overload signatures and implementation
|
|
28
|
+
signatures)
|
|
29
|
+
|
|
30
|
+
- src/pyopenapi_gen/visit/endpoint/generators/endpoint_method_generator.py: Removed
|
|
31
|
+
DataclassSerializer.serialize() for file parameters in multipart handling, passing files directly
|
|
32
|
+
to transport
|
|
33
|
+
|
|
34
|
+
- tests/visit/endpoint/generators/test_overload_generator.py: Added unit tests for snake_case
|
|
35
|
+
conversion in overload and implementation signatures
|
|
36
|
+
|
|
37
|
+
- tests/visit/endpoint/generators/test_endpoint_method_generator.py: Added test for file handling
|
|
38
|
+
without serialisation
|
|
39
|
+
|
|
40
|
+
- tests/generation_issues/test_overload_naming_issues.py: Added integration tests verifying both
|
|
41
|
+
fixes in full code generation pipeline
|
|
42
|
+
|
|
43
|
+
All tests pass (1348 tests) with full quality checks (format, lint, typecheck, security).
|
|
44
|
+
|
|
45
|
+
### Chores
|
|
46
|
+
|
|
47
|
+
- **release**: Sync __init__.py version [skip ci]
|
|
48
|
+
([`8047e53`](https://github.com/mindhiveoy/pyopenapi_gen/commit/8047e53df11d8985d95f89dbf3b36046af1e6f1a))
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
## v0.20.0 (2025-10-19)
|
|
52
|
+
|
|
53
|
+
### Bug Fixes
|
|
54
|
+
|
|
55
|
+
- **serializer**: Handle enum instances in DataclassSerializer serialization
|
|
56
|
+
([`7eaf8ed`](https://github.com/mindhiveoy/pyopenapi_gen/commit/7eaf8ed07e6b975ecd33ec0c3a6e642f2f23e205))
|
|
57
|
+
|
|
58
|
+
### Chores
|
|
59
|
+
|
|
60
|
+
- **release**: Sync __init__.py version [skip ci]
|
|
61
|
+
([`53c6163`](https://github.com/mindhiveoy/pyopenapi_gen/commit/53c6163b7c536ee17b6bb3a5fb631ed1900a4520))
|
|
62
|
+
|
|
63
|
+
### Features
|
|
64
|
+
|
|
65
|
+
- **tests**: Add comprehensive tests for DataclassSerializer with enum support and nested
|
|
66
|
+
dataclasses
|
|
67
|
+
([`21de6af`](https://github.com/mindhiveoy/pyopenapi_gen/commit/21de6af2fdd33de6212863cc645ed426c6b1cd72))
|
|
68
|
+
|
|
69
|
+
|
|
4
70
|
## v0.19.0 (2025-10-18)
|
|
5
71
|
|
|
6
72
|
### Chores
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyopenapi-gen
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.20.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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<?xml version="1.0" ?>
|
|
2
|
-
<coverage version="7.10.7" timestamp="
|
|
2
|
+
<coverage version="7.10.7" timestamp="1761058806878" lines-valid="6507" lines-covered="5752" line-rate="0.884" branches-covered="0" branches-valid="0" branch-rate="0" complexity="0">
|
|
3
3
|
<!-- Generated by coverage.py: https://coverage.readthedocs.io/en/7.10.7 -->
|
|
4
4
|
<!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd -->
|
|
5
5
|
<sources>
|
|
@@ -652,7 +652,7 @@
|
|
|
652
652
|
</class>
|
|
653
653
|
</classes>
|
|
654
654
|
</package>
|
|
655
|
-
<package name="pyopenapi_gen.core" line-rate="0.
|
|
655
|
+
<package name="pyopenapi_gen.core" line-rate="0.8327" branch-rate="0" complexity="0">
|
|
656
656
|
<classes>
|
|
657
657
|
<class name="__init__.py" filename="pyopenapi_gen/core/__init__.py" complexity="0" line-rate="1" branch-rate="0">
|
|
658
658
|
<methods/>
|
|
@@ -1053,7 +1053,7 @@
|
|
|
1053
1053
|
<line number="69" hits="1"/>
|
|
1054
1054
|
</lines>
|
|
1055
1055
|
</class>
|
|
1056
|
-
<class name="utils.py" filename="pyopenapi_gen/core/utils.py" complexity="0" line-rate="0.
|
|
1056
|
+
<class name="utils.py" filename="pyopenapi_gen/core/utils.py" complexity="0" line-rate="0.9353" branch-rate="0">
|
|
1057
1057
|
<methods/>
|
|
1058
1058
|
<lines>
|
|
1059
1059
|
<line number="6" hits="1"/>
|
|
@@ -1176,53 +1176,56 @@
|
|
|
1176
1176
|
<line number="339" hits="1"/>
|
|
1177
1177
|
<line number="341" hits="1"/>
|
|
1178
1178
|
<line number="342" hits="1"/>
|
|
1179
|
-
<line number="
|
|
1179
|
+
<line number="344" hits="1"/>
|
|
1180
1180
|
<line number="347" hits="1"/>
|
|
1181
|
-
<line number="
|
|
1181
|
+
<line number="348" hits="1"/>
|
|
1182
1182
|
<line number="351" hits="1"/>
|
|
1183
|
-
<line number="
|
|
1183
|
+
<line number="352" hits="1"/>
|
|
1184
1184
|
<line number="354" hits="1"/>
|
|
1185
|
-
<line number="355" hits="
|
|
1186
|
-
<line number="
|
|
1185
|
+
<line number="355" hits="1"/>
|
|
1186
|
+
<line number="356" hits="0"/>
|
|
1187
1187
|
<line number="359" hits="1"/>
|
|
1188
|
-
<line number="
|
|
1188
|
+
<line number="360" hits="1"/>
|
|
1189
1189
|
<line number="363" hits="1"/>
|
|
1190
1190
|
<line number="364" hits="1"/>
|
|
1191
|
-
<line number="365" hits="1"/>
|
|
1192
|
-
<line number="366" hits="1"/>
|
|
1193
1191
|
<line number="367" hits="1"/>
|
|
1192
|
+
<line number="368" hits="1"/>
|
|
1194
1193
|
<line number="369" hits="1"/>
|
|
1195
1194
|
<line number="370" hits="1"/>
|
|
1196
1195
|
<line number="371" hits="1"/>
|
|
1197
1196
|
<line number="372" hits="1"/>
|
|
1198
|
-
<line number="
|
|
1197
|
+
<line number="374" hits="1"/>
|
|
1199
1198
|
<line number="375" hits="1"/>
|
|
1199
|
+
<line number="376" hits="1"/>
|
|
1200
|
+
<line number="377" hits="1"/>
|
|
1200
1201
|
<line number="378" hits="1"/>
|
|
1201
|
-
<line number="
|
|
1202
|
-
<line number="382" hits="1"/>
|
|
1202
|
+
<line number="380" hits="1"/>
|
|
1203
1203
|
<line number="383" hits="1"/>
|
|
1204
1204
|
<line number="384" hits="1"/>
|
|
1205
|
-
<line number="385" hits="1"/>
|
|
1206
|
-
<line number="386" hits="1"/>
|
|
1207
1205
|
<line number="387" hits="1"/>
|
|
1208
1206
|
<line number="388" hits="1"/>
|
|
1207
|
+
<line number="389" hits="1"/>
|
|
1208
|
+
<line number="390" hits="1"/>
|
|
1209
1209
|
<line number="391" hits="1"/>
|
|
1210
1210
|
<line number="392" hits="1"/>
|
|
1211
|
-
<line number="
|
|
1211
|
+
<line number="393" hits="1"/>
|
|
1212
|
+
<line number="396" hits="1"/>
|
|
1212
1213
|
<line number="397" hits="1"/>
|
|
1213
|
-
<line number="398" hits="1"/>
|
|
1214
|
-
<line number="399" hits="1"/>
|
|
1215
1214
|
<line number="400" hits="1"/>
|
|
1216
|
-
<line number="401" hits="1"/>
|
|
1217
1215
|
<line number="402" hits="1"/>
|
|
1218
1216
|
<line number="403" hits="1"/>
|
|
1219
1217
|
<line number="404" hits="1"/>
|
|
1220
1218
|
<line number="405" hits="1"/>
|
|
1221
1219
|
<line number="406" hits="1"/>
|
|
1220
|
+
<line number="407" hits="1"/>
|
|
1222
1221
|
<line number="408" hits="1"/>
|
|
1223
|
-
<line number="
|
|
1224
|
-
<line number="
|
|
1225
|
-
<line number="
|
|
1222
|
+
<line number="409" hits="1"/>
|
|
1223
|
+
<line number="410" hits="1"/>
|
|
1224
|
+
<line number="411" hits="1"/>
|
|
1225
|
+
<line number="413" hits="1"/>
|
|
1226
|
+
<line number="416" hits="0"/>
|
|
1227
|
+
<line number="417" hits="0"/>
|
|
1228
|
+
<line number="419" hits="0"/>
|
|
1226
1229
|
</lines>
|
|
1227
1230
|
</class>
|
|
1228
1231
|
<class name="warning_collector.py" filename="pyopenapi_gen/core/warning_collector.py" complexity="0" line-rate="1" branch-rate="0">
|
|
@@ -6005,7 +6008,7 @@
|
|
|
6005
6008
|
</class>
|
|
6006
6009
|
</classes>
|
|
6007
6010
|
</package>
|
|
6008
|
-
<package name="pyopenapi_gen.visit.endpoint.generators" line-rate="0.
|
|
6011
|
+
<package name="pyopenapi_gen.visit.endpoint.generators" line-rate="0.8884" branch-rate="0" complexity="0">
|
|
6009
6012
|
<classes>
|
|
6010
6013
|
<class name="__init__.py" filename="pyopenapi_gen/visit/endpoint/generators/__init__.py" complexity="0" line-rate="1" branch-rate="0">
|
|
6011
6014
|
<methods/>
|
|
@@ -6082,7 +6085,7 @@
|
|
|
6082
6085
|
<line number="123" hits="1"/>
|
|
6083
6086
|
</lines>
|
|
6084
6087
|
</class>
|
|
6085
|
-
<class name="endpoint_method_generator.py" filename="pyopenapi_gen/visit/endpoint/generators/endpoint_method_generator.py" complexity="0" line-rate="0.
|
|
6088
|
+
<class name="endpoint_method_generator.py" filename="pyopenapi_gen/visit/endpoint/generators/endpoint_method_generator.py" complexity="0" line-rate="0.9286" branch-rate="0">
|
|
6086
6089
|
<methods/>
|
|
6087
6090
|
<lines>
|
|
6088
6091
|
<line number="1" hits="1"/>
|
|
@@ -6185,7 +6188,6 @@
|
|
|
6185
6188
|
<line number="181" hits="1"/>
|
|
6186
6189
|
<line number="182" hits="1"/>
|
|
6187
6190
|
<line number="183" hits="1"/>
|
|
6188
|
-
<line number="184" hits="1"/>
|
|
6189
6191
|
<line number="185" hits="1"/>
|
|
6190
6192
|
<line number="186" hits="1"/>
|
|
6191
6193
|
<line number="187" hits="1"/>
|
|
@@ -6225,93 +6227,96 @@
|
|
|
6225
6227
|
<line number="10" hits="1"/>
|
|
6226
6228
|
<line number="11" hits="1"/>
|
|
6227
6229
|
<line number="12" hits="1"/>
|
|
6228
|
-
<line number="
|
|
6229
|
-
<line number="
|
|
6230
|
-
<line number="
|
|
6230
|
+
<line number="13" hits="1"/>
|
|
6231
|
+
<line number="15" hits="1"/>
|
|
6232
|
+
<line number="18" hits="1"/>
|
|
6231
6233
|
<line number="27" hits="1"/>
|
|
6232
6234
|
<line number="28" hits="1"/>
|
|
6233
6235
|
<line number="29" hits="1"/>
|
|
6234
6236
|
<line number="30" hits="1"/>
|
|
6235
|
-
<line number="
|
|
6236
|
-
<line number="
|
|
6237
|
+
<line number="31" hits="1"/>
|
|
6238
|
+
<line number="33" hits="1"/>
|
|
6237
6239
|
<line number="43" hits="1"/>
|
|
6238
6240
|
<line number="44" hits="1"/>
|
|
6239
|
-
<line number="
|
|
6240
|
-
<line number="
|
|
6241
|
+
<line number="45" hits="1"/>
|
|
6242
|
+
<line number="47" hits="1"/>
|
|
6241
6243
|
<line number="61" hits="1"/>
|
|
6242
|
-
<line number="
|
|
6244
|
+
<line number="62" hits="1"/>
|
|
6243
6245
|
<line number="65" hits="1"/>
|
|
6244
6246
|
<line number="66" hits="1"/>
|
|
6245
6247
|
<line number="67" hits="1"/>
|
|
6246
|
-
<line number="
|
|
6247
|
-
<line number="
|
|
6248
|
-
<line number="
|
|
6248
|
+
<line number="68" hits="1"/>
|
|
6249
|
+
<line number="70" hits="1"/>
|
|
6250
|
+
<line number="73" hits="1"/>
|
|
6249
6251
|
<line number="77" hits="1"/>
|
|
6250
6252
|
<line number="78" hits="1"/>
|
|
6251
|
-
<line number="
|
|
6252
|
-
<line number="
|
|
6253
|
-
<line number="
|
|
6254
|
-
<line number="
|
|
6255
|
-
<line number="
|
|
6256
|
-
<line number="
|
|
6257
|
-
<line number="
|
|
6253
|
+
<line number="79" hits="1"/>
|
|
6254
|
+
<line number="81" hits="1"/>
|
|
6255
|
+
<line number="83" hits="1"/>
|
|
6256
|
+
<line number="104" hits="1"/>
|
|
6257
|
+
<line number="107" hits="1"/>
|
|
6258
|
+
<line number="110" hits="1"/>
|
|
6259
|
+
<line number="113" hits="1"/>
|
|
6258
6260
|
<line number="116" hits="1"/>
|
|
6259
|
-
<line number="
|
|
6260
|
-
<line number="
|
|
6261
|
+
<line number="117" hits="1"/>
|
|
6262
|
+
<line number="119" hits="1"/>
|
|
6261
6263
|
<line number="121" hits="1"/>
|
|
6262
6264
|
<line number="122" hits="1"/>
|
|
6263
6265
|
<line number="123" hits="1"/>
|
|
6264
|
-
<line number="
|
|
6265
|
-
<line number="
|
|
6266
|
-
<line number="
|
|
6267
|
-
<line number="
|
|
6268
|
-
<line number="
|
|
6266
|
+
<line number="124" hits="1"/>
|
|
6267
|
+
<line number="127" hits="1"/>
|
|
6268
|
+
<line number="130" hits="1"/>
|
|
6269
|
+
<line number="133" hits="1"/>
|
|
6270
|
+
<line number="136" hits="1"/>
|
|
6269
6271
|
<line number="139" hits="1"/>
|
|
6270
|
-
<line number="140" hits="1"/>
|
|
6271
|
-
<line number="141" hits="1"/>
|
|
6272
6272
|
<line number="142" hits="1"/>
|
|
6273
6273
|
<line number="143" hits="1"/>
|
|
6274
|
+
<line number="144" hits="1"/>
|
|
6274
6275
|
<line number="145" hits="1"/>
|
|
6276
|
+
<line number="146" hits="1"/>
|
|
6275
6277
|
<line number="147" hits="1"/>
|
|
6276
|
-
<line number="
|
|
6277
|
-
<line number="
|
|
6278
|
-
<line number="
|
|
6279
|
-
<line number="
|
|
6280
|
-
<line number="
|
|
6281
|
-
<line number="
|
|
6278
|
+
<line number="149" hits="1"/>
|
|
6279
|
+
<line number="151" hits="1"/>
|
|
6280
|
+
<line number="163" hits="1"/>
|
|
6281
|
+
<line number="165" hits="1"/>
|
|
6282
|
+
<line number="168" hits="1"/>
|
|
6283
|
+
<line number="170" hits="1"/>
|
|
6282
6284
|
<line number="171" hits="1"/>
|
|
6283
6285
|
<line number="173" hits="1"/>
|
|
6284
6286
|
<line number="175" hits="1"/>
|
|
6287
|
+
<line number="177" hits="1"/>
|
|
6285
6288
|
<line number="179" hits="1"/>
|
|
6286
|
-
<line number="
|
|
6287
|
-
<line number="
|
|
6288
|
-
<line number="
|
|
6289
|
-
<line number="
|
|
6290
|
-
<line number="203" hits="1"/>
|
|
6289
|
+
<line number="183" hits="1"/>
|
|
6290
|
+
<line number="184" hits="1"/>
|
|
6291
|
+
<line number="186" hits="1"/>
|
|
6292
|
+
<line number="201" hits="1"/>
|
|
6291
6293
|
<line number="204" hits="1"/>
|
|
6292
|
-
<line number="
|
|
6294
|
+
<line number="207" hits="1"/>
|
|
6293
6295
|
<line number="208" hits="1"/>
|
|
6294
|
-
<line number="209" hits="1"/>
|
|
6295
6296
|
<line number="210" hits="1"/>
|
|
6296
|
-
<line number="
|
|
6297
|
+
<line number="212" hits="1"/>
|
|
6298
|
+
<line number="213" hits="1"/>
|
|
6297
6299
|
<line number="214" hits="1"/>
|
|
6298
|
-
<line number="
|
|
6300
|
+
<line number="215" hits="1"/>
|
|
6299
6301
|
<line number="218" hits="1"/>
|
|
6300
|
-
<line number="220" hits="1"/>
|
|
6301
6302
|
<line number="221" hits="1"/>
|
|
6303
|
+
<line number="222" hits="1"/>
|
|
6302
6304
|
<line number="224" hits="1"/>
|
|
6303
6305
|
<line number="225" hits="1"/>
|
|
6304
|
-
<line number="
|
|
6305
|
-
<line number="
|
|
6306
|
+
<line number="228" hits="1"/>
|
|
6307
|
+
<line number="229" hits="1"/>
|
|
6306
6308
|
<line number="230" hits="1"/>
|
|
6307
|
-
<line number="
|
|
6308
|
-
<line number="
|
|
6309
|
+
<line number="231" hits="1"/>
|
|
6310
|
+
<line number="234" hits="1"/>
|
|
6309
6311
|
<line number="237" hits="1"/>
|
|
6310
|
-
<line number="238" hits="1"/>
|
|
6311
|
-
<line number="239" hits="1"/>
|
|
6312
6312
|
<line number="240" hits="1"/>
|
|
6313
|
-
<line number="241" hits="1"/>
|
|
6314
6313
|
<line number="243" hits="1"/>
|
|
6314
|
+
<line number="244" hits="1"/>
|
|
6315
|
+
<line number="245" hits="1"/>
|
|
6316
|
+
<line number="246" hits="1"/>
|
|
6317
|
+
<line number="247" hits="1"/>
|
|
6318
|
+
<line number="248" hits="1"/>
|
|
6319
|
+
<line number="250" hits="1"/>
|
|
6315
6320
|
</lines>
|
|
6316
6321
|
</class>
|
|
6317
6322
|
<class name="request_generator.py" filename="pyopenapi_gen/visit/endpoint/generators/request_generator.py" complexity="0" line-rate="0.9535" branch-rate="0">
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pyopenapi-gen"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.20.1"
|
|
8
8
|
description = "Modern, async-first Python client generator for OpenAPI specifications with advanced cycle detection and unified type resolution"
|
|
9
9
|
authors = [{ name = "Mindhive Oy", email = "contact@mindhive.fi" }]
|
|
10
10
|
maintainers = [{ name = "Ville Venäläinen | Mindhive Oy", email = "ville@mindhive.fi" }]
|
|
@@ -140,7 +140,7 @@ pyopenapi-gen = "pyopenapi_gen.cli:app"
|
|
|
140
140
|
|
|
141
141
|
[tool.commitizen]
|
|
142
142
|
name = "cz_conventional_commits"
|
|
143
|
-
version = "0.
|
|
143
|
+
version = "0.20.1"
|
|
144
144
|
version_files = [
|
|
145
145
|
"pyproject.toml:version",
|
|
146
146
|
"src/pyopenapi_gen/__init__.py:__version__"
|
|
@@ -50,7 +50,7 @@ __all__ = [
|
|
|
50
50
|
]
|
|
51
51
|
|
|
52
52
|
# Semantic version of the generator core – automatically managed by semantic-release.
|
|
53
|
-
__version__: str = "0.
|
|
53
|
+
__version__: str = "0.20.1"
|
|
54
54
|
|
|
55
55
|
# ---------------------------------------------------------------------------
|
|
56
56
|
# Lazy-loading and autocompletion support (This part remains)
|
|
@@ -341,6 +341,7 @@ class DataclassSerializer:
|
|
|
341
341
|
@staticmethod
|
|
342
342
|
def _serialize_with_tracking(obj: Any, visited: Set[int]) -> Any:
|
|
343
343
|
"""Internal serialization method with circular reference tracking."""
|
|
344
|
+
from enum import Enum
|
|
344
345
|
|
|
345
346
|
# Handle None values by excluding them
|
|
346
347
|
if obj is None:
|
|
@@ -358,6 +359,10 @@ class DataclassSerializer:
|
|
|
358
359
|
if isinstance(obj, datetime):
|
|
359
360
|
return obj.isoformat()
|
|
360
361
|
|
|
362
|
+
# Handle enum instances
|
|
363
|
+
if isinstance(obj, Enum) and not isinstance(obj, type):
|
|
364
|
+
return obj.value
|
|
365
|
+
|
|
361
366
|
# Handle dataclass instances
|
|
362
367
|
if dataclasses.is_dataclass(obj) and not isinstance(obj, type):
|
|
363
368
|
visited.add(obj_id)
|
|
@@ -181,12 +181,12 @@ class EndpointMethodGenerator:
|
|
|
181
181
|
writer.dedent()
|
|
182
182
|
writer.write_line(")")
|
|
183
183
|
elif content_type == "multipart/form-data":
|
|
184
|
-
|
|
184
|
+
# Files dict is already in correct format for httpx - pass directly
|
|
185
185
|
writer.write_line("response = await self._transport.request(")
|
|
186
186
|
writer.indent()
|
|
187
187
|
writer.write_line(f'"{op.method.value.upper()}", url,')
|
|
188
188
|
writer.write_line("params=None,")
|
|
189
|
-
writer.write_line("files=
|
|
189
|
+
writer.write_line(f"files={param_info['name']},")
|
|
190
190
|
writer.write_line("headers=None")
|
|
191
191
|
writer.dedent()
|
|
192
192
|
writer.write_line(")")
|
|
@@ -6,6 +6,7 @@ from typing import Any
|
|
|
6
6
|
from pyopenapi_gen import IROperation
|
|
7
7
|
|
|
8
8
|
from ....context.render_context import RenderContext
|
|
9
|
+
from ....core.utils import NameSanitizer
|
|
9
10
|
from ....core.writers.code_writer import CodeWriter
|
|
10
11
|
from ..processors.parameter_processor import EndpointParameterProcessor
|
|
11
12
|
from .docstring_generator import EndpointDocstringGenerator
|
|
@@ -134,9 +135,12 @@ class OverloadMethodGenerator:
|
|
|
134
135
|
# Get return type from response strategy
|
|
135
136
|
return_type = response_strategy.return_type
|
|
136
137
|
|
|
138
|
+
# Sanitize method name to snake_case
|
|
139
|
+
method_name = NameSanitizer.sanitize_method_name(op.operation_id)
|
|
140
|
+
|
|
137
141
|
# Write signature
|
|
138
142
|
params_str = ",\n ".join(param_parts)
|
|
139
|
-
writer.write_line(f"async def {
|
|
143
|
+
writer.write_line(f"async def {method_name}(")
|
|
140
144
|
writer.indent()
|
|
141
145
|
writer.write_line(params_str)
|
|
142
146
|
writer.dedent()
|
|
@@ -232,9 +236,12 @@ class OverloadMethodGenerator:
|
|
|
232
236
|
# Get return type
|
|
233
237
|
return_type = response_strategy.return_type
|
|
234
238
|
|
|
239
|
+
# Sanitize method name to snake_case
|
|
240
|
+
method_name = NameSanitizer.sanitize_method_name(op.operation_id)
|
|
241
|
+
|
|
235
242
|
# Write signature
|
|
236
243
|
params_str = ",\n ".join(param_parts)
|
|
237
|
-
writer.write_line(f"async def {
|
|
244
|
+
writer.write_line(f"async def {method_name}(")
|
|
238
245
|
writer.indent()
|
|
239
246
|
writer.write_line(params_str)
|
|
240
247
|
writer.dedent()
|