Skip to content

Commit e9c87c6

Browse files
authored
chore(ingestion): drop pylint, expand ruff (#27774)
* chore(ingestion): drop pylint, expand ruff to Stage 2c Replace pylint with a coherent ruff-only stack (Stage 2c of the modernize roadmap). Pylint is dropped from dev deps and CI workflows; ruff selected ruleset expanded to ~22 families covering style, bug catchers, hygiene, and the pylint port (PLE/PLC/PLW/PLR with the noisy "too-many-X" complexity caps + magic-value disabled). What's selected (with rationale in pyproject.toml): E, W, F, I, N — style + correctness baseline + naming UP — pyupgrade (py>=3.10 modernizations) B, C4, C90, RET, SIM, TRY — bug catchers PIE, ICN, T20, TC, TID, PTH, PERF — hygiene PLE, PLC, PLW, PLR — pylint port (PLR complexity caps ignored) RUF — ruff-native (incl. RUF100 unused-noqa) What's removed: - .pylintrc (root) — duplicate of the ingestion pylint config - [tool.pylint.*] block in ingestion/pyproject.toml (~140 lines) - ingestion/plugins/{print_checker,import_checker}.py + tests + README (replaced by built-in T20 + TID251 banned-api respectively) - pylint dep from ingestion/setup.py and openmetadata-airflow-apis/pyproject.toml - `make lint` Makefile target + the pylint invocation in py_format_check - dead pylint TODO comment + ignored test entry in noxfile.py Cwd-stable config: ruff is invoked both from the repo root (pre-commit, CI) and from ingestion/ (`make py_format_check`). The `src`, `extend-exclude`, and per-file-ignores entries are listed twice — once relative to ingestion/ and once with the `ingestion/` prefix — so first-party isort detection and exclusions match in both invocations. Grandfathering: ran `ruff check --add-noqa` once + format-stable iteration. ~12,130 noqa directives across ~1,400 files. Cleanup is deferred to follow-up PRs that drop noqas one rule at a time. Documentation sweep: replaced `make lint` references in CLAUDE.md, AGENTS.md, DEVELOPER.md, copilot-instructions, and 6 SKILL files with the apply+verify shape `make py_format && make py_format_check`. `make py_format` is NOT a strict superset of pylint — it only applies auto-fixable violations; `make py_format_check` catches the rest. Basedpyright baseline regenerated: ruff format reflowed multi-line signatures in ~70 files, shifting type-error column positions. The basedpyright baseline matches by (file path, error code, range), so column shifts caused 19 entries to mis-align. Net diff is small (154 lines in/out of the 13MB baseline.json) — purely positional. Verified locally: - make py_format_check → All checks passed - nox --no-venv -s static-checks → 0 errors, 0 warnings, 0 notes * chore(ingestion): finish ruff swap — nox lint session + skill docs Three remaining stale-tooling references after Stage 2c: - `ingestion/noxfile.py` `lint` session was still calling `black --check`, `isort --check-only`, `pycln --diff`. Those tools aren't installed anywhere (we dropped them from dev deps). Replace with the ruff equivalents that mirror `make py_format_check`. - `skills/standards/code_style.md`: stack listed as `black + isort + pycln`; line length claimed 88 (black default). Both wrong: stack is ruff, line length is 120. - `skills/connector-building/SKILL.md`: `make py_format` comment said `# black + isort + pycln`. Same swap. * chore(ingestion): keep main's baseline + globally ignore TRY400 Per gitar-bot's review on PR #27774: 1. Main's PR #27728 promoted ~60 `logger.warning()` → `logger.error()` inside `except` blocks. Those changes landed on main with their own baseline updates. Our PR doesn't promote anything — the merge from origin/main brought those `error` calls along with their baseline entries. The bot interpreted the `# noqa: TRY400` we added next to those lines as us silencing the rule case-by-case. Cleaner: globally ignore TRY400 in pyproject.toml, with a comment explaining why the codebase's `logger.error(...)` + separate `logger.debug(traceback.format_exc())` pattern is intentional. Strip ~430 per-line `# noqa: TRY400` markers from source. 2. Document that `S101` in `per-file-ignores` is a forward-looking entry — flake8-bandit (`S`) is not yet selected, so the rule is no-op today; the entry stays so when `S` lands later, tests don't immediately error. Reverts the platform pin and Linux Docker–generated baseline. Keep main's baseline intact and let CI surface the exact column-shifted entries; the team will decide whether to fix in-place (revert format on affected files) or add per-line `# pyright: ignore` markers. * chore(ingestion): regen baseline for new connector type debt Main's baseline was stale relative to recently-added connectors (McpConnection, CustomDriveConnection) that lack common attributes like `hostPort`, `database`, `catalog` etc. — all sites that access those attributes via the union-typed `serviceConnection.root.config` fire `reportAttributeAccessIssue` errors that aren't baselined. 71 errors + 58 warnings absorbed. Local macOS regen; pushing to see CI's drift count. Per the basedpyright-baseline-and-ci PR experience, macOS↔Linux column drift on this size of regen has historically been 1-7 residuals.
1 parent 7d8a8f4 commit e9c87c6

1,387 files changed

Lines changed: 12145 additions & 11903 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/copilot-instructions.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,8 +448,8 @@ yarn pre-commit # Run precommit checks (lint-staged): license headers, i18
448448

449449
### Python
450450
```bash
451-
make py_format # Format with black, isort, pycln
452-
make lint # Run pylint
451+
make py_format # Apply ruff lint-fix + format
452+
make py_format_check # Verify lint + format (matches CI; catches non-auto-fixable issues)
453453
make static-checks # Run type checking with basedpyright
454454
```
455455

.pylintrc

Lines changed: 0 additions & 33 deletions
This file was deleted.

AGENTS.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ cd ingestion
5252
make install_dev_env # Install in development mode
5353
make generate # Generate Pydantic models from JSON schemas
5454
make unit_ingestion_dev_env # Run unit tests
55-
make lint # Run pylint
56-
make py_format # Format with black, isort, pycln
55+
make py_format # Apply ruff lint-fix + format
56+
make py_format_check # Verify lint + format (matches CI; catches non-auto-fixable issues)
5757
make static-checks # Run type checking with basedpyright
5858
```
5959

CLAUDE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ cd ingestion
120120
make install_dev_env # Install in development mode
121121
make generate # Generate Pydantic models from JSON schemas
122122
make unit_ingestion_dev_env # Run unit tests
123-
make lint # Run pylint
124-
make py_format # Format with black, isort, pycln
123+
make py_format # Apply ruff lint-fix + format
124+
make py_format_check # Verify lint + format (matches CI; catches non-auto-fixable issues)
125125
make static-checks # Run type checking with basedpyright
126126
```
127127

DEVELOPER.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ For connector-specific development, see [skills/README.md](skills/README.md).
7474
2. /connector-standards — Load the relevant standards
7575
3. /tdd — Write pytest tests first
7676
4. Implement using topology pattern
77-
5. make py_format && make lint
77+
5. make py_format && make py_format_check
7878
6. /test-enforcement — Verify 90% coverage
7979
7. /verification — Show test + lint output
8080
8. /connector-review — Full review against golden standards (for connectors)

0 commit comments

Comments
 (0)