Skip to content

Commit d0797f1

Browse files
authoredDec 18, 2024
Fix typing issues around Range/RangeValue (#1196)
In order for the `_RangeValue` protocol to type check properly, it needs to reference `Self`, not itself. Both pyright and mypy show a ton of errors when type checking this before these changes. (I've omitted non-relevant errors here): ``` % pyright tests/test_types.py /Users/dmcgee/projects/sbl/asyncpg/tests/test_types.py /Users/dmcgee/projects/sbl/asyncpg/tests/test_types.py:18:25 - error: Argument of type "Literal[1]" cannot be assigned to parameter "lower" of type "_RV@Range | None" in function "__init__"   Type "Literal[1]" is not assignable to type "_RV@Range | None"     Type "Literal[1]" is not assignable to type "_RangeValue"       "Literal[1]" is incompatible with protocol "_RangeValue"         "__lt__" is an incompatible type           Type "(value: int, /) -> bool" is not assignable to type "(__other: _RV@__lt__, /) -> bool"         "__gt__" is an incompatible type           Type "(value: int, /) -> bool" is not assignable to type "(__other: _RV@__gt__, /) -> bool"     "Literal[1]" is not assignable to "None" (reportArgumentType) /Users/dmcgee/projects/sbl/asyncpg/tests/test_types.py:18:34 - error: Argument of type "Literal[5]" cannot be assigned to parameter "upper" of type "_RV@Range | None" in function "__init__"   Type "Literal[5]" is not assignable to type "_RV@Range | None"     Type "Literal[5]" is not assignable to type "_RangeValue"       "Literal[5]" is incompatible with protocol "_RangeValue"         "__lt__" is an incompatible type           Type "(value: int, /) -> bool" is not assignable to type "(__other: _RV@__lt__, /) -> bool"         "__gt__" is an incompatible type           Type "(value: int, /) -> bool" is not assignable to type "(__other: _RV@__gt__, /) -> bool"     "Literal[5]" is not assignable to "None" (reportArgumentType) ... % mypy tests/test_types.py | grep arg-type tests/test_types.py:18: error: Argument "lower" to "Range" has incompatible type "int"; expected "None" [arg-type] tests/test_types.py:18: error: Argument "upper" to "Range" has incompatible type "int"; expected "None" [arg-type] ... (19 more errors) ``` After this change, the type checking comes back clean: ``` % pyright tests/test_types.py 0 errors, 0 warnings, 0 informations % mypy tests/test_types.py | grep arg-type <no output> ```
1 parent e9bb695 commit d0797f1

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed
 

‎asyncpg/types.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,10 @@ class _RangeValue(typing.Protocol):
6363
def __eq__(self, __value: object) -> bool:
6464
...
6565

66-
def __lt__(self, __other: _RangeValue) -> bool:
66+
def __lt__(self, __other: Self, /) -> bool:
6767
...
6868

69-
def __gt__(self, __other: _RangeValue) -> bool:
69+
def __gt__(self, __other: Self, /) -> bool:
7070
...
7171

7272

0 commit comments

Comments
 (0)
Failed to load comments.