pyopenapi-gen 0.8.5__tar.gz → 0.8.7__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.8.7/.github/CLAUDE_CONFIGURATION.md +88 -0
- pyopenapi_gen-0.8.7/.github/workflows/claude-auto-approve.yml +114 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.github/workflows/claude-review-trigger.yml +9 -6
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.github/workflows/claude.yml +7 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.github/workflows/pr-checks.yml +1 -1
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/PKG-INFO +2 -2
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/poetry.lock +1 -1
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/pyproject.toml +2 -2
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/utils.py +8 -3
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.bandit +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.cursor/mcp.json +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.cursor/rules/architecture.mdc +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.cursor/rules/coding-conventions.mdc +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.cursor/rules/project-goal.mdc +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.cursor/rules/testing.mdc +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.github/BRANCH_PROTECTION.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.github/CODEOWNERS +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.github/dependabot.yml +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.github/workflows/ci.yml +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.github/workflows/main-checks.yml +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.github/workflows/production-release.yml +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.github/workflows/promote-to-staging.yml +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.github/workflows/pypi-publish.yml +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.github/workflows/staging-publish.yml +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.github/workflows/testpypi-publish.yml +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.gitignore +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/.vscode/settings.json +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/CHANGELOG.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/CLAUDE.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/CONTRIBUTING.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/LICENSE +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/Makefile +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/README.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/RELEASE_NOTES_v0.8.5.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/RESPONSE_RESOLUTION_REFACTOR.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/TEST_MAP.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/debug_after_fix.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/debug_data_schema_names.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/debug_list_issue.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/debug_signature_issue.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/debug_strategy_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/docs/README.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/docs/architecture.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/docs/endpoint_visitor.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/docs/helpers.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/docs/ir_models.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/docs/line_writer.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/docs/loader.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/docs/model_visitor.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/docs/render_context.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/docs/unified_type_resolution.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/input/business_swagger.json +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/input/minimal_swagger.json +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/input/minimal_syntax_test.json +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/input/test_name_collision_spec.json +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/mkdocs.yml +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/__main__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/cli.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/context/file_manager.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/context/import_collector.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/context/render_context.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/auth/base.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/auth/plugins.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/exceptions.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/http_transport.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/loader.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/operations/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/operations/parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/operations/post_processor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/operations/request_body.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/parameters/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/parameters/parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/responses/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/responses/parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/schemas/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/schemas/extractor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/pagination.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/common/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/common/ref_resolution/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/cyclic_properties.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/direct_cycle.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/existing_schema.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/list_response.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/missing_ref.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/new_schema.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/common/ref_resolution/helpers/stripped_suffix.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/common/ref_resolution/resolve_schema_ref.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/common/type_parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/context.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/cycle_helpers.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/keywords/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/keywords/all_of_parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/keywords/any_of_parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/keywords/array_items_parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/keywords/one_of_parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/keywords/properties_parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/schema_finalizer.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/schema_parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/transformers/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/transformers/inline_enum_extractor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/transformers/inline_object_promoter.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/unified_cycle_detection.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/postprocess_manager.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/schemas.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/streaming_helpers.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/telemetry.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/warning_collector.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/writers/code_writer.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/writers/documentation_writer.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/writers/line_writer.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/writers/python_construct_renderer.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core_package_template/README.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/emit/models_emitter.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/emitters/client_emitter.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/emitters/core_emitter.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/emitters/docs_emitter.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/emitters/endpoints_emitter.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/emitters/exceptions_emitter.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/emitters/models_emitter.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/generator/client_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/helpers/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/helpers/endpoint_utils.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/helpers/type_cleaner.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/helpers/type_helper.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/helpers/type_resolution/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/helpers/type_resolution/array_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/helpers/type_resolution/composition_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/helpers/type_resolution/finalizer.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/helpers/type_resolution/named_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/helpers/type_resolution/object_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/helpers/type_resolution/primitive_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/helpers/type_resolution/resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/helpers/url_utils.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/http_types.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/ir.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/py.typed +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/types/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/types/contracts/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/types/contracts/protocols.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/types/contracts/types.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/types/resolvers/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/types/resolvers/reference_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/types/resolvers/response_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/types/resolvers/schema_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/types/services/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/types/services/type_service.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/types/strategies/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/types/strategies/response_strategy.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/client_visitor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/docs_visitor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/endpoint/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/endpoint/endpoint_visitor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/endpoint/generators/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/endpoint/generators/docstring_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/endpoint/generators/endpoint_method_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/endpoint/generators/request_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/endpoint/generators/response_handler_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/endpoint/generators/signature_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/endpoint/generators/url_args_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/endpoint/processors/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/endpoint/processors/import_analyzer.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/endpoint/processors/parameter_processor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/exception_visitor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/model/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/model/alias_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/model/dataclass_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/model/enum_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/model/model_visitor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/visit/visitor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/auth/auth_analysis.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/auth/test_auth_base.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/auth/test_auth_plugins.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/cli/cli_analysis.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/cli/test_cli_backup_diff.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/cli/test_cli_edge_cases.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/cli/test_cli_edge_cases_comprehensive.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/cli/test_cli_internal_utils.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/cli/test_http_pagination_cli.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/context/context_analysis.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/context/test_file_manager.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/context/test_import_collector.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/context/test_render_context.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/context/test_render_context_imports.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/context/test_render_context_relative_paths.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/core_analysis.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/loader/test_extractor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/common/ref_resolution/helpers/helpers_analysis.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/common/ref_resolution/helpers/test_cyclic_properties.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/common/ref_resolution/helpers/test_direct_cycle.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/common/ref_resolution/helpers/test_existing_schema.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/common/ref_resolution/helpers/test_list_response.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/common/ref_resolution/helpers/test_missing_ref.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/common/ref_resolution/helpers/test_new_schema.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/common/ref_resolution/helpers/test_stripped_suffix.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/keywords/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/keywords/keywords_analysis.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/keywords/test_all_of_parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/keywords/test_any_of_parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/keywords/test_array_items_parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/keywords/test_one_of_parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/keywords/test_properties_parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/parsing_analysis.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/test_context.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/test_cycle_detection.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/test_cycle_helpers.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/test_improved_schema_naming.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/test_inline_enum_extractor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/test_inline_object_promoter.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/test_logging.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/test_ref_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/test_schema_finalizer.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/test_schema_parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/test_schema_parser_list_response.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/parsing/test_type_parser.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_dataclass_serialization.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_detect_circular_imports.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_edge_cases_integration.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_edge_cases_systematic.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_exceptions_module.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_forward_references.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_http_transport.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_import_resolution.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_ir.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_ir_schema.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_loader.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_loader_extensive.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_loader_invalid_refs.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_loader_malformed.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_loader_media_types.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_pagination.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_parsing_context.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_protocol_defaults.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_schema_parser_specific_case.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_schemas.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_simple_self_ref_check.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_streaming_helpers.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_telemetry.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_telemetry_client.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_utils.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/test_warning_collector.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/writers/test_code_writer.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/writers/test_documentation_writer.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/writers/test_line_writer.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/writers/test_python_construct_renderer_json_wizard.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/core/writers/writers_analysis.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/emitters/emitters_analysis.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/emitters/test_client_emitter.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/emitters/test_docs_emitter.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/emitters/test_duplicate_operations.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/emitters/test_endpoints_emitter.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/emitters/test_exceptions_emitter.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/emitters/test_list_response_generation.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/emitters/test_models_emitter.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/end_to_end/test_dataclass_serialization_e2e.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/examples/test_developer_experience_demo.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/generation/generation_analysis.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/generation/test_external_core_package.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/generation_issues/specs/minimal_addmessage_like.json +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/generation_issues/test_addmessage_like_issues.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/generation_issues/test_agent_include_parameter_typing.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/generation_issues/test_message_batch_response_issue.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/helpers/helpers_analysis.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/helpers/test_array_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/helpers/test_endpoint_utils.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/helpers/test_endpoint_utils_extended.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/helpers/test_get_endpoint_return_types.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/helpers/test_named_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/helpers/test_named_type_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/helpers/test_object_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/helpers/test_put_endpoint_return_types.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/helpers/test_type_cleaner.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/helpers/test_type_helper.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/helpers/test_url_utils.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/helpers/test_utils_helpers.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/integration/test_generated_code_structure.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/integrations/integrations_analysis.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/integrations/test_business_swagger_message_type.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/integrations/test_end_to_end_business_swagger.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/integrations/test_end_to_end_petstore.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/integrations/test_name_collisions.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/specs/response_unwrapping_spec.yaml +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/test_analysis_overview.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/test_init.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/types/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/types/test_business_swagger_integration.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/types/test_contracts_types.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/types/test_reference_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/types/test_response_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/types/test_response_strategy.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/types/test_response_strategy_simplified.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/types/test_schema_resolver.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/types/test_type_service.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/generators/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/generators/generators_analysis.md +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/generators/test_dataclass_integration.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/generators/test_docstring_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/generators/test_endpoint_method_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/generators/test_match_case_response.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/generators/test_request_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/generators/test_response_handler_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/generators/test_response_handler_generator_strategy.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/generators/test_signature_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/generators/test_url_args_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/processors/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/processors/test_import_analyzer.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/processors/test_import_analyzer.py.bak +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/processors/test_parameter_processor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/endpoint/test_endpoint_visitor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/model/__init__.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/model/test_alias_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/model/test_dataclass_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/model/test_dataclass_generator_json_wizard.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/model/test_enum_generator.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/test_client_visitor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/test_model_visitor.py +0 -0
- {pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/tests/visit/test_visitor.py +0 -0
@@ -0,0 +1,88 @@
|
|
1
|
+
# Claude GitHub App Configuration
|
2
|
+
|
3
|
+
This document explains the Claude GitHub App configuration for automatic PR reviews and approvals.
|
4
|
+
|
5
|
+
## Configuration Files
|
6
|
+
|
7
|
+
### 1. `claude.yml` - Main Claude Workflow
|
8
|
+
- **Triggers**: @claude mentions in comments, PR events
|
9
|
+
- **Permissions**: Full write access to contents, PRs, issues
|
10
|
+
- **Features**:
|
11
|
+
- Automatic formal PR reviews (`create_review: true`)
|
12
|
+
- Auto-approval capability (`auto_approve: true`)
|
13
|
+
- Extended tool access for PR management
|
14
|
+
|
15
|
+
### 2. `claude-review-trigger.yml` - Automatic Review Notifications
|
16
|
+
- **Triggers**: PRs opened/updated on develop, staging, main
|
17
|
+
- **Scope**:
|
18
|
+
- All PRs targeting protected branches
|
19
|
+
- Dependabot PRs
|
20
|
+
- Release/fix/chore PRs from devops-mindhive
|
21
|
+
- PRs with `[claude-review]` tag
|
22
|
+
- **Action**: Posts @claude mention to trigger review
|
23
|
+
|
24
|
+
### 3. `claude-auto-approve.yml` - Formal Approval Workflow
|
25
|
+
- **Triggers**: Claude review submissions with APPROVE/APPROVED
|
26
|
+
- **Features**:
|
27
|
+
- Creates formal GitHub PR approvals
|
28
|
+
- Auto-merge capability for qualifying PRs
|
29
|
+
- Safety checks for merge readiness
|
30
|
+
|
31
|
+
## Required Repository Setup
|
32
|
+
|
33
|
+
### Secrets
|
34
|
+
- ✅ `ANTHROPIC_API_KEY` - Configured in repository secrets
|
35
|
+
|
36
|
+
### Permissions
|
37
|
+
The Claude GitHub App has these permissions:
|
38
|
+
- ✅ `contents: write` - Modify files and commit changes
|
39
|
+
- ✅ `pull-requests: write` - Review, approve, and merge PRs
|
40
|
+
- ✅ `issues: write` - Create and manage issues
|
41
|
+
- ✅ `actions: read` - Monitor CI/CD status
|
42
|
+
- ✅ `checks: read` - Review test results
|
43
|
+
- ✅ `statuses: read` - Check status checks
|
44
|
+
|
45
|
+
## How It Works
|
46
|
+
|
47
|
+
### Automatic Workflow
|
48
|
+
1. **PR Created** → `claude-review-trigger.yml` posts @claude mention
|
49
|
+
2. **Claude Triggered** → `claude.yml` runs comprehensive review
|
50
|
+
3. **Review Complete** → Claude provides formal GitHub approval
|
51
|
+
4. **Auto-Merge** → `claude-auto-approve.yml` merges if all checks pass
|
52
|
+
|
53
|
+
### Manual Workflow
|
54
|
+
1. **Comment @claude** on any PR or issue
|
55
|
+
2. **Claude Responds** with review, fixes, or approvals as needed
|
56
|
+
3. **Formal Actions** taken based on Claude's assessment
|
57
|
+
|
58
|
+
## Branch Protection Compatibility
|
59
|
+
|
60
|
+
The configuration works with branch protection rules requiring:
|
61
|
+
- ✅ **Status Checks**: All CI must pass
|
62
|
+
- ✅ **Required Reviews**: Claude provides formal GitHub approvals
|
63
|
+
- ✅ **Up-to-date Branch**: Auto-handled by merge process
|
64
|
+
|
65
|
+
## Troubleshooting
|
66
|
+
|
67
|
+
### Claude Not Responding to @mentions
|
68
|
+
- Check `claude.yml` workflow is enabled
|
69
|
+
- Verify triggers include your PR's target branch
|
70
|
+
- Ensure ANTHROPIC_API_KEY secret is valid
|
71
|
+
|
72
|
+
### Reviews Not Counting as Approvals
|
73
|
+
- Confirm `create_review: true` in claude.yml
|
74
|
+
- Check that `claude-auto-approve.yml` is processing Claude's reviews
|
75
|
+
- Verify branch protection accepts app reviews
|
76
|
+
|
77
|
+
### Auto-Merge Not Working
|
78
|
+
- Ensure all required status checks pass
|
79
|
+
- Check PR is marked as mergeable
|
80
|
+
- Verify `auto_approve: true` is enabled
|
81
|
+
|
82
|
+
## Testing
|
83
|
+
|
84
|
+
To test the configuration:
|
85
|
+
1. Create a test PR with `[claude-review]` tag
|
86
|
+
2. Comment `@claude please review this PR`
|
87
|
+
3. Verify Claude provides formal approval
|
88
|
+
4. Check if auto-merge occurs (if enabled)
|
@@ -0,0 +1,114 @@
|
|
1
|
+
name: Claude Auto-Approve
|
2
|
+
|
3
|
+
on:
|
4
|
+
pull_request_review:
|
5
|
+
types: [submitted]
|
6
|
+
issue_comment:
|
7
|
+
types: [created]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
auto-approve:
|
11
|
+
if: |
|
12
|
+
(github.event_name == 'pull_request_review' &&
|
13
|
+
github.event.review.user.login == 'claude[bot]' &&
|
14
|
+
contains(github.event.review.body, 'APPROVE')) ||
|
15
|
+
(github.event_name == 'issue_comment' &&
|
16
|
+
github.event.comment.user.login == 'claude[bot]' &&
|
17
|
+
contains(github.event.comment.body, 'APPROVED'))
|
18
|
+
runs-on: ubuntu-latest
|
19
|
+
permissions:
|
20
|
+
contents: write
|
21
|
+
pull-requests: write
|
22
|
+
actions: read
|
23
|
+
checks: read
|
24
|
+
statuses: read
|
25
|
+
|
26
|
+
steps:
|
27
|
+
- name: Checkout repository
|
28
|
+
uses: actions/checkout@v4
|
29
|
+
with:
|
30
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
31
|
+
|
32
|
+
- name: Get PR number
|
33
|
+
id: pr_number
|
34
|
+
run: |
|
35
|
+
if [[ "${{ github.event_name }}" == "pull_request_review" ]]; then
|
36
|
+
echo "pr_number=${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT
|
37
|
+
elif [[ "${{ github.event_name }}" == "issue_comment" ]]; then
|
38
|
+
echo "pr_number=${{ github.event.issue.number }}" >> $GITHUB_OUTPUT
|
39
|
+
fi
|
40
|
+
|
41
|
+
- name: Check if PR can be auto-approved
|
42
|
+
id: check_approval
|
43
|
+
run: |
|
44
|
+
pr_number="${{ steps.pr_number.outputs.pr_number }}"
|
45
|
+
|
46
|
+
# Get PR details
|
47
|
+
pr_data=$(gh pr view $pr_number --json author,title,baseRefName,mergeable,reviewDecision)
|
48
|
+
pr_author=$(echo "$pr_data" | jq -r '.author.login')
|
49
|
+
pr_title=$(echo "$pr_data" | jq -r '.title')
|
50
|
+
pr_base=$(echo "$pr_data" | jq -r '.baseRefName')
|
51
|
+
pr_mergeable=$(echo "$pr_data" | jq -r '.mergeable')
|
52
|
+
review_decision=$(echo "$pr_data" | jq -r '.reviewDecision')
|
53
|
+
|
54
|
+
echo "PR Author: $pr_author"
|
55
|
+
echo "PR Title: $pr_title"
|
56
|
+
echo "PR Base: $pr_base"
|
57
|
+
echo "PR Mergeable: $pr_mergeable"
|
58
|
+
echo "Review Decision: $review_decision"
|
59
|
+
|
60
|
+
# Check if this is an eligible PR for auto-approval
|
61
|
+
auto_approve=false
|
62
|
+
|
63
|
+
if [[ "$pr_author" == "devops-mindhive" ]] && \
|
64
|
+
[[ "$pr_title" =~ ^(fix|chore|release): ]] && \
|
65
|
+
[[ "$pr_mergeable" == "MERGEABLE" ]]; then
|
66
|
+
auto_approve=true
|
67
|
+
fi
|
68
|
+
|
69
|
+
echo "auto_approve=$auto_approve" >> $GITHUB_OUTPUT
|
70
|
+
env:
|
71
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
72
|
+
|
73
|
+
- name: Approve PR
|
74
|
+
if: steps.check_approval.outputs.auto_approve == 'true'
|
75
|
+
run: |
|
76
|
+
pr_number="${{ steps.pr_number.outputs.pr_number }}"
|
77
|
+
|
78
|
+
# Create formal approval review
|
79
|
+
gh pr review $pr_number --approve --body "✅ **Auto-approved by Claude**
|
80
|
+
|
81
|
+
This PR has been automatically approved based on:
|
82
|
+
- Comprehensive Claude review completed
|
83
|
+
- All CI checks passed
|
84
|
+
- Changes meet project quality standards
|
85
|
+
- No security or compatibility issues identified
|
86
|
+
|
87
|
+
Ready for merge after all required status checks pass."
|
88
|
+
env:
|
89
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
90
|
+
|
91
|
+
- name: Auto-merge if ready
|
92
|
+
if: steps.check_approval.outputs.auto_approve == 'true'
|
93
|
+
run: |
|
94
|
+
pr_number="${{ steps.pr_number.outputs.pr_number }}"
|
95
|
+
|
96
|
+
# Wait a moment for review to register
|
97
|
+
sleep 5
|
98
|
+
|
99
|
+
# Check if PR is ready to merge
|
100
|
+
pr_data=$(gh pr view $pr_number --json mergeable,reviewDecision,statusCheckRollup)
|
101
|
+
mergeable=$(echo "$pr_data" | jq -r '.mergeable')
|
102
|
+
review_decision=$(echo "$pr_data" | jq -r '.reviewDecision')
|
103
|
+
|
104
|
+
echo "Mergeable: $mergeable"
|
105
|
+
echo "Review Decision: $review_decision"
|
106
|
+
|
107
|
+
if [[ "$mergeable" == "MERGEABLE" ]] && [[ "$review_decision" == "APPROVED" ]]; then
|
108
|
+
echo "🚀 Auto-merging PR $pr_number"
|
109
|
+
gh pr merge $pr_number --squash --delete-branch
|
110
|
+
else
|
111
|
+
echo "⏳ PR not ready for auto-merge yet (waiting for status checks or additional approvals)"
|
112
|
+
fi
|
113
|
+
env:
|
114
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
@@ -31,7 +31,7 @@ jobs:
|
|
31
31
|
echo "PR Base Branch: $pr_base"
|
32
32
|
|
33
33
|
# PRs that should get Claude review:
|
34
|
-
# 1. ALL PRs targeting develop
|
34
|
+
# 1. ALL PRs targeting develop, staging, or main branches
|
35
35
|
# 2. Dependabot PRs (dependency updates)
|
36
36
|
# 3. Version bump PRs from devops-mindhive
|
37
37
|
# 4. Documentation PRs from devops-mindhive
|
@@ -40,8 +40,10 @@ jobs:
|
|
40
40
|
needs_review=false
|
41
41
|
|
42
42
|
if [[ "$pr_base" == "develop" ]] || \
|
43
|
+
[[ "$pr_base" == "staging" ]] || \
|
44
|
+
[[ "$pr_base" == "main" ]] || \
|
43
45
|
[[ "$pr_author" == "dependabot[bot]" ]] || \
|
44
|
-
[[ "$pr_author" == "devops-mindhive" && "$pr_title" =~ ^(release|chore|docs): ]] || \
|
46
|
+
[[ "$pr_author" == "devops-mindhive" && "$pr_title" =~ ^(release|chore|docs|fix): ]] || \
|
45
47
|
[[ "$pr_title" =~ \[claude-review\] ]]; then
|
46
48
|
needs_review=true
|
47
49
|
fi
|
@@ -57,12 +59,13 @@ jobs:
|
|
57
59
|
- name: Request Claude review
|
58
60
|
if: steps.needs_review.outputs.needs_review == 'true'
|
59
61
|
run: |
|
60
|
-
gh pr comment ${{ github.event.pull_request.number }} --body "@claude Please review this PR for code quality, security, and compatibility
|
62
|
+
gh pr comment ${{ github.event.pull_request.number }} --body "@claude Please review this PR for code quality, security, and compatibility:
|
61
63
|
|
62
|
-
|
64
|
+
**Review Actions Required:**
|
65
|
+
1. **For fixable issues** (formatting, linting, small bugs): Fix them directly by committing to this PR branch
|
63
66
|
2. **For larger issues**: Comment with specific feedback and create issues if needed
|
64
|
-
3. **If everything looks good**:
|
67
|
+
3. **If everything looks good**: Provide formal GitHub PR approval and auto-merge if all checks pass
|
65
68
|
|
66
|
-
You have full access to modify code, run tests, and
|
69
|
+
**Important**: Please use formal GitHub PR review approval, not just comments. You have full access to modify code, run tests, approve, and merge PRs that meet our quality standards."
|
67
70
|
env:
|
68
71
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
@@ -42,4 +42,11 @@ jobs:
|
|
42
42
|
uses: anthropics/claude-code-action@beta
|
43
43
|
with:
|
44
44
|
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
45
|
+
# Enable formal PR reviews instead of just comments
|
46
|
+
create_review: true
|
47
|
+
auto_approve: true
|
48
|
+
allowed_tools: |
|
49
|
+
mcp__github__create_pull_request
|
50
|
+
mcp__github__create_review
|
51
|
+
mcp__github__approve_pull_request
|
45
52
|
|
@@ -58,7 +58,7 @@ jobs:
|
|
58
58
|
poetry run pytest -n 2 --timeout=120 --cov=src --cov-report=term-missing --cov-report=xml --cov-fail-under=85
|
59
59
|
|
60
60
|
- name: Upload coverage to Codecov
|
61
|
-
uses: codecov/codecov-action@
|
61
|
+
uses: codecov/codecov-action@v5
|
62
62
|
with:
|
63
63
|
file: ./coverage.xml
|
64
64
|
flags: unittests
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: pyopenapi-gen
|
3
|
-
Version: 0.8.
|
3
|
+
Version: 0.8.7
|
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
|
@@ -32,7 +32,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
32
32
|
Classifier: Topic :: System :: Networking
|
33
33
|
Classifier: Typing :: Typed
|
34
34
|
Requires-Python: <4.0.0,>=3.12
|
35
|
-
Requires-Dist: click<
|
35
|
+
Requires-Dist: click<9.0.0,>=8.0.0
|
36
36
|
Requires-Dist: dataclass-wizard>=0.22.0
|
37
37
|
Requires-Dist: httpx>=0.24.0
|
38
38
|
Requires-Dist: openapi-core>=0.19
|
@@ -2234,4 +2234,4 @@ dev = ["bandit", "black", "dataclass-wizard", "httpx", "mypy", "pytest", "pytest
|
|
2234
2234
|
[metadata]
|
2235
2235
|
lock-version = "2.1"
|
2236
2236
|
python-versions = ">=3.12,<4.0.0"
|
2237
|
-
content-hash = "
|
2237
|
+
content-hash = "780c4a1d67c21fd93f5a7c820b77fd3a5f9f40fc1bfbe59147968685c509a82d"
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "pyopenapi-gen"
|
7
|
-
version = "0.8.
|
7
|
+
version = "0.8.7"
|
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" }]
|
@@ -15,7 +15,7 @@ dependencies = [
|
|
15
15
|
"openapi-core>=0.19",
|
16
16
|
"PyYAML>=6.0",
|
17
17
|
"typer>=0.12.0,<0.14.0",
|
18
|
-
"click>=8.0.0,<
|
18
|
+
"click>=8.0.0,<9.0.0",
|
19
19
|
"httpx>=0.24.0",
|
20
20
|
"dataclass-wizard>=0.22.0",
|
21
21
|
]
|
@@ -263,6 +263,10 @@ class Formatter:
|
|
263
263
|
"""Helper to format code using Black, falling back to unformatted content if Black is unavailable or errors."""
|
264
264
|
|
265
265
|
def __init__(self) -> None:
|
266
|
+
from typing import Any, Callable, Optional
|
267
|
+
|
268
|
+
self._file_mode: Optional[Any] = None
|
269
|
+
self._format_str: Optional[Callable[..., str]] = None
|
266
270
|
try:
|
267
271
|
from black import FileMode, format_str
|
268
272
|
|
@@ -278,14 +282,15 @@ class Formatter:
|
|
278
282
|
self._file_mode = FileMode()
|
279
283
|
self._format_str = format_str
|
280
284
|
except ImportError:
|
281
|
-
self._file_mode = None
|
282
|
-
self._format_str = None
|
285
|
+
self._file_mode = None
|
286
|
+
self._format_str = None
|
283
287
|
|
284
288
|
def format(self, code: str) -> str:
|
285
289
|
"""Format the given code string with Black if possible."""
|
286
290
|
if self._format_str is not None and self._file_mode is not None:
|
287
291
|
try:
|
288
|
-
|
292
|
+
formatted: str = self._format_str(code, mode=self._file_mode)
|
293
|
+
return formatted
|
289
294
|
except Exception:
|
290
295
|
# On any Black formatting error, return original code
|
291
296
|
return code
|
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
|
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.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/operations/__init__.py
RENAMED
File without changes
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/operations/parser.py
RENAMED
File without changes
|
File without changes
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/operations/request_body.py
RENAMED
File without changes
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/parameters/__init__.py
RENAMED
File without changes
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/parameters/parser.py
RENAMED
File without changes
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/responses/__init__.py
RENAMED
File without changes
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/responses/parser.py
RENAMED
File without changes
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/schemas/__init__.py
RENAMED
File without changes
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/loader/schemas/extractor.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/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.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/common/type_parser.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/keywords/__init__.py
RENAMED
File without changes
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/keywords/all_of_parser.py
RENAMED
File without changes
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/keywords/any_of_parser.py
RENAMED
File without changes
|
File without changes
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/keywords/one_of_parser.py
RENAMED
File without changes
|
File without changes
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/schema_finalizer.py
RENAMED
File without changes
|
File without changes
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/parsing/transformers/__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
|
{pyopenapi_gen-0.8.5 → pyopenapi_gen-0.8.7}/src/pyopenapi_gen/core/writers/documentation_writer.py
RENAMED
File without changes
|
File without changes
|
File without changes
|