From afa75b3369f2f7c55af423ef78208015d7feb6cf Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 13 Nov 2026 12:14:16 +0000 Subject: [PATCH] typing: remove cssselect from mypy stub ignore list Co-authored-by: Armen Zambrano G. --- .../stubs-for-mypy/cssselect/__init__.pyi | 12 ++++++++ fixtures/stubs-for-mypy/cssselect/parser.pyi | 29 +++++++++++++++++++ pyproject.toml | 1 - src/sentry/replays/lib/selector/parse.py | 2 +- 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 fixtures/stubs-for-mypy/cssselect/__init__.pyi create mode 100644 fixtures/stubs-for-mypy/cssselect/parser.pyi diff --git a/fixtures/stubs-for-mypy/cssselect/__init__.pyi b/fixtures/stubs-for-mypy/cssselect/__init__.pyi new file mode 100644 index 000000000000..cab3a6cdae9c --- /dev/null +++ b/fixtures/stubs-for-mypy/cssselect/__init__.pyi @@ -0,0 +1,12 @@ +from cssselect.parser import ( + Attrib as Attrib, + Class as Class, + CombinedSelector as CombinedSelector, + Element as Element, + Hash as Hash, + Selector as Selector, +) + +class SelectorSyntaxError(Exception): ... + +def parse(css: str) -> list[Selector]: ... diff --git a/fixtures/stubs-for-mypy/cssselect/parser.pyi b/fixtures/stubs-for-mypy/cssselect/parser.pyi new file mode 100644 index 000000000000..04eb95c807ef --- /dev/null +++ b/fixtures/stubs-for-mypy/cssselect/parser.pyi @@ -0,0 +1,29 @@ +from __future__ import annotations + +from typing import TypeAlias + +SelectorNode: TypeAlias = Attrib | Class | Element | Hash + +class Selector: + pseudo_element: str | None + parsed_tree: SelectorNode | CombinedSelector + +class Attrib: + operator: str | None + attrib: str + value: str + selector: SelectorNode + +class Class: + class_name: str + selector: SelectorNode + +class Element: + element: str + +class Hash: + id: str + selector: SelectorNode + +class CombinedSelector: + pass diff --git a/pyproject.toml b/pyproject.toml index 0e10fcd8f05d..0cd300e3ade5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -387,7 +387,6 @@ module = [ "boto3.*", "botocore.client.*", "botocore.exceptions.*", - "cssselect.*", "django_zero_downtime_migrations.backends.postgres.schema.*", "emmett55.*", "emmett_prometheus.*", diff --git a/src/sentry/replays/lib/selector/parse.py b/src/sentry/replays/lib/selector/parse.py index c9961dd1fe09..4cfe02e6e79b 100644 --- a/src/sentry/replays/lib/selector/parse.py +++ b/src/sentry/replays/lib/selector/parse.py @@ -5,7 +5,7 @@ from cssselect.parser import Attrib, Class, CombinedSelector, Element, Hash from rest_framework.exceptions import ParseError -SelectorType = Union[Attrib, Class, Element, Hash] +SelectorType = Union[Attrib, Class, Element, Hash, CombinedSelector] class QueryType: