pyopenapi-gen 0.12.0__tar.gz → 0.12.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.12.0 → pyopenapi_gen-0.12.1}/CHANGELOG.md +32 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/PKG-INFO +1 -1
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/coverage.xml +16 -13
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/pyproject.toml +2 -2
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/parameters/parser.py +9 -0
- pyopenapi_gen-0.12.1/tests/core/loader/parameters/test_inline_enum_array_params.py +206 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/generation_issues/test_agent_include_parameter_typing.py +6 -7
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/integrations/test_end_to_end_business_swagger.py +0 -2
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.bandit +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.cursor/mcp.json +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.cursor/rules/architecture.mdc +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.cursor/rules/coding-conventions.mdc +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.cursor/rules/project-goal.mdc +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.cursor/rules/testing.mdc +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/BRANCH_PROTECTION.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/CLAUDE_CONFIGURATION.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/CODEOWNERS +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/dependabot.yml +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/workflows/ci.yml +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/workflows/claude-auto-approve.yml +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/workflows/claude-review-trigger.yml +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/workflows/claude.yml +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/workflows/pr-checks.yml +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/workflows/production-release.yml.backup +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/workflows/promote-to-staging.yml +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/workflows/semantic-release.yml +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/workflows/staging-publish.yml +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/workflows/testpypi-publish.yml +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.gitignore +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.python-version +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.vscode/settings.json +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/CLAUDE.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/CONTRIBUTING.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/LICENSE +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/Makefile +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/README.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/docs/README.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/docs/architecture.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/docs/endpoint_visitor.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/docs/helpers.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/docs/ir_models.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/docs/line_writer.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/docs/loader.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/docs/model_visitor.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/docs/render_context.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/docs/unified_type_resolution.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/input/business_swagger.json +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/input/minimal_swagger.json +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/input/minimal_syntax_test.json +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/input/test_name_collision_spec.json +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/mkdocs.yml +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/poetry.lock +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/__main__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/cli.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/context/CLAUDE.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/context/file_manager.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/context/import_collector.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/context/render_context.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/CLAUDE.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/auth/base.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/auth/plugins.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/exceptions.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/http_transport.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/loader.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/operations/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/operations/parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/operations/post_processor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/operations/request_body.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/parameters/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/responses/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/responses/parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/schemas/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/schemas/extractor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/pagination.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/common/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/cyclic_properties.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/direct_cycle.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/existing_schema.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/list_response.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/missing_ref.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/new_schema.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/stripped_suffix.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/common/ref_resolution/resolve_schema_ref.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/common/type_parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/context.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/cycle_helpers.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/keywords/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/keywords/all_of_parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/keywords/any_of_parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/keywords/array_items_parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/keywords/one_of_parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/keywords/properties_parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/schema_finalizer.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/schema_parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/transformers/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/transformers/inline_enum_extractor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/transformers/inline_object_promoter.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/unified_cycle_detection.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/postprocess_manager.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/schemas.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/streaming_helpers.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/telemetry.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/utils.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/warning_collector.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/writers/code_writer.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/writers/documentation_writer.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/writers/line_writer.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/writers/python_construct_renderer.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core_package_template/README.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/emit/models_emitter.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/emitters/CLAUDE.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/emitters/client_emitter.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/emitters/core_emitter.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/emitters/docs_emitter.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/emitters/endpoints_emitter.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/emitters/exceptions_emitter.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/emitters/models_emitter.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/generator/CLAUDE.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/generator/client_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/helpers/CLAUDE.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/helpers/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/helpers/endpoint_utils.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/helpers/type_cleaner.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/helpers/type_helper.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/helpers/type_resolution/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/helpers/type_resolution/array_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/helpers/type_resolution/composition_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/helpers/type_resolution/finalizer.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/helpers/type_resolution/named_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/helpers/type_resolution/object_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/helpers/type_resolution/primitive_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/helpers/type_resolution/resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/helpers/url_utils.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/http_types.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/ir.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/py.typed +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/types/CLAUDE.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/types/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/types/contracts/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/types/contracts/protocols.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/types/contracts/types.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/types/resolvers/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/types/resolvers/reference_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/types/resolvers/response_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/types/resolvers/schema_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/types/services/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/types/services/type_service.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/types/strategies/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/types/strategies/response_strategy.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/CLAUDE.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/client_visitor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/docs_visitor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/endpoint/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/endpoint/endpoint_visitor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/endpoint/generators/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/endpoint/generators/docstring_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/endpoint/generators/endpoint_method_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/endpoint/generators/request_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/endpoint/generators/response_handler_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/endpoint/generators/signature_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/endpoint/generators/url_args_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/endpoint/processors/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/endpoint/processors/import_analyzer.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/endpoint/processors/parameter_processor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/exception_visitor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/model/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/model/alias_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/model/dataclass_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/model/enum_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/model/model_visitor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/visit/visitor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/auth/auth_analysis.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/auth/test_auth_base.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/auth/test_auth_plugins.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/cli/cli_analysis.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/cli/test_cli_backup_diff.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/cli/test_cli_edge_cases.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/cli/test_cli_edge_cases_comprehensive.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/cli/test_cli_internal_utils.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/cli/test_http_pagination_cli.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/context/context_analysis.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/context/test_file_manager.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/context/test_import_collector.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/context/test_render_context.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/context/test_render_context_imports.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/context/test_render_context_relative_paths.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/core_analysis.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/loader/test_extractor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/loader/test_top_level_enum_extraction.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/common/ref_resolution/helpers/helpers_analysis.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/common/ref_resolution/helpers/test_cyclic_properties.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/common/ref_resolution/helpers/test_direct_cycle.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/common/ref_resolution/helpers/test_existing_schema.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/common/ref_resolution/helpers/test_list_response.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/common/ref_resolution/helpers/test_missing_ref.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/common/ref_resolution/helpers/test_new_schema.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/common/ref_resolution/helpers/test_stripped_suffix.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/keywords/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/keywords/keywords_analysis.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/keywords/test_all_of_parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/keywords/test_any_of_parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/keywords/test_array_items_parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/keywords/test_one_of_parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/keywords/test_properties_parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/parsing_analysis.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/test_context.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/test_cycle_detection.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/test_cycle_helpers.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/test_improved_schema_naming.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/test_inline_enum_extractor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/test_inline_object_promoter.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/test_logging.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/test_ref_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/test_schema_finalizer.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/test_schema_parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/test_schema_parser_list_response.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/parsing/test_type_parser.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_dataclass_serialization.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_detect_circular_imports.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_edge_cases_integration.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_edge_cases_systematic.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_exceptions_module.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_forward_references.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_http_transport.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_import_resolution.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_ir.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_ir_schema.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_loader.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_loader_extensive.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_loader_invalid_refs.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_loader_malformed.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_loader_media_types.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_pagination.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_parsing_context.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_protocol_defaults.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_schema_parser_specific_case.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_schemas.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_simple_self_ref_check.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_streaming_helpers.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_telemetry.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_telemetry_client.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_utils.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/test_warning_collector.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/writers/test_code_writer.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/writers/test_documentation_writer.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/writers/test_line_writer.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/writers/test_python_construct_renderer_json_wizard.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/core/writers/writers_analysis.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/emitters/emitters_analysis.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/emitters/test_client_emitter.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/emitters/test_docs_emitter.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/emitters/test_duplicate_operations.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/emitters/test_endpoints_emitter.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/emitters/test_exceptions_emitter.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/emitters/test_list_response_generation.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/emitters/test_models_emitter.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/end_to_end/test_dataclass_serialization_e2e.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/examples/test_developer_experience_demo.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/generation/generation_analysis.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/generation/test_external_core_package.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/generation_issues/specs/minimal_addmessage_like.json +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/generation_issues/test_addmessage_like_issues.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/generation_issues/test_message_batch_response_issue.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/helpers/helpers_analysis.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/helpers/test_array_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/helpers/test_endpoint_utils.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/helpers/test_endpoint_utils_extended.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/helpers/test_get_endpoint_return_types.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/helpers/test_named_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/helpers/test_named_type_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/helpers/test_object_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/helpers/test_put_endpoint_return_types.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/helpers/test_type_cleaner.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/helpers/test_type_helper.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/helpers/test_url_utils.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/helpers/test_utils_helpers.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/integration/test_generated_code_structure.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/integrations/integrations_analysis.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/integrations/test_business_swagger_message_type.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/integrations/test_end_to_end_petstore.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/integrations/test_name_collisions.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/specs/response_unwrapping_spec.yaml +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/test_analysis_overview.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/test_init.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/types/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/types/test_business_swagger_integration.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/types/test_contracts_types.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/types/test_reference_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/types/test_response_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/types/test_response_strategy.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/types/test_response_strategy_simplified.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/types/test_schema_resolver.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/types/test_schema_resolver_enums.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/types/test_type_service.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/generators/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/generators/generators_analysis.md +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/generators/test_dataclass_integration.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/generators/test_docstring_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/generators/test_endpoint_method_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/generators/test_match_case_response.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/generators/test_request_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/generators/test_response_handler_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/generators/test_response_handler_generator_strategy.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/generators/test_signature_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/generators/test_url_args_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/processors/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/processors/test_import_analyzer.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/processors/test_import_analyzer.py.bak +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/processors/test_parameter_processor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/endpoint/test_endpoint_visitor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/model/__init__.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/model/test_alias_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/model/test_dataclass_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/model/test_dataclass_generator_json_wizard.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/model/test_enum_generator.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/test_client_visitor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/test_model_visitor.py +0 -0
- {pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/visit/test_visitor.py +0 -0
@@ -1,6 +1,38 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
3
|
|
4
|
+
## v0.12.1 (2025-09-07)
|
5
|
+
|
6
|
+
### Bug Fixes
|
7
|
+
|
8
|
+
- **parser**: Register inline enum array parameters in parsed_schemas
|
9
|
+
([`b1629e2`](https://github.com/mindhiveoy/pyopenapi_gen/commit/b1629e27cce4773e9bec1bb3ac92eeb858a4fa38))
|
10
|
+
|
11
|
+
Critical fix for inline enum array parameters not generating importable model files.
|
12
|
+
|
13
|
+
Root cause: - Inline enum schemas in array parameters were created but never registered - Missing
|
14
|
+
final_module_stem attribute prevented proper import generation - Generated clients failed with
|
15
|
+
NameError when importing enum types
|
16
|
+
|
17
|
+
Solution: - Register inline enum schemas in context.parsed_schemas - Set final_module_stem for
|
18
|
+
proper import path generation - Add comprehensive test coverage for inline enum parameters
|
19
|
+
|
20
|
+
Impact: - All inline enum array parameters now generate proper model files - Generated clients can
|
21
|
+
be imported without NameError - Fixes business_swagger.json generation issues
|
22
|
+
|
23
|
+
🤖 Generated with [Claude Code](https://claude.ai/code)
|
24
|
+
|
25
|
+
Co-Authored-By: Claude <noreply@anthropic.com>
|
26
|
+
|
27
|
+
### Code Style
|
28
|
+
|
29
|
+
- Apply Black formatting and fix linting issues
|
30
|
+
([`1252f3b`](https://github.com/mindhiveoy/pyopenapi_gen/commit/1252f3bfa37568ba9743f283b6cceb3b52a54a1d))
|
31
|
+
|
32
|
+
- Apply Black formatting to maintain code style consistency - Remove unused imports flagged by Ruff
|
33
|
+
- All quality checks passing except low-severity security issues
|
34
|
+
|
35
|
+
|
4
36
|
## v0.12.0 (2025-09-07)
|
5
37
|
|
6
38
|
### Bug Fixes
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: pyopenapi-gen
|
3
|
-
Version: 0.12.
|
3
|
+
Version: 0.12.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.6" timestamp="
|
2
|
+
<coverage version="7.10.6" timestamp="1757263383216" lines-valid="6100" lines-covered="5458" line-rate="0.8948" branches-covered="0" branches-valid="0" branch-rate="0" complexity="0">
|
3
3
|
<!-- Generated by coverage.py: https://coverage.readthedocs.io/en/7.10.6 -->
|
4
4
|
<!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd -->
|
5
5
|
<sources>
|
@@ -1492,7 +1492,7 @@
|
|
1492
1492
|
</class>
|
1493
1493
|
</classes>
|
1494
1494
|
</package>
|
1495
|
-
<package name="pyopenapi_gen.core.loader.parameters" line-rate="0.
|
1495
|
+
<package name="pyopenapi_gen.core.loader.parameters" line-rate="0.7949" branch-rate="0" complexity="0">
|
1496
1496
|
<classes>
|
1497
1497
|
<class name="__init__.py" filename="pyopenapi_gen/core/loader/parameters/__init__.py" complexity="0" line-rate="1" branch-rate="0">
|
1498
1498
|
<methods/>
|
@@ -1502,7 +1502,7 @@
|
|
1502
1502
|
<line number="10" hits="1"/>
|
1503
1503
|
</lines>
|
1504
1504
|
</class>
|
1505
|
-
<class name="parser.py" filename="pyopenapi_gen/core/loader/parameters/parser.py" complexity="0" line-rate="0.
|
1505
|
+
<class name="parser.py" filename="pyopenapi_gen/core/loader/parameters/parser.py" complexity="0" line-rate="0.7867" branch-rate="0">
|
1506
1506
|
<methods/>
|
1507
1507
|
<lines>
|
1508
1508
|
<line number="6" hits="1"/>
|
@@ -1566,17 +1566,20 @@
|
|
1566
1566
|
<line number="130" hits="0"/>
|
1567
1567
|
<line number="132" hits="1"/>
|
1568
1568
|
<line number="133" hits="1"/>
|
1569
|
-
<line number="
|
1570
|
-
<line number="
|
1571
|
-
<line number="
|
1572
|
-
<line number="
|
1573
|
-
<line number="
|
1574
|
-
<line number="
|
1569
|
+
<line number="142" hits="1"/>
|
1570
|
+
<line number="143" hits="1"/>
|
1571
|
+
<line number="144" hits="1"/>
|
1572
|
+
<line number="148" hits="1"/>
|
1573
|
+
<line number="153" hits="0"/>
|
1574
|
+
<line number="154" hits="0"/>
|
1575
|
+
<line number="159" hits="1"/>
|
1576
|
+
<line number="166" hits="1"/>
|
1575
1577
|
<line number="172" hits="1"/>
|
1576
|
-
<line number="
|
1577
|
-
<line number="
|
1578
|
-
<line number="
|
1579
|
-
<line number="
|
1578
|
+
<line number="181" hits="1"/>
|
1579
|
+
<line number="182" hits="0"/>
|
1580
|
+
<line number="183" hits="1"/>
|
1581
|
+
<line number="184" hits="0"/>
|
1582
|
+
<line number="186" hits="1"/>
|
1580
1583
|
</lines>
|
1581
1584
|
</class>
|
1582
1585
|
</classes>
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "pyopenapi-gen"
|
7
|
-
version = "0.12.
|
7
|
+
version = "0.12.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.12.
|
143
|
+
version = "0.12.1"
|
144
144
|
version_files = [
|
145
145
|
"pyproject.toml:version",
|
146
146
|
"src/pyopenapi_gen/__init__.py:__version__"
|
{pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/parameters/parser.py
RENAMED
@@ -135,7 +135,16 @@ def parse_parameter(
|
|
135
135
|
type="string",
|
136
136
|
enum=sch["items"]["enum"],
|
137
137
|
generation_name=enum_name, # Mark it as promoted
|
138
|
+
final_module_stem=NameSanitizer.sanitize_module_name(enum_name), # Set module stem for imports
|
138
139
|
)
|
140
|
+
|
141
|
+
# Register this inline enum schema so it gets generated as a model file
|
142
|
+
if isinstance(context, ParsingContext) and enum_name not in context.parsed_schemas:
|
143
|
+
context.parsed_schemas[enum_name] = items_schema
|
144
|
+
logger.debug(
|
145
|
+
f"Registered enum schema '{enum_name}' for array parameter '{param_name}' with values {sch['items']['enum'][:3]}..."
|
146
|
+
)
|
147
|
+
|
139
148
|
logger.debug(
|
140
149
|
f"Created enum schema '{enum_name}' for array parameter '{param_name}' with values {sch['items']['enum'][:3]}..."
|
141
150
|
)
|
@@ -0,0 +1,206 @@
|
|
1
|
+
"""
|
2
|
+
Test that inline enum arrays in parameters are properly generated and importable.
|
3
|
+
|
4
|
+
This test ensures that when parameters have inline enum arrays (like include parameters),
|
5
|
+
the enum types are:
|
6
|
+
1. Created with proper names
|
7
|
+
2. Registered in the schema collection
|
8
|
+
3. Generated as model files
|
9
|
+
4. Properly imported in endpoint files
|
10
|
+
"""
|
11
|
+
|
12
|
+
import tempfile
|
13
|
+
from pathlib import Path
|
14
|
+
|
15
|
+
from pyopenapi_gen.generator.client_generator import ClientGenerator
|
16
|
+
|
17
|
+
|
18
|
+
def test_inline_enum_array_parameter_generation():
|
19
|
+
"""
|
20
|
+
Scenario:
|
21
|
+
Generate a client from a spec with inline enum array parameters.
|
22
|
+
|
23
|
+
Expected Outcome:
|
24
|
+
- Inline enum types should be generated as model files
|
25
|
+
- Endpoint files should import these enum types
|
26
|
+
- The generated client should be importable without errors
|
27
|
+
"""
|
28
|
+
# Create a minimal OpenAPI spec with inline enum array parameter
|
29
|
+
spec = {
|
30
|
+
"openapi": "3.0.0",
|
31
|
+
"info": {"title": "Test API", "version": "1.0.0"},
|
32
|
+
"paths": {
|
33
|
+
"/agents/{agentId}": {
|
34
|
+
"get": {
|
35
|
+
"operationId": "getAgent",
|
36
|
+
"parameters": [
|
37
|
+
{"name": "agentId", "in": "path", "required": True, "schema": {"type": "string"}},
|
38
|
+
{
|
39
|
+
"name": "include",
|
40
|
+
"in": "query",
|
41
|
+
"required": False,
|
42
|
+
"schema": {
|
43
|
+
"type": "array",
|
44
|
+
"items": {
|
45
|
+
"type": "string",
|
46
|
+
"enum": ["tenant", "settings", "credentials", "datasources"],
|
47
|
+
},
|
48
|
+
},
|
49
|
+
},
|
50
|
+
],
|
51
|
+
"responses": {
|
52
|
+
"200": {
|
53
|
+
"description": "Success",
|
54
|
+
"content": {
|
55
|
+
"application/json": {
|
56
|
+
"schema": {
|
57
|
+
"type": "object",
|
58
|
+
"properties": {"id": {"type": "string"}, "name": {"type": "string"}},
|
59
|
+
}
|
60
|
+
}
|
61
|
+
},
|
62
|
+
}
|
63
|
+
},
|
64
|
+
}
|
65
|
+
}
|
66
|
+
},
|
67
|
+
}
|
68
|
+
|
69
|
+
with tempfile.TemporaryDirectory() as tmpdir:
|
70
|
+
temp_path = Path(tmpdir)
|
71
|
+
spec_file = temp_path / "spec.json"
|
72
|
+
|
73
|
+
# Write spec to file
|
74
|
+
import json
|
75
|
+
|
76
|
+
spec_file.write_text(json.dumps(spec))
|
77
|
+
|
78
|
+
# Generate client
|
79
|
+
generator = ClientGenerator(verbose=False)
|
80
|
+
generator.generate(
|
81
|
+
spec_path=str(spec_file),
|
82
|
+
project_root=temp_path,
|
83
|
+
output_package="test_client",
|
84
|
+
force=True,
|
85
|
+
no_postprocess=True,
|
86
|
+
)
|
87
|
+
|
88
|
+
# Check that the enum type was generated as a model file
|
89
|
+
enum_file = temp_path / "test_client" / "models" / "get_agent_param_include_item.py"
|
90
|
+
assert enum_file.exists(), f"Enum file should be generated at {enum_file}"
|
91
|
+
|
92
|
+
# Check the enum file contents
|
93
|
+
enum_content = enum_file.read_text()
|
94
|
+
assert "class GetAgentParamIncludeItem" in enum_content, "Enum class should be defined"
|
95
|
+
assert "tenant" in enum_content, "Enum should contain 'tenant' value"
|
96
|
+
assert "settings" in enum_content, "Enum should contain 'settings' value"
|
97
|
+
|
98
|
+
# Check that the endpoint file imports the enum
|
99
|
+
endpoint_file = temp_path / "test_client" / "endpoints" / "default.py"
|
100
|
+
assert endpoint_file.exists(), "Endpoint file should be generated"
|
101
|
+
|
102
|
+
endpoint_content = endpoint_file.read_text()
|
103
|
+
assert (
|
104
|
+
"from ..models.get_agent_param_include_item import GetAgentParamIncludeItem" in endpoint_content
|
105
|
+
), "Endpoint should import the enum type"
|
106
|
+
assert (
|
107
|
+
"include: Optional[List[GetAgentParamIncludeItem]]" in endpoint_content
|
108
|
+
), "Parameter should be typed with the enum"
|
109
|
+
|
110
|
+
# Try to import the generated client
|
111
|
+
import sys
|
112
|
+
|
113
|
+
sys.path.insert(0, str(temp_path))
|
114
|
+
|
115
|
+
try:
|
116
|
+
# This should not raise any NameError
|
117
|
+
from test_client import APIClient
|
118
|
+
|
119
|
+
# Create a client instance
|
120
|
+
client = APIClient(base_url="https://api.example.com")
|
121
|
+
|
122
|
+
# Check that the endpoint exists and is callable
|
123
|
+
assert hasattr(client, "default"), "Client should have default endpoint"
|
124
|
+
|
125
|
+
print("✅ Client imported successfully without NameError!")
|
126
|
+
|
127
|
+
except NameError as e:
|
128
|
+
assert False, f"Client import failed with NameError: {e}"
|
129
|
+
except ImportError as e:
|
130
|
+
# Handle other import errors gracefully for testing
|
131
|
+
print(f"Import error (expected in test environment): {e}")
|
132
|
+
finally:
|
133
|
+
# Clean up sys.path
|
134
|
+
sys.path.remove(str(temp_path))
|
135
|
+
|
136
|
+
|
137
|
+
def test_business_swagger_inline_enum_parameters():
|
138
|
+
"""
|
139
|
+
Scenario:
|
140
|
+
Test with the actual business_swagger.json that has many inline enum array parameters.
|
141
|
+
|
142
|
+
Expected Outcome:
|
143
|
+
- All inline enum types should be generated
|
144
|
+
- Client should be importable
|
145
|
+
"""
|
146
|
+
spec_path = Path(__file__).parent.parent.parent.parent.parent / "input" / "business_swagger.json"
|
147
|
+
|
148
|
+
if not spec_path.exists():
|
149
|
+
print(f"Skipping business_swagger test - file not found at {spec_path}")
|
150
|
+
return
|
151
|
+
|
152
|
+
with tempfile.TemporaryDirectory() as tmpdir:
|
153
|
+
temp_path = Path(tmpdir)
|
154
|
+
|
155
|
+
# Generate client
|
156
|
+
generator = ClientGenerator(verbose=False)
|
157
|
+
generator.generate(
|
158
|
+
spec_path=str(spec_path),
|
159
|
+
project_root=temp_path,
|
160
|
+
output_package="business_client",
|
161
|
+
force=True,
|
162
|
+
no_postprocess=True,
|
163
|
+
)
|
164
|
+
|
165
|
+
# Check that include enum types were generated
|
166
|
+
models_dir = temp_path / "business_client" / "models"
|
167
|
+
|
168
|
+
# Look for any include-related enum files
|
169
|
+
include_enums = list(models_dir.glob("*include*.py"))
|
170
|
+
assert len(include_enums) > 0, "Should generate include enum types"
|
171
|
+
|
172
|
+
print(f"✅ Generated {len(include_enums)} include enum files")
|
173
|
+
|
174
|
+
# Check a specific one we know should exist
|
175
|
+
agent_include_enum = models_dir / "get_agent_param_include_item.py"
|
176
|
+
if agent_include_enum.exists():
|
177
|
+
content = agent_include_enum.read_text()
|
178
|
+
assert "class GetAgentParamIncludeItem" in content
|
179
|
+
print("✅ GetAgentParamIncludeItem enum generated correctly")
|
180
|
+
|
181
|
+
# Try to import the client
|
182
|
+
import sys
|
183
|
+
|
184
|
+
sys.path.insert(0, str(temp_path))
|
185
|
+
|
186
|
+
try:
|
187
|
+
|
188
|
+
print("✅ AgentsClient imported successfully!")
|
189
|
+
|
190
|
+
# This should work without NameError
|
191
|
+
from business_client import APIClient
|
192
|
+
|
193
|
+
client = APIClient(base_url="https://api.example.com")
|
194
|
+
print("✅ Full client imported successfully!")
|
195
|
+
|
196
|
+
except NameError as e:
|
197
|
+
assert False, f"Import failed with NameError (the bug we're fixing): {e}"
|
198
|
+
except Exception as e:
|
199
|
+
print(f"Other error (may be expected): {e}")
|
200
|
+
finally:
|
201
|
+
sys.path.remove(str(temp_path))
|
202
|
+
|
203
|
+
|
204
|
+
if __name__ == "__main__":
|
205
|
+
test_inline_enum_array_parameter_generation()
|
206
|
+
test_business_swagger_inline_enum_parameters()
|
@@ -13,8 +13,6 @@ import tempfile
|
|
13
13
|
import unittest
|
14
14
|
from pathlib import Path
|
15
15
|
|
16
|
-
import pytest
|
17
|
-
|
18
16
|
# Add the src directory to path for imports
|
19
17
|
sys.path.insert(0, str(Path(__file__).parent.parent.parent / "src"))
|
20
18
|
|
@@ -34,9 +32,6 @@ class TestAgentIncludeParameterTyping(unittest.TestCase):
|
|
34
32
|
if self.temp_dir.exists():
|
35
33
|
shutil.rmtree(self.temp_dir)
|
36
34
|
|
37
|
-
@pytest.mark.skip(
|
38
|
-
reason="Known issue: inline enum arrays in parameters not fully resolved - these schemas lack final_module_stem"
|
39
|
-
)
|
40
35
|
def test_get_agent_include_parameter_typing(self) -> None:
|
41
36
|
"""Test that get_agent method has correct typing for include parameter."""
|
42
37
|
# Generate the client
|
@@ -83,10 +78,14 @@ class TestAgentIncludeParameterTyping(unittest.TestCase):
|
|
83
78
|
)
|
84
79
|
|
85
80
|
# Verify that the enum type is properly imported
|
81
|
+
# Convert enum type name to snake_case for import check
|
82
|
+
import re
|
83
|
+
|
84
|
+
snake_case_name = re.sub(r"(?<!^)(?=[A-Z])", "_", enum_type_name).lower()
|
86
85
|
self.assertIn(
|
87
|
-
f"from ..models.{
|
86
|
+
f"from ..models.{snake_case_name} import",
|
88
87
|
agents_code.lower(),
|
89
|
-
f"Enum type {enum_type_name} should be imported",
|
88
|
+
f"Enum type {enum_type_name} should be imported from models.{snake_case_name}",
|
90
89
|
)
|
91
90
|
|
92
91
|
def test_agent_include_parameter_values_from_spec(self) -> None:
|
{pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/tests/integrations/test_end_to_end_business_swagger.py
RENAMED
@@ -3,7 +3,6 @@ import os
|
|
3
3
|
import subprocess
|
4
4
|
from pathlib import Path
|
5
5
|
|
6
|
-
import pytest
|
7
6
|
import yaml
|
8
7
|
|
9
8
|
from pyopenapi_gen.context.render_context import RenderContext
|
@@ -15,7 +14,6 @@ from pyopenapi_gen.emitters.exceptions_emitter import ExceptionsEmitter
|
|
15
14
|
from pyopenapi_gen.emitters.models_emitter import ModelsEmitter
|
16
15
|
|
17
16
|
|
18
|
-
@pytest.mark.skip(reason="Known issue: inline enum arrays in parameters not being generated/imported correctly")
|
19
17
|
def test_business_swagger_generation(tmp_path: Path) -> None:
|
20
18
|
"""
|
21
19
|
Scenario:
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/.github/workflows/production-release.yml.backup
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/operations/__init__.py
RENAMED
File without changes
|
{pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/operations/parser.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/parameters/__init__.py
RENAMED
File without changes
|
{pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/responses/__init__.py
RENAMED
File without changes
|
{pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/responses/parser.py
RENAMED
File without changes
|
{pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/schemas/__init__.py
RENAMED
File without changes
|
{pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/loader/schemas/extractor.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/common/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/common/type_parser.py
RENAMED
File without changes
|
File without changes
|
{pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/cycle_helpers.py
RENAMED
File without changes
|
{pyopenapi_gen-0.12.0 → pyopenapi_gen-0.12.1}/src/pyopenapi_gen/core/parsing/keywords/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|