Skip to content

ref(typing): drop redundant casts in resolve_measurement_value#113933

Merged
JoshFerge merged 1 commit intomasterfrom
joshferge/ref/drop-redundant-casts-measurement-value
Apr 24, 2026
Merged

ref(typing): drop redundant casts in resolve_measurement_value#113933
JoshFerge merged 1 commit intomasterfrom
joshferge/ref/drop-redundant-casts-measurement-value

Conversation

@JoshFerge
Copy link
Copy Markdown
Member

@JoshFerge JoshFerge commented Apr 24, 2026

Summary

Drop the two `cast(...)` calls in `BaseQueryBuilder.resolve_measurement_value` — mypy 1.20.1 narrows `unit` via `in SIZE_UNITS / DURATION_UNITS` membership, so both casts are redundant under the new pin. Removes the pair of `# type: ignore[redundant-cast]` comments #113419 parked on these lines.

Drafted because it depends on #113419.

Test plan

  • `.venv/bin/python -m mypy src/sentry/search/events/builder/base.py` passes

Agent transcript: https://claudescope.sentry.dev/share/9knBZJ8vsizIvYD0SEHZTCEVeYi3SKsV51XS1gS1L0k

@github-actions github-actions Bot added the Scope: Backend Automatically applied to PRs that change backend components label Apr 24, 2026
JoshFerge added a commit that referenced this pull request Apr 24, 2026
Bumps the mypy pin to 1.20.1. Prep PRs for the bulk
class-level-attribute fixes have already merged; what remains here is
the pin bump, the `GroupType` ClassVar + `__init_subclass__` migration,
a handful of small typing cleanups, and targeted `# type: ignore`
comments for cases that will get proper fixes in the follow-up PRs
below.

### Prep PRs (already merged)

- #113422 — `ref(typing)`: `RegressionDetector` + `AttributeHandler` →
`ClassVar`
- #113423 — `ref(issues)`: `GroupType` → `ClassVar` + move validation to
`__init_subclass__`
- #113424 — `fix(typing)`: `group_status` args are `int`, not
`GroupStatus`
- #113427 — `test(typing)`: refetch via queryset instead of
`refresh_from_db` after narrowing
- #113428 — `test(typing)`: misc test-side type hint fixes

### What's in this PR

- Bump `mypy>=1.19.1` → `mypy>=1.20.1` (+ `uv.lock`)
- Drop the now-stale `kombu.*` entry from `[[tool.mypy.overrides]]`
- `src/sentry/issues/grouptype.py` — convert `GroupType` fields to
`ClassVar` and move the category-validation check from the dead
`__post_init__` into `__init_subclass__`. Plus the corresponding test
updates in `tests/sentry/issues/test_grouptype.py` and
`tests/sentry/workflow_engine/endpoints/test_validators.py`.
- Small typing fixes that don't change runtime behavior:
- `digests/backends/base.py` — widen options map to `Mapping[str, Any]`
- `discover/compare_timeseries.py` — heterogeneous mismatches dict typed
as `dict[int, dict[str, Any]]`
- `explore/endpoints/explore_saved_queries.py` — drop unused `# type:
ignore`
- `tests/sentry/incidents/test_logic.py` — stringify both sides of the
`target_identifier` comparison so mypy stops flagging it as unreachable
- Targeted `# type: ignore` on six files where the proper fix is being
landed as a follow-up PR (see below)
- `.github/workflows/scripts/bootstrap-snuba.py` — `# type:
ignore[arg-type]` on `int(workers_str)` (single-file mypy can't see
through `sys.exit`; follow-up can replace with `NoReturn`)

### Follow-up PRs (drafts, based on this branch)

Each one removes one of the `# type: ignore` comments and applies the
proper fix. They'll merge after this lands.

- #113927 — `fix(typing)`: narrow `organization_id` in `from_auth`
- #113928 — `fix(typing)`: guard None options in `ReconnectingMemcache`
- #113929 — `docs(typing)`: annotate the `save_team_assignments` ignore
with a FIXME
- #113930 — `ref(typing)`: drop redundant cast in trace metric search
type
- #113932 — `ref(typing)`: drop redundant cast on
`TraceMetric.metric_type`
- #113933 — `ref(typing)`: drop redundant casts in
`resolve_measurement_value`

### Performance

| version | cold | warm |
|---|---|---|
| 1.19.1 | 49.22s | 17.82s |
| 1.20.1 | 39.04s | 5.73s |

### CI expectation

- `mypy` job: clean (0 errors)
- `uv` jobs: resolve against `pypi.devinfra.sentry.io` (1.20.1 has been
published there)
Base automatically changed from joshferge/ref/upgrade-mypy-to-1-20-1 to master April 24, 2026 16:18
mypy 1.20.1 narrows `unit` via the `in SIZE_UNITS` / `in DURATION_UNITS`
membership checks, making the `cast(SizeUnit/DurationUnit, unit)` calls
redundant. Drop both along with the `# type: ignore[redundant-cast]`
#113419 parked on each line.

Agent transcript: https://claudescope.sentry.dev/share/D5BcySnDeVsi_TvpdsbF4DnHgDCKeoLRjrK-4DBQaMA
@JoshFerge JoshFerge force-pushed the joshferge/ref/drop-redundant-casts-measurement-value branch from e0aaa88 to 1359315 Compare April 24, 2026 16:25
@JoshFerge JoshFerge marked this pull request as ready for review April 24, 2026 16:38
@JoshFerge JoshFerge requested a review from a team as a code owner April 24, 2026 16:38
@JoshFerge JoshFerge requested review from a team and cmanallen April 24, 2026 16:38
@JoshFerge JoshFerge enabled auto-merge (squash) April 24, 2026 16:38
@JoshFerge JoshFerge merged commit b7e4c88 into master Apr 24, 2026
74 checks passed
@JoshFerge JoshFerge deleted the joshferge/ref/drop-redundant-casts-measurement-value branch April 24, 2026 16:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Scope: Backend Automatically applied to PRs that change backend components

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants