Skip to content

Commit 89f6ad5

Browse files
committed
refactor: use denokv._pycompat.typing everywhere
1 parent 555ca39 commit 89f6ad5

18 files changed

Lines changed: 157 additions & 216 deletions

src/denokv/_pycompat/enum.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@
44
from enum import EnumMeta
55
from enum import Flag
66
from enum import IntFlag
7-
from typing import TYPE_CHECKING
8-
from typing import Iterator
97

10-
if TYPE_CHECKING:
11-
from typing_extensions import Self
8+
from denokv._pycompat.typing import Iterator
9+
from denokv._pycompat.typing import Self
1210

1311

1412
class ContainsValueEnumMeta(EnumMeta):

src/denokv/_rfc3339.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
from datetime import datetime
55
from datetime import timedelta
66
from datetime import timezone
7-
from typing import Final
8-
from typing import TypedDict
9-
from typing import cast
107

8+
from denokv._pycompat.typing import Final
9+
from denokv._pycompat.typing import TypedDict
10+
from denokv._pycompat.typing import cast
1111
from denokv.result import Err
1212
from denokv.result import Ok
1313
from denokv.result import Result

src/denokv/auth.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22

33
from dataclasses import dataclass
44
from datetime import datetime
5-
from typing import Mapping
6-
from typing import Sequence
7-
from typing import cast
85
from uuid import UUID
96

107
import aiohttp
@@ -13,6 +10,9 @@
1310

1411
from denokv._pycompat.dataclasses import slots_if310
1512
from denokv._pycompat.enum import StrEnum
13+
from denokv._pycompat.typing import Mapping
14+
from denokv._pycompat.typing import Sequence
15+
from denokv._pycompat.typing import cast
1616
from denokv._rfc3339 import parse_rfc3339_datetime
1717
from denokv.errors import DenoKvError
1818
from denokv.errors import DenoKvValidationError

src/denokv/backoff.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@
66
from dataclasses import dataclass
77
from enum import IntEnum
88
from itertools import count
9-
from typing import TYPE_CHECKING
10-
from typing import Callable
11-
from typing import Iterable
12-
from typing import Iterator
139
from typing import Literal
1410

15-
if TYPE_CHECKING:
16-
from typing_extensions import TypeAlias
11+
from denokv._pycompat.typing import Callable
12+
from denokv._pycompat.typing import Iterable
13+
from denokv._pycompat.typing import Iterator
14+
from denokv._pycompat.typing import TypeAlias
1715

1816
Backoff: TypeAlias = Iterable[float]
1917
"""

src/denokv/datapath.py

Lines changed: 35 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,7 @@
99
from dataclasses import dataclass
1010
from enum import Enum
1111
from enum import auto
12-
from typing import TYPE_CHECKING
13-
from typing import Awaitable
14-
from typing import Callable
15-
from typing import Container
16-
from typing import Final
17-
from typing import Protocol
18-
from typing import Type
19-
from typing import TypedDict
20-
from typing import Union
2112
from typing import overload
22-
from typing import runtime_checkable
2313

2414
import aiohttp
2515
import aiohttp.client_exceptions
@@ -34,6 +24,19 @@
3424
from denokv._datapath_pb2 import SnapshotReadOutput
3525
from denokv._datapath_pb2 import SnapshotReadStatus
3626
from denokv._datapath_pb2 import ValueEncoding
27+
from denokv._pycompat.typing import Awaitable
28+
from denokv._pycompat.typing import Callable
29+
from denokv._pycompat.typing import Container
30+
from denokv._pycompat.typing import Final
31+
from denokv._pycompat.typing import Protocol
32+
from denokv._pycompat.typing import Type
33+
from denokv._pycompat.typing import TypeAlias
34+
from denokv._pycompat.typing import TypedDict
35+
from denokv._pycompat.typing import TypeGuard
36+
from denokv._pycompat.typing import TypeVar
37+
from denokv._pycompat.typing import Union
38+
from denokv._pycompat.typing import Unpack
39+
from denokv._pycompat.typing import runtime_checkable
3740
from denokv.auth import ConsistencyLevel
3841
from denokv.auth import DatabaseMetadata
3942
from denokv.auth import EndpointInfo
@@ -45,55 +48,30 @@
4548
KV_KEY_PIECE_TYPES: Final = (str, bytes, int, float, bool)
4649

4750

48-
if TYPE_CHECKING:
49-
from typing_extensions import TypeAlias
50-
from typing_extensions import TypeGuard
51-
from typing_extensions import TypeVar
52-
from typing_extensions import Unpack
51+
KvKeyPiece: TypeAlias = Union[str, bytes, int, float, bool]
52+
KvKeyPieceT = TypeVar("KvKeyPieceT", bound=KvKeyPiece, default=KvKeyPiece)
5353

54-
KvKeyPiece: TypeAlias = Union[str, bytes, int, float, bool]
55-
KvKeyPieceT = TypeVar("KvKeyPieceT", bound=KvKeyPiece, default=KvKeyPiece)
56-
57-
KvKeyTuple: TypeAlias = tuple[KvKeyPieceT, ...]
58-
KvKeyTupleT = TypeVar("KvKeyTupleT", bound=KvKeyTuple, default=KvKeyTuple)
59-
KvKeyTupleT_co = TypeVar(
60-
"KvKeyTupleT_co", bound=KvKeyTuple, default=KvKeyTuple, covariant=True
61-
)
62-
63-
@runtime_checkable
64-
class KvKeyEncodable(Protocol):
65-
__slots__ = ()
66-
67-
def kv_key_bytes(self) -> bytes: ...
54+
KvKeyTuple: TypeAlias = tuple[KvKeyPieceT, ...]
55+
KvKeyTupleT = TypeVar("KvKeyTupleT", bound=KvKeyTuple, default=KvKeyTuple)
56+
KvKeyTupleT_co = TypeVar(
57+
"KvKeyTupleT_co", bound=KvKeyTuple, default=KvKeyTuple, covariant=True
58+
)
6859

69-
KvKeyEncodableT = TypeVar("KvKeyEncodableT", bound=KvKeyEncodable)
70-
AnyKvKey: TypeAlias = "KvKeyEncodable | KvKeyTuple"
71-
AnyKvKeyT = TypeVar("AnyKvKeyT", bound=AnyKvKey, default=AnyKvKey)
72-
AnyKvKeyT_co = TypeVar(
73-
"AnyKvKeyT_co", bound=AnyKvKey, default=AnyKvKey, covariant=True
74-
)
75-
AnyKvKeyT_con = TypeVar(
76-
"AnyKvKeyT_con", bound=AnyKvKey, default=AnyKvKey, contravariant=True
77-
)
78-
else:
79-
from typing import TypeVar
8060

81-
KvKeyPiece: TypeAlias = "str | bytes | int | float | bool"
82-
KvKeyPieceT = TypeVar("KvKeyPieceT", bound=KvKeyPiece)
61+
@runtime_checkable
62+
class KvKeyEncodable(Protocol):
63+
__slots__ = ()
8364

84-
KvKeyTuple: TypeAlias = tuple[KvKeyPieceT, ...]
85-
KvKeyTupleT = TypeVar("KvKeyTupleT", bound=KvKeyTuple)
86-
KvKeyTupleT_co = TypeVar("KvKeyTupleT_co", bound=KvKeyTuple, covariant=True)
65+
def kv_key_bytes(self) -> bytes: ...
8766

88-
@runtime_checkable
89-
class KvKeyEncodable(Protocol):
90-
def kv_key_bytes(self) -> bytes: ...
9167

92-
KvKeyEncodableT = TypeVar("KvKeyEncodableT", bound=KvKeyEncodable)
93-
AnyKvKey: TypeAlias = "KvKeyEncodable | KvKeyTuple"
94-
AnyKvKeyT = TypeVar("AnyKvKeyT", bound=AnyKvKey)
95-
AnyKvKeyT_co = TypeVar("AnyKvKeyT", bound=AnyKvKey, covariant=True)
96-
AnyKvKeyT_con = TypeVar("AnyKvKeyT_con", bound=AnyKvKey, contravariant=True)
68+
KvKeyEncodableT = TypeVar("KvKeyEncodableT", bound=KvKeyEncodable)
69+
AnyKvKey: TypeAlias = Union[KvKeyEncodable, KvKeyTuple]
70+
AnyKvKeyT = TypeVar("AnyKvKeyT", bound=AnyKvKey, default=AnyKvKey)
71+
AnyKvKeyT_co = TypeVar("AnyKvKeyT_co", bound=AnyKvKey, default=AnyKvKey, covariant=True)
72+
AnyKvKeyT_con = TypeVar(
73+
"AnyKvKeyT_con", bound=AnyKvKey, default=AnyKvKey, contravariant=True
74+
)
9775

9876
_T = TypeVar("_T")
9977

@@ -196,9 +174,9 @@ class RequestUnsuccessful(DataPathDenoKvError):
196174
pass
197175

198176

199-
DataPathError: TypeAlias = (
200-
"EndpointNotUsable | RequestUnsuccessful | ResponseUnsuccessful | ProtocolViolation"
201-
)
177+
DataPathError: TypeAlias = Union[
178+
EndpointNotUsable, RequestUnsuccessful, ResponseUnsuccessful, ProtocolViolation
179+
]
202180

203181

204182
class _DataPathRequestKind(Enum):
@@ -300,7 +278,7 @@ async def _response_body_bytes(response: aiohttp.ClientResponse) -> Ok[bytes]:
300278
return Ok(await response.read())
301279

302280

303-
SnapshotReadResult: TypeAlias = "Result[SnapshotReadOutput, DataPathError]"
281+
SnapshotReadResult: TypeAlias = Result[SnapshotReadOutput, DataPathError]
304282

305283

306284
async def snapshot_read(

src/denokv/errors.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from dataclasses import dataclass
2-
from typing import cast
2+
3+
from denokv._pycompat.typing import cast
34

45

56
@dataclass(init=False)

src/denokv/kv.py

Lines changed: 22 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,7 @@
1212
from enum import auto
1313
from os import environ
1414
from types import TracebackType
15-
from typing import TYPE_CHECKING
16-
from typing import AsyncIterator
17-
from typing import Awaitable
18-
from typing import Callable
19-
from typing import ClassVar
20-
from typing import Final
21-
from typing import Generic
22-
from typing import Iterable
2315
from typing import Literal
24-
from typing import Protocol
25-
from typing import Sequence
26-
from typing import TypedDict
2716
from typing import overload
2817

2918
import aiohttp
@@ -36,6 +25,21 @@
3625
from denokv._datapath_pb2 import SnapshotRead
3726
from denokv._datapath_pb2 import SnapshotReadOutput
3827
from denokv._pycompat.dataclasses import slots_if310
28+
from denokv._pycompat.typing import AsyncIterator
29+
from denokv._pycompat.typing import Awaitable
30+
from denokv._pycompat.typing import Callable
31+
from denokv._pycompat.typing import ClassVar
32+
from denokv._pycompat.typing import Final
33+
from denokv._pycompat.typing import Generic
34+
from denokv._pycompat.typing import Iterable
35+
from denokv._pycompat.typing import Protocol
36+
from denokv._pycompat.typing import Self
37+
from denokv._pycompat.typing import Sequence
38+
from denokv._pycompat.typing import TypeAlias
39+
from denokv._pycompat.typing import TypedDict
40+
from denokv._pycompat.typing import TypeVar
41+
from denokv._pycompat.typing import TypeVarTuple
42+
from denokv._pycompat.typing import Unpack
3943
from denokv._pycompat.typing import override
4044
from denokv.asyncio import loop_time
4145
from denokv.auth import ConsistencyLevel
@@ -66,23 +70,10 @@
6670
from denokv.result import Ok
6771
from denokv.result import Result
6872

69-
if TYPE_CHECKING:
70-
from typing_extensions import Self
71-
from typing_extensions import TypeAlias
72-
from typing_extensions import TypeVar
73-
from typing_extensions import TypeVarTuple
74-
from typing_extensions import Unpack
75-
76-
T = TypeVar("T", default=object)
77-
# Note that the default arg doesn't seem to work with MyPy yet. The
78-
# DefaultKvKey alias is what this should behave as when defaulted.
79-
Pieces = TypeVarTuple("Pieces", default=Unpack[tuple[KvKeyPiece, ...]])
80-
else:
81-
from typing import TypeVar
82-
83-
T = TypeVar("T")
84-
Unpack = tuple # hack to support py39 at runtime w/o typing_extensions
85-
Pieces = TypeVar("Pieces") # hack to support py39 at runtime w/o typing_extensions
73+
T = TypeVar("T", default=object)
74+
# Note that the default arg doesn't seem to work with MyPy yet. The
75+
# DefaultKvKey alias is what this should behave as when defaulted.
76+
Pieces = TypeVarTuple("Pieces", default=Unpack[tuple[KvKeyPiece, ...]])
8677

8778
SAFE_FLOAT_INT_RANGE: Final = range(-(2**53 - 1), 2**53) # 2**53 - 1 is max safe
8879

@@ -860,9 +851,9 @@ async def _snapshot_read(
860851
return Ok((result.value, endpoint))
861852

862853

863-
_KvSnapshotReadResult: TypeAlias = (
864-
"Result[tuple[SnapshotReadOutput, EndpointInfo], DataPathError]"
865-
)
854+
_KvSnapshotReadResult: TypeAlias = Result[
855+
tuple[SnapshotReadOutput, EndpointInfo], DataPathError
856+
]
866857

867858

868859
@dataclass(frozen=True)

src/denokv/kv_keys.py

Lines changed: 24 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,26 @@
44
import sys
55
from dataclasses import dataclass
66
from dataclasses import field
7-
from typing import TYPE_CHECKING
8-
from typing import Any
9-
from typing import Final
10-
from typing import Generic
11-
from typing import Iterator
12-
from typing import Sequence
13-
from typing import Union
14-
from typing import cast
157
from typing import overload
168

179
from fdb.tuple import pack
1810
from fdb.tuple import unpack
1911

2012
from denokv._pycompat.dataclasses import slots_if310
13+
from denokv._pycompat.typing import TYPE_CHECKING
14+
from denokv._pycompat.typing import Any
15+
from denokv._pycompat.typing import Final
16+
from denokv._pycompat.typing import Generic
17+
from denokv._pycompat.typing import Iterator
18+
from denokv._pycompat.typing import Self
19+
from denokv._pycompat.typing import Sequence
20+
from denokv._pycompat.typing import SupportsIndex
21+
from denokv._pycompat.typing import TypeAlias
22+
from denokv._pycompat.typing import TypeVar
23+
from denokv._pycompat.typing import TypeVarTuple
24+
from denokv._pycompat.typing import Union
25+
from denokv._pycompat.typing import Unpack
26+
from denokv._pycompat.typing import cast
2127
from denokv._pycompat.typing import override
2228
from denokv.datapath import KV_KEY_PIECE_TYPES
2329
from denokv.datapath import AnyKvKey
@@ -36,24 +42,10 @@
3642
from denokv.result import Nothing
3743
from denokv.result import Some
3844

39-
if TYPE_CHECKING:
40-
from typing_extensions import Self
41-
from typing_extensions import SupportsIndex
42-
from typing_extensions import TypeAlias
43-
from typing_extensions import TypeVar
44-
from typing_extensions import TypeVarTuple
45-
from typing_extensions import Unpack
46-
47-
T = TypeVar("T", default=object)
48-
# Note that the default arg doesn't seem to work with MyPy yet. The
49-
# DefaultKvKey alias is what this should behave as when defaulted.
50-
Pieces = TypeVarTuple("Pieces", default=Unpack[tuple[KvKeyPiece, ...]])
51-
else:
52-
from typing import TypeVar
53-
54-
T = TypeVar("T")
55-
Unpack = tuple # hack to support py39 at runtime w/o typing_extensions
56-
Pieces = TypeVar("Pieces") # hack to support py39 at runtime w/o typing_extensions
45+
T = TypeVar("T", default=object)
46+
# Note that the default arg doesn't seem to work with MyPy yet. The
47+
# DefaultKvKey alias is what this should behave as when defaulted.
48+
Pieces = TypeVarTuple("Pieces", default=Unpack[tuple[KvKeyPiece, ...]])
5749

5850
_T_co = TypeVar("_T_co", covariant=True)
5951

@@ -447,23 +439,12 @@ def range(cls) -> KvKeyRange[IncludeAll, IncludeAll]:
447439
StopBoundary: TypeAlias = Union[
448440
IncludeAll, Include[AnyKvKeyT], IncludePrefix[AnyKvKeyT], Exclude[AnyKvKeyT]
449441
]
450-
451-
if TYPE_CHECKING:
452-
StartT = TypeVar(
453-
"StartT", bound=StartBoundary, default=StartBoundary, covariant=False
454-
)
455-
StartT_co = TypeVar(
456-
"StartT_co", bound=StartBoundary, default=StartBoundary, covariant=True
457-
)
458-
StopT = TypeVar("StopT", bound=StopBoundary, default=StopBoundary, covariant=False)
459-
StopT_co = TypeVar(
460-
"StopT_co", bound=StopBoundary, default=StopBoundary, covariant=True
461-
)
462-
else:
463-
StartT = TypeVar("StartT", bound=StartBoundary, covariant=False)
464-
StopT = TypeVar("StopT", bound=StopBoundary, covariant=False)
465-
StartT_co = TypeVar("StartT_co", bound=StartBoundary, covariant=True)
466-
StopT_co = TypeVar("StopT_co", bound=StopBoundary, covariant=True)
442+
StartT = TypeVar("StartT", bound=StartBoundary, default=StartBoundary, covariant=False)
443+
StartT_co = TypeVar(
444+
"StartT_co", bound=StartBoundary, default=StartBoundary, covariant=True
445+
)
446+
StopT = TypeVar("StopT", bound=StopBoundary, default=StopBoundary, covariant=False)
447+
StopT_co = TypeVar("StopT_co", bound=StopBoundary, default=StopBoundary, covariant=True)
467448

468449

469450
@functools.total_ordering

0 commit comments

Comments
 (0)