ruff-sync 0.1.7.dev1__tar.gz → 0.1.7.dev2__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.
- ruff_sync-0.1.7.dev2/.github/workflows/codspeed.yaml +37 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/PKG-INFO +3 -2
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/README.md +1 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/gen_ref_pages.py +1 -1
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/pyproject.toml +15 -3
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/cli.py +1 -1
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/config_io.py +1 -1
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/core.py +7 -6
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tasks.py +1 -1
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/conftest.py +56 -3
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_basic.py +18 -23
- ruff_sync-0.1.7.dev2/tests/test_benchmarks.py +338 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_check.py +43 -32
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_config_validation.py +13 -8
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_deprecation.py +6 -5
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_e2e.py +13 -8
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_formatters.py +2 -2
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_git_fetch.py +1 -1
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_scaffold.py +3 -3
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_serialization.py +1 -1
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_url_handling.py +7 -6
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/uv.lock +355 -187
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/DEPENDENCIES.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/TESTING.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/args_refactor_plan.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/cli_animation_plan.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/decisions/0001-type-refactoring-strategy.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/decisions/0002-tui-node-ast.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/decisions/0003-argument-resolution-layers.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/decisions/README.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/doc-fix.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/docs_update_plan.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/formatters-architecture.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/gitlab-reports.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/issue-102-context.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/plans/issue-100-roadmap-plan.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/plans/issue-116-config-validation.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/ruff.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/adr/SKILL.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/dirty-equals/SKILL.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/dirty-equals/references/common-matchers.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/dirty-equals/references/toml-matching.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/dirty-equals/trigger_eval.json +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/gh-issues/SKILL.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/mike/SKILL.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/mike/references/commands.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/mkdocs-generation/SKILL.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/mkdocs-generation/examples.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/mkdocs-generation/templates/api-reference.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/mkdocs-generation/templates/getting-started.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/mkdocs-generation/templates/index.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/mkdocs-generation/templates/mkdocs.yml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/release-notes-generation/SKILL.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/ruff-sync-usage/SKILL.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/ruff-sync-usage/references/ci-integration.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/ruff-sync-usage/references/configuration.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/ruff-sync-usage/references/troubleshooting.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/skill-creator/SKILL.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/skill-creator/references/best-practices.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/skill-creator/references/evaluating-skills.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/skill-creator/references/optimizing-descriptions.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/skill-creator/references/quickstart.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/skill-creator/references/sources.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/skill-creator/references/using-scripts.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/skill-creator/scripts/scaffold_skill.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/textual/SKILL.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/textual/examples/basic_app.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/textual/examples/reactive_example.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/textual/references/events.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/textual/references/styling.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/textual/references/testing.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/textual/references/widgets.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/type-checking/SKILL.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/type-checking/evals.json +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/type-checking/references/advanced-narrowing.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/type-checking/references/error-code-lookup.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/type-checking/references/generics.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/type-checking/references/naming.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/type-checking/references/protocol-patterns.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/type-checking/references/quickstart.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/type-checking/references/refactoring-patterns.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/type-checking/scripts/audit_types.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/skills/warnings-control/SKILL.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/tui_design.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/tui_requirements.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/tui_rule_browsing.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/tui_rule_browsing_design.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/workflows/add-test-case.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/workflows/update-recordings.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.agents/workflows/update-screenshots.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.git-blame-ignore-revs +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.github/dependabot.yml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.github/workflows/ci.yaml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.github/workflows/complexity.yaml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.gitignore +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.pre-commit-config.yaml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/.pre-commit-hooks.yaml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/AGENTS.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/CONTRIBUTING.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/LICENSE.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/codecov.yml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/configs/data-science-engineering/ruff.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/configs/fastapi/ruff.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/configs/kitchen-sink/ruff.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/agent-skill.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/favicon.png +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/github-job-summary.png +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/github-pr-annotation.png +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/inspect-main.png +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/inspect-search.png +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/logo.png +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/recordings/check_drift.gif +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/recordings/check_in_sync.gif +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/recordings/help_overview.gif +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/recordings/init_project.gif +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/recordings/pull_basic.gif +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/recordings/validate_strict.gif +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/ruff_sync_banner.png +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/screenshots/dashboard.svg +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/screenshots/legend_help.svg +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/screenshots/rule_details.svg +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/screenshots/screenshot_sample.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/assets/screenshots/search_omnibox.svg +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/best-practices.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/ci-integration.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/configuration.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/contributing.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/examples/advanced-config.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/examples/basic-config.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/index.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/inspect.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/installation.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/overrides/main.html +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/overrides/partials/version_warning.html +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/pre-commit.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/pre-defined-configs.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/troubleshooting.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/url-resolution.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/docs/usage.md +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/mkdocs.yml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/scripts/check_dogfood.sh +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/scripts/generate_tui_screenshots.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/scripts/gitclone_dogfood.sh +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/scripts/pull_dogfood.sh +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/skills-lock.json +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/__init__.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/__main__.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/constants.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/dependencies.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/formatters.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/pre_commit.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/system.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/tui/__init__.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/tui/app.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/tui/constants.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/tui/screens.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/tui/themes.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/tui/types_.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/tui/widgets.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/types_.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/src/ruff_sync/validation.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tapes/_common.tape +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tapes/check_drift.tape +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tapes/check_in_sync.tape +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tapes/help_overview.tape +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tapes/init_project.tape +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tapes/pull_basic.tape +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tapes/validate_strict.tape +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/__init__.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/multi_upstream_final.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/multi_upstream_initial.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/multi_upstream_up1.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/multi_upstream_up2.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/no_changes_final.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/no_changes_initial.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/no_changes_upstream.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/no_dotted_keys_final.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/no_dotted_keys_initial.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/no_dotted_keys_upstream.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/no_ruff_cfg_final.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/no_ruff_cfg_initial.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/no_ruff_cfg_upstream.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/readme_excludes_final.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/readme_excludes_initial.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/readme_excludes_upstream.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/standard_final.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/standard_initial.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/lifecycle_tomls/standard_upstream.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/ruff.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_ci_integration.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_ci_validation.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_config_io.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_constants.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_corner_cases.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_dependencies.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_minimal_imports.sh +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_pre_commit.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_project.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_rule_logic.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_system.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_toml_operations.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/test_whitespace.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/tui/__init__.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/tui/conftest.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/tui/test_themes.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/tui/test_tui.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/tui/test_tui_types.py +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/w_ruff_sync_cfg/pyproject.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/wo_ruff_cfg/pyproject.toml +0 -0
- {ruff_sync-0.1.7.dev1 → ruff_sync-0.1.7.dev2}/tests/wo_ruff_sync_cfg/pyproject.toml +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
name: CodSpeed
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
# `workflow_dispatch` allows CodSpeed to trigger backtest
|
|
9
|
+
# performance analysis in order to generate initial data.
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
id-token: write
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
benchmarks:
|
|
18
|
+
name: Run benchmarks
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- name: Checkout
|
|
22
|
+
uses: actions/checkout@v4
|
|
23
|
+
|
|
24
|
+
- name: Install uv
|
|
25
|
+
uses: astral-sh/setup-uv@v5
|
|
26
|
+
|
|
27
|
+
- name: Set up Python
|
|
28
|
+
run: uv python install 3.13
|
|
29
|
+
|
|
30
|
+
- name: Install dependencies
|
|
31
|
+
run: uv sync --group dev --frozen
|
|
32
|
+
|
|
33
|
+
- name: Run benchmarks
|
|
34
|
+
uses: CodSpeedHQ/action@v4
|
|
35
|
+
with:
|
|
36
|
+
mode: simulation
|
|
37
|
+
run: uv run pytest -m benchmark --codspeed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ruff-sync
|
|
3
|
-
Version: 0.1.7.
|
|
3
|
+
Version: 0.1.7.dev2
|
|
4
4
|
Summary: Synchronize Ruff linter configuration across projects
|
|
5
5
|
Project-URL: Homepage, https://github.com/Kilo59/ruff-sync
|
|
6
6
|
Project-URL: Documentation, https://kilo59.github.io/ruff-sync/
|
|
@@ -24,7 +24,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
24
24
|
Classifier: Programming Language :: Python :: 3.14
|
|
25
25
|
Classifier: Topic :: Software Development :: Quality Assurance
|
|
26
26
|
Requires-Python: >=3.10
|
|
27
|
-
Requires-Dist:
|
|
27
|
+
Requires-Dist: httpx2>=2.3.0
|
|
28
28
|
Requires-Dist: tomlkit<2.0.0,>=0.12.3
|
|
29
29
|
Requires-Dist: typing-extensions>=4.5.0
|
|
30
30
|
Provides-Extra: tui
|
|
@@ -42,6 +42,7 @@ Description-Content-Type: text/markdown
|
|
|
42
42
|
<a href="https://results.pre-commit.ci/latest/github/Kilo59/ruff-sync/main"><img src="https://results.pre-commit.ci/badge/github/Kilo59/ruff-sync/main.svg" alt="pre-commit.ci status"></a>
|
|
43
43
|
<a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff"></a>
|
|
44
44
|
<a href="https://wily.readthedocs.io/"><img src="https://img.shields.io/badge/%F0%9F%A6%8A%20wily-passing-brightgreen.svg" alt="Wily"></a>
|
|
45
|
+
<a href="https://codspeed.io/Kilo59/ruff-sync?utm_source=badge"><img src="https://img.shields.io/endpoint?url=https://codspeed.io/badge.json" alt="CodSpeed"/></a>
|
|
45
46
|
</p>
|
|
46
47
|
|
|
47
48
|
# ruff-sync
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
<a href="https://results.pre-commit.ci/latest/github/Kilo59/ruff-sync/main"><img src="https://results.pre-commit.ci/badge/github/Kilo59/ruff-sync/main.svg" alt="pre-commit.ci status"></a>
|
|
10
10
|
<a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff"></a>
|
|
11
11
|
<a href="https://wily.readthedocs.io/"><img src="https://img.shields.io/badge/%F0%9F%A6%8A%20wily-passing-brightgreen.svg" alt="Wily"></a>
|
|
12
|
+
<a href="https://codspeed.io/Kilo59/ruff-sync?utm_source=badge"><img src="https://img.shields.io/endpoint?url=https://codspeed.io/badge.json" alt="CodSpeed"/></a>
|
|
12
13
|
</p>
|
|
13
14
|
|
|
14
15
|
# ruff-sync
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "ruff-sync"
|
|
3
|
-
version = "0.1.7.
|
|
3
|
+
version = "0.1.7.dev2"
|
|
4
4
|
description = "Synchronize Ruff linter configuration across projects"
|
|
5
5
|
keywords = ["ruff", "linter", "config", "synchronize", "python", "linting", "automation", "tomlkit", "pre-commit"]
|
|
6
6
|
authors = [
|
|
@@ -24,7 +24,7 @@ classifiers = [
|
|
|
24
24
|
"Topic :: Software Development :: Quality Assurance",
|
|
25
25
|
]
|
|
26
26
|
dependencies = [
|
|
27
|
-
"
|
|
27
|
+
"httpx2>=2.3.0",
|
|
28
28
|
"tomlkit>=0.12.3,<2.0.0",
|
|
29
29
|
"typing-extensions>=4.5.0",
|
|
30
30
|
]
|
|
@@ -54,9 +54,10 @@ dev = [
|
|
|
54
54
|
"pyfakefs>=5.4.1",
|
|
55
55
|
"pytest>=8.0.0",
|
|
56
56
|
"pytest-asyncio>=0.23.5",
|
|
57
|
+
"pytest-codspeed>=4.3.0",
|
|
57
58
|
"pytest-icdiff>=0.9",
|
|
58
59
|
"pytest-textual-snapshot>=1.0.0",
|
|
59
|
-
"
|
|
60
|
+
"pytest-httpx2",
|
|
60
61
|
"ruamel-yaml>=0.18.6",
|
|
61
62
|
"ruff>=0.15.0",
|
|
62
63
|
"textual>=8.2.2",
|
|
@@ -99,6 +100,10 @@ exclude = 'site/.*'
|
|
|
99
100
|
module = "tests.*"
|
|
100
101
|
disable_error_code = ['type-arg', 'no-untyped-def']
|
|
101
102
|
|
|
103
|
+
[[tool.mypy.overrides]]
|
|
104
|
+
module = "ruff_sync.core"
|
|
105
|
+
disable_error_code = ["union-attr", "unused-ignore"]
|
|
106
|
+
|
|
102
107
|
[tool.ruff-sync]
|
|
103
108
|
upstream = "https://github.com/Kilo59/ruff-sync/"
|
|
104
109
|
to = "pyproject.toml"
|
|
@@ -231,6 +236,7 @@ docstring-code-line-length = "dynamic"
|
|
|
231
236
|
[tool.ruff.lint.flake8-tidy-imports.banned-api]
|
|
232
237
|
"unittest.mock".msg = "Prefer dedicated libraries to mock at external dependencies, such as `httpx` or `pyfakefs`."
|
|
233
238
|
"typing.cast".msg = "Please fix the underlying type issues instead of using typing.cast."
|
|
239
|
+
"httpx".msg = "Use httpx2 instead."
|
|
234
240
|
|
|
235
241
|
[tool.ruff.lint.flake8-import-conventions]
|
|
236
242
|
# Declare the banned `from` imports.
|
|
@@ -241,6 +247,7 @@ banned-from = ["pathlib", "datetime"]
|
|
|
241
247
|
datetime = "dt"
|
|
242
248
|
"pprint.pprint" = "pp"
|
|
243
249
|
"pprint.pformat" = "pf"
|
|
250
|
+
httpx2 = "httpx"
|
|
244
251
|
|
|
245
252
|
[tool.ruff.lint.isort]
|
|
246
253
|
required-imports = ["from __future__ import annotations"]
|
|
@@ -249,4 +256,9 @@ required-imports = ["from __future__ import annotations"]
|
|
|
249
256
|
include = ["src/ruff_sync/*.py"]
|
|
250
257
|
|
|
251
258
|
[tool.pytest]
|
|
259
|
+
addopts = ["-p pytest_httpx2"]
|
|
252
260
|
log_level = "INFO"
|
|
261
|
+
markers = [
|
|
262
|
+
"benchmark: marks performance benchmarks (run separately for CodSpeed)",
|
|
263
|
+
"httpx2: configure the httpx2_mock fixture",
|
|
264
|
+
]
|
|
@@ -22,9 +22,9 @@ from typing import (
|
|
|
22
22
|
overload,
|
|
23
23
|
)
|
|
24
24
|
|
|
25
|
-
import httpx
|
|
25
|
+
import httpx2 as httpx
|
|
26
26
|
import tomlkit
|
|
27
|
-
from
|
|
27
|
+
from httpx2 import URL
|
|
28
28
|
from tomlkit import TOMLDocument, table
|
|
29
29
|
from tomlkit.items import Item, Table
|
|
30
30
|
from tomlkit.toml_file import TOMLFile
|
|
@@ -330,12 +330,13 @@ def _get_discovery_candidates(base: pathlib.Path) -> list[pathlib.Path]: ...
|
|
|
330
330
|
def _get_discovery_candidates(base: URL | pathlib.Path) -> list[URL] | list[pathlib.Path]:
|
|
331
331
|
"""Return a list of candidate configuration files, prioritizing the requested one."""
|
|
332
332
|
# If it's a URL, use PurePosixPath. If it's a Path, use it directly.
|
|
333
|
-
|
|
333
|
+
is_url = not isinstance(base, pathlib.Path)
|
|
334
|
+
name = base.path if is_url else base.name
|
|
334
335
|
if pathlib.PurePosixPath(name).name != RuffConfigFileName.PYPROJECT_TOML:
|
|
335
336
|
return [base] # type: ignore[return-value]
|
|
336
337
|
|
|
337
338
|
# Try pyproject.toml first, then fall back to ruff.toml variants.
|
|
338
|
-
if
|
|
339
|
+
if is_url:
|
|
339
340
|
base_url = base.join(".")
|
|
340
341
|
return [base] + [
|
|
341
342
|
base_url.join(str(f))
|
|
@@ -935,7 +936,7 @@ async def check(
|
|
|
935
936
|
Examples:
|
|
936
937
|
>>> import asyncio
|
|
937
938
|
>>> from ruff_sync.cli import Arguments
|
|
938
|
-
>>> from
|
|
939
|
+
>>> from httpx2 import URL
|
|
939
940
|
>>> import pathlib
|
|
940
941
|
>>> args = Arguments(
|
|
941
942
|
... command="check",
|
|
@@ -1122,7 +1123,7 @@ async def pull(
|
|
|
1122
1123
|
Examples:
|
|
1123
1124
|
>>> import asyncio
|
|
1124
1125
|
>>> from ruff_sync.cli import Arguments
|
|
1125
|
-
>>> from
|
|
1126
|
+
>>> from httpx2 import URL
|
|
1126
1127
|
>>> import pathlib
|
|
1127
1128
|
>>> args = Arguments(
|
|
1128
1129
|
... command="pull",
|
|
@@ -3,11 +3,24 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
import os
|
|
5
5
|
import sys
|
|
6
|
-
from typing import Literal, Protocol, runtime_checkable
|
|
6
|
+
from typing import TYPE_CHECKING, Literal, Protocol, runtime_checkable
|
|
7
|
+
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from collections.abc import Generator
|
|
10
|
+
|
|
11
|
+
import contextlib
|
|
7
12
|
|
|
8
13
|
import pytest
|
|
14
|
+
import respx
|
|
15
|
+
import truststore
|
|
16
|
+
from respx.router import DEFAULT as RESPX_DEFAULT
|
|
17
|
+
from respx.router import MockRouter
|
|
9
18
|
from typing_extensions import override
|
|
10
19
|
|
|
20
|
+
with contextlib.suppress(Exception):
|
|
21
|
+
truststore.SSLContext()
|
|
22
|
+
|
|
23
|
+
|
|
11
24
|
import ruff_sync
|
|
12
25
|
|
|
13
26
|
LOGGER = logging.getLogger(__name__)
|
|
@@ -38,7 +51,7 @@ class TestStreamHandler(logging.Handler):
|
|
|
38
51
|
|
|
39
52
|
|
|
40
53
|
@pytest.fixture
|
|
41
|
-
def configure_logging():
|
|
54
|
+
def configure_logging() -> Generator[logging.Logger, None, None]:
|
|
42
55
|
"""Configure ruff_sync logger for tests to ensure capsys can capture log output."""
|
|
43
56
|
logger = logging.getLogger("ruff_sync")
|
|
44
57
|
old_handlers = logger.handlers[:]
|
|
@@ -62,7 +75,7 @@ def configure_logging():
|
|
|
62
75
|
|
|
63
76
|
|
|
64
77
|
@pytest.fixture
|
|
65
|
-
def clear_ruff_sync_caches():
|
|
78
|
+
def clear_ruff_sync_caches() -> None:
|
|
66
79
|
"""Clear all lru_caches in ruff_sync."""
|
|
67
80
|
ruff_sync.get_config.cache_clear()
|
|
68
81
|
ruff_sync.Arguments.fields.cache_clear()
|
|
@@ -137,3 +150,43 @@ def cli_run(
|
|
|
137
150
|
return exit_code, captured.out, captured.err
|
|
138
151
|
|
|
139
152
|
return _run
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
class HTTPX2MockRouter(MockRouter):
|
|
156
|
+
@override
|
|
157
|
+
def __call__(
|
|
158
|
+
self,
|
|
159
|
+
func=None,
|
|
160
|
+
*,
|
|
161
|
+
assert_all_called=None,
|
|
162
|
+
assert_all_mocked=None,
|
|
163
|
+
base_url=None,
|
|
164
|
+
using=RESPX_DEFAULT,
|
|
165
|
+
):
|
|
166
|
+
"""Override __call__ to set using='httpcore2' by default for nested mocks."""
|
|
167
|
+
if using is RESPX_DEFAULT:
|
|
168
|
+
using = "httpcore2"
|
|
169
|
+
return super().__call__(
|
|
170
|
+
func=func,
|
|
171
|
+
assert_all_called=assert_all_called,
|
|
172
|
+
assert_all_mocked=assert_all_mocked,
|
|
173
|
+
base_url=base_url,
|
|
174
|
+
using=using,
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
@pytest.fixture
|
|
179
|
+
def httpx2_mock(request: pytest.FixtureRequest) -> Generator[respx.Router, None, None]:
|
|
180
|
+
options = {}
|
|
181
|
+
if (marker := request.node.get_closest_marker("httpx2")) is not None:
|
|
182
|
+
options.update(marker.kwargs)
|
|
183
|
+
options.setdefault("using", "httpcore2")
|
|
184
|
+
router = HTTPX2MockRouter(**options)
|
|
185
|
+
with router:
|
|
186
|
+
yield router
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
@pytest.fixture
|
|
190
|
+
def respx_mock(httpx2_mock):
|
|
191
|
+
"""Fixture that maps respx_mock to httpx2_mock for httpx2 compatibility."""
|
|
192
|
+
return httpx2_mock
|
|
@@ -11,12 +11,13 @@ import sys
|
|
|
11
11
|
from pprint import pformat as pf
|
|
12
12
|
from typing import TYPE_CHECKING, Any, Final, NamedTuple, cast
|
|
13
13
|
|
|
14
|
-
import httpx
|
|
14
|
+
import httpx as original_httpx
|
|
15
|
+
import httpx2 as httpx
|
|
15
16
|
import pytest
|
|
16
17
|
import respx
|
|
17
18
|
import tomlkit
|
|
18
19
|
from dirty_equals import IsPartialDict
|
|
19
|
-
from
|
|
20
|
+
from httpx2 import URL
|
|
20
21
|
from pytest import param
|
|
21
22
|
from tomlkit import TOMLDocument, document
|
|
22
23
|
from tomlkit.items import Table
|
|
@@ -279,14 +280,14 @@ def test_merge_ruff_toml(source: str, toml_s: str, sep_str: str):
|
|
|
279
280
|
|
|
280
281
|
|
|
281
282
|
@pytest.fixture
|
|
282
|
-
def mock_http(toml_s: str) -> Generator[respx.MockRouter, None, None]:
|
|
283
|
-
with
|
|
284
|
-
|
|
283
|
+
def mock_http(toml_s: str, respx_mock: respx.MockRouter) -> Generator[respx.MockRouter, None, None]:
|
|
284
|
+
with respx_mock(base_url="https://example.com/") as mock:
|
|
285
|
+
mock.get("/pyproject.toml").respond(
|
|
285
286
|
200,
|
|
286
287
|
content_type="text/plain",
|
|
287
288
|
content=toml_s,
|
|
288
289
|
)
|
|
289
|
-
yield
|
|
290
|
+
yield mock
|
|
290
291
|
|
|
291
292
|
|
|
292
293
|
@pytest.fixture
|
|
@@ -596,7 +597,7 @@ def test_verbosity_log_level(
|
|
|
596
597
|
|
|
597
598
|
|
|
598
599
|
@pytest.mark.asyncio
|
|
599
|
-
async def test_sync_default_exclude(fs: FakeFilesystem):
|
|
600
|
+
async def test_sync_default_exclude(fs: FakeFilesystem, respx_mock: respx.MockRouter):
|
|
600
601
|
"""Integration style test for default exclude functionality."""
|
|
601
602
|
source_toml = """[tool.ruff]
|
|
602
603
|
target-version = "py310"
|
|
@@ -609,8 +610,8 @@ target-version = "py311"
|
|
|
609
610
|
ff = fs.create_file("pyproject.toml", contents=source_toml)
|
|
610
611
|
ff_path = pathlib.Path(ff.path) # type: ignore[arg-type]
|
|
611
612
|
|
|
612
|
-
with
|
|
613
|
-
|
|
613
|
+
with respx_mock(base_url="https://example.com/") as mock:
|
|
614
|
+
mock.get("/pyproject.toml").respond(
|
|
614
615
|
200,
|
|
615
616
|
content_type="text/plain",
|
|
616
617
|
content=upstream_toml,
|
|
@@ -684,12 +685,8 @@ async def test_merge_multiple_upstreams_preserves_order(respx_mock: respx.Router
|
|
|
684
685
|
)
|
|
685
686
|
|
|
686
687
|
# Mock HTTP responses using respx
|
|
687
|
-
respx_mock.get("http://one.toml").
|
|
688
|
-
|
|
689
|
-
)
|
|
690
|
-
respx_mock.get("http://two.toml").return_value = httpx.Response(
|
|
691
|
-
200, text="[tool.ruff]\nline-length = 100"
|
|
692
|
-
)
|
|
688
|
+
respx_mock.get("http://one.toml").respond(200, text="[tool.ruff]\nline-length = 80")
|
|
689
|
+
respx_mock.get("http://two.toml").respond(200, text="[tool.ruff]\nline-length = 100")
|
|
693
690
|
|
|
694
691
|
async with httpx.AsyncClient() as client:
|
|
695
692
|
result_doc = await _merge_multiple_upstreams(target_doc, False, args.resolve(), client)
|
|
@@ -708,17 +705,17 @@ async def test_fetch_upstreams_concurrently_verified(respx_mock: respx.Router):
|
|
|
708
705
|
"""Verify that fetch_upstreams_concurrently actually runs tasks in parallel."""
|
|
709
706
|
events = []
|
|
710
707
|
|
|
711
|
-
async def side_effect_one(request:
|
|
708
|
+
async def side_effect_one(request: original_httpx.Request) -> original_httpx.Response:
|
|
712
709
|
events.append("start_one")
|
|
713
710
|
await asyncio.sleep(0.05)
|
|
714
711
|
events.append("end_one")
|
|
715
|
-
return
|
|
712
|
+
return original_httpx.Response(200, text="[tool.ruff]\n")
|
|
716
713
|
|
|
717
|
-
async def side_effect_two(request:
|
|
714
|
+
async def side_effect_two(request: original_httpx.Request) -> original_httpx.Response:
|
|
718
715
|
events.append("start_two")
|
|
719
716
|
await asyncio.sleep(0.05)
|
|
720
717
|
events.append("end_two")
|
|
721
|
-
return
|
|
718
|
+
return original_httpx.Response(200, text="[tool.ruff]\n")
|
|
722
719
|
|
|
723
720
|
respx_mock.get("http://one.toml").mock(side_effect=side_effect_one)
|
|
724
721
|
respx_mock.get("http://two.toml").mock(side_effect=side_effect_two)
|
|
@@ -771,10 +768,8 @@ async def test_merge_multiple_upstreams_handles_errors(respx_mock: respx.Router)
|
|
|
771
768
|
)
|
|
772
769
|
|
|
773
770
|
# Mock HTTP responses using respx
|
|
774
|
-
respx_mock.get("http://ok.toml").
|
|
775
|
-
|
|
776
|
-
)
|
|
777
|
-
respx_mock.get("http://fail.toml").return_value = httpx.Response(404)
|
|
771
|
+
respx_mock.get("http://ok.toml").respond(200, text="[tool.ruff]\nline-length = 80")
|
|
772
|
+
respx_mock.get("http://fail.toml").respond(404)
|
|
778
773
|
|
|
779
774
|
async with httpx.AsyncClient() as client:
|
|
780
775
|
with pytest.raises(UpstreamError) as excinfo:
|