[bot] Merge master/5aa5a35f into rel/dev - #1776
Merged
Merged
Conversation
Refreshes the lock and lifts the constraints that had frozen it, in one pass. Ruff and ty are deliberately left for the two commits that follow, since each forces source changes of its own and each commit here stays green on its own. Lock refresh, already permitted by the declared ranges but frozen: gooddata-code-convertors off the 11.35.0a2 alpha onto the 11.55.0 release, pyarrow 23.0.1 -> 25.0.1, pydantic 2.12.5 -> 2.13.5, plus boto3, opentelemetry, dynaconf, orjson, griffe, azure-storage-blob and the type stubs. Compatible-release pins that had drifted a minor or more behind: pre-commit, tox, tox-uv-bare, pytest-order, vcrpy, urllib3 and python-dotenv. Upper bounds that had gone stale: - attrs was capped <=24.2.0, cattrs <=24.1.1, structlog <25.0.0. The caps stay, in the same <= shape the repo already used, moved up to the current releases: attrs and cattrs <=26.1.0, structlog <=26.1.0. Note these three are CalVer, not semver: attrs 26.1.0 shipped 2026-03-19, cattrs 26.1.0 on 2026-02-18, structlog 26.1.0 on 2026-06-06. The leading number is the calendar year, so a semver-style major cap such as <27.0.0 would be a date fence that expires rather than a compatibility statement. Freezing at a known-good release says what is actually meant: this is the newest version we have tested against. - prometheus-client ~=0.20.0 -> ~=0.26.0. - tabulate ~=0.8.10 -> >=0.8.10,<1.0.0. It cannot reach 0.10 in the workspace because tbump pulls cli-ui which caps it, but that constrains only the release group, not consumers of gooddata-dbt. Major versions for test tooling: pytest 8 -> 9.1.1, pytest-cov 6 -> 7.1.0 and deepdiff 8 -> 9.1.0, across every member including gooddata-eval. Hooks and CI: pre-commit-hooks v5 -> v6, uv-lock hook 0.12.5 -> 0.12.9, and astral-sh/setup-uv v7 -> v10.0.1 at seven call sites. That action is pinned to an exact tag because v8.0.0 removed its major-tag workflow, so v8, v9 and v10 have no floating tag and `@v10` does not resolve at all. v9.0.0 also flipped the prune-cache default from true to false, so prune-cache: true is now set explicitly to keep the previous behaviour. Sphinx in the pandas and fdw docs requirements moves 5.1 -> 9.1. Nothing in CI builds those docs and there is no readthedocs config, so it was verified by building both sets locally against sphinx 9.1; both succeed. ty is held at the 0.0.55 already in the lock rather than following the refresh; the next-but-one commit takes it forward with the source change it needs.
…config Ruff 0.16 changed two defaults, and both consequences live here rather than in the dependency commit, so each commit stays independently green. gooddata-pipelines was the only member declaring its own [tool.ruff] table. That makes it a separate ruff configuration root, so it inherited nothing from the workspace: not the rule selection, not the format excludes. The table existed only to set line-length 80, but the side effect was that the package had never been linted with the workspace rules at all, just with whatever ruff happened to default to. Ruff 0.16 widened those defaults and surfaced 89 findings in code nobody had touched, which is what exposed the drift. Removing the table puts the package on the same footing as every other member and deletes the implicit coupling to ruff's defaults. Line length goes 80 -> 120 with the rest of the workspace, which is what reformats 51 files; that is mechanical `ruff format` output and carries no behaviour change. Of the lint findings, 47 were auto-fixable. The rest by hand: - SIM102/SIM108 collapse nested conditionals and an if/else into a ternary. - PERF401/PERF402 turn append loops into comprehensions. - PLC0415 hoists a function-local import in test_input_processor to the top, matching the top-level-imports rule the workspace already enforces. - D417 flagged two docstrings in input_validator naming raw_dataset_definitions and raw_field_definitions. Those parameters had been renamed to dataset_definitions and field_definitions and the docs were never updated, so the fix corrects stale names rather than adding new prose. - PERF203 is suppressed at four sites with a reason on each. All four are deliberate per-item error handling in the provisioning loops: one user, group or filter may fail without stopping the rest, or the failing id is needed for the error context. The try cannot move out of the loop without changing behaviour, so the rule does not apply. Ruff 0.16 also began formatting python code blocks inside markdown, which would rewrite 72 documentation files including published code samples. Markdown is excluded from the formatter; one exclusion suffices now that gooddata-pipelines is no longer a separate config root. The ruff pre-commit rev tracks the locked ruff so the two cannot drift. 195 pipelines tests pass; workspace lint, format and type-check are clean.
From ty 0.0.60, CatalogAttribute.find_label fails to type-check even though
self.labels is declared list[CatalogLabel]:
error[unresolved-attribute]: Attribute `obj_id` is not defined on `None`
in union `CatalogLabel | None`
Reduced to 13 lines, clean on 0.0.59 and erroring on 0.0.78:
from typing import Union
class Label:
obj_id: str
def find(labels: list[Label]) -> Union[Label, None]:
return next(filter(lambda x: len(x.obj_id) > 0, labels), None)
Four things must coincide: a declared `T | None` return type, the
`next(..., None)` wrapper, a `filter` with a lambda, and the attribute access
appearing as an argument to a nested call. That last one is easy to miss and is
why earlier attempts to reproduce this failed:
x.obj_id -> passes
x.obj_id == "a" -> passes
len(x.obj_id) > 0 -> errors
id_obj_to_key(x.obj_id) == k -> errors, the real code
The None from the declared return type flows backwards through next's
`_T | _VT` into filter's `_T`. `list[Label]` is assignable to
`Iterable[Label | None]` by covariance, so nothing rejects it.
Tracked upstream at astral-sh/ty#4016 - open,
milestone Stable, reported against 0.0.60 which matches the bisect, not fixed
on main as of 0.0.78. The real fix is an Astral draft PR touching 42 files, so
waiting is not a plan and a new report would duplicate the existing one.
The workaround is to bind the result to a local, which removes the declared
return type as type context for the call. No cast, no suppression, and the
local still infers as CatalogLabel | None, so type safety is unchanged. The
comment at the site links the issue and says to inline it again once fixed.
Two genuine cleanups the newer ty found on the way:
- an unused blanket `# type: ignore` on the pyarrow ipc import fallback
- a redundant `cast(bytes, ...)` around `download_blob().readall()` in
azure_storage, whose `typing.cast` import is now unused too
All 8 packages type-check clean on 0.0.78; lint and format are clean.
build: bring workspace dependencies up to date
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## rel/dev #1776 +/- ##
========================================
Coverage 81.58% 81.59%
========================================
Files 275 275
Lines 19863 19848 -15
========================================
- Hits 16205 16194 -11
+ Misses 3658 3654 -4 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🚀 Automated PR to perform merge from master into rel/dev with changes up to 5aa5a35 (created by https://github.com/gooddata/gooddata-python-sdk/actions/runs/33849843316).