Skip to content

Commit f33ea2f

Browse files
authored
nitypes: Extract typing backports into a submodule (#12)
* nitypes: Extract typing backports into a submodule * _typing: Set unsupported types to None at run time
1 parent ad552a3 commit f33ea2f

File tree

12 files changed

+61
-69
lines changed

12 files changed

+61
-69
lines changed

src/nitypes/_typing.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
"""Single source for typing backports to avoid depending on typing_extensions at run time."""
2+
3+
from __future__ import annotations
4+
5+
import sys
6+
from typing import TYPE_CHECKING
7+
8+
if sys.version_info >= (3, 10):
9+
from typing import TypeAlias
10+
elif TYPE_CHECKING:
11+
from typing_extensions import TypeAlias
12+
else:
13+
TypeAlias = None
14+
15+
if sys.version_info >= (3, 11):
16+
from typing import Self, assert_type
17+
elif TYPE_CHECKING:
18+
from typing_extensions import Self, assert_type
19+
else:
20+
Self = None
21+
22+
def assert_type(val, typ, /): # noqa: D103 - Missing docstring in public function
23+
pass
24+
25+
26+
if sys.version_info >= (3, 12):
27+
from typing import override
28+
elif TYPE_CHECKING:
29+
from typing_extensions import override
30+
else:
31+
32+
def override(arg, /): # noqa: D103 - Missing docstring in public function
33+
return arg
34+
35+
36+
__all__ = [
37+
"assert_type",
38+
"override",
39+
"Self",
40+
"TypeAlias",
41+
]

src/nitypes/time/_conversion.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,14 @@
11
from __future__ import annotations
22

33
import datetime as dt
4-
import sys
54
from collections.abc import Callable
65
from functools import singledispatch
76
from typing import Any, TypeVar, Union, cast
87

98
import hightime as ht
109

1110
from nitypes._exceptions import invalid_arg_type, invalid_requested_type
12-
13-
if sys.version_info >= (3, 10):
14-
from typing import TypeAlias
15-
else:
16-
from typing_extensions import TypeAlias
11+
from nitypes._typing import TypeAlias
1712

1813
_AnyDateTime: TypeAlias = Union[dt.datetime, ht.datetime]
1914
_TDateTime = TypeVar("_TDateTime", dt.datetime, ht.datetime)

src/nitypes/waveform/_analog_waveform.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,13 @@
22

33
import sys
44
from collections.abc import Sequence
5-
from typing import Any, Generic, SupportsIndex, TypeVar, overload
5+
from typing import (
6+
Any,
7+
Generic,
8+
SupportsIndex,
9+
TypeVar,
10+
overload,
11+
)
612

713
import numpy as np
814
import numpy.typing as npt

src/nitypes/waveform/_extended_properties.py

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,18 @@
11
from __future__ import annotations
22

33
import operator
4-
import sys
5-
from typing import MutableMapping, Iterator
4+
from typing import Iterator, MutableMapping, Union
65

7-
if sys.version_info >= (3, 10):
8-
from typing import TypeAlias
9-
else:
10-
from typing import Union
11-
from typing_extensions import TypeAlias
6+
from nitypes._typing import TypeAlias
127

138
# Extended property keys
149
CHANNEL_NAME = "NI_ChannelName"
1510
LINE_NAMES = "NI_LineNames"
1611
UNIT_DESCRIPTION = "NI_UnitDescription"
1712

1813

19-
if sys.version_info >= (3, 10):
20-
ExtendedPropertyValue: TypeAlias = bool | float | int | str
21-
"""An ExtendedPropertyDictionary value."""
22-
else:
23-
ExtendedPropertyValue: TypeAlias = Union[bool, float, int, str]
24-
"""An ExtendedPropertyDictionary value."""
14+
ExtendedPropertyValue: TypeAlias = Union[bool, float, int, str]
15+
"""An ExtendedPropertyDictionary value."""
2516

2617

2718
class ExtendedPropertyDictionary(MutableMapping[str, ExtendedPropertyValue]):

src/nitypes/waveform/_timing/_conversion.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,18 @@
11
from __future__ import annotations
22

33
import datetime as dt
4-
import sys
54
from collections.abc import Callable
65
from functools import singledispatch
76
from typing import Any, TypeVar, Union, cast
87

98
import hightime as ht
109

1110
from nitypes._exceptions import invalid_arg_type, invalid_requested_type
11+
from nitypes._typing import TypeAlias
1212
from nitypes.time._conversion import convert_datetime, convert_timedelta
1313
from nitypes.waveform._timing._precision import PrecisionTiming
1414
from nitypes.waveform._timing._standard import Timing
1515

16-
if sys.version_info >= (3, 10):
17-
from typing import TypeAlias
18-
else:
19-
from typing_extensions import TypeAlias
20-
2116
_AnyTiming: TypeAlias = Union[Timing, PrecisionTiming]
2217
_TTiming = TypeVar("_TTiming", Timing, PrecisionTiming)
2318

tests/unit/time/test_conversion.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,14 @@
11
from __future__ import annotations
22

33
import datetime as dt
4-
import sys
54
from typing import Any
65

76
import hightime as ht
87
import pytest
98

9+
from nitypes._typing import assert_type
1010
from nitypes.time import convert_datetime, convert_timedelta
1111

12-
if sys.version_info >= (3, 11):
13-
from typing import assert_type
14-
else:
15-
from typing_extensions import assert_type
16-
1712

1813
###############################################################################
1914
# convert_datetime

tests/unit/waveform/_scaling/test_linear.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,14 @@
11
from __future__ import annotations
22

3-
import sys
43
from typing import SupportsFloat
54

65
import numpy as np
76
import numpy.typing as npt
87
import pytest
98

9+
from nitypes._typing import assert_type
1010
from nitypes.waveform import LinearScaleMode
1111

12-
if sys.version_info >= (3, 11):
13-
from typing import assert_type
14-
else:
15-
from typing_extensions import assert_type
16-
1712

1813
@pytest.mark.parametrize(
1914
"gain, offset",

tests/unit/waveform/_scaling/test_none.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
11
from __future__ import annotations
22

3-
import sys
4-
53
import numpy as np
64
import numpy.typing as npt
75

6+
from nitypes._typing import assert_type
87
from nitypes.waveform import NO_SCALING, NoneScaleMode
98

10-
if sys.version_info >= (3, 11):
11-
from typing import assert_type
12-
else:
13-
from typing_extensions import assert_type
14-
159

1610
def test___no_scaling___type_is_none_scale_mode() -> None:
1711
assert_type(NO_SCALING, NoneScaleMode)

tests/unit/waveform/_timing/test_conversion.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
11
from __future__ import annotations
22

33
import datetime as dt
4-
import sys
54

65
import hightime as ht
76

7+
from nitypes._typing import assert_type
88
from nitypes.waveform import PrecisionTiming, SampleIntervalMode, Timing
99
from nitypes.waveform._timing import convert_timing
1010

11-
if sys.version_info >= (3, 11):
12-
from typing import assert_type
13-
else:
14-
from typing_extensions import assert_type
15-
1611

1712
def test___standard_to_standard___convert_timing___returns_original_object() -> None:
1813
value_in = Timing.create_with_regular_interval(

tests/unit/waveform/_timing/test_precision.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,14 @@
11
from __future__ import annotations
22

33
import datetime as dt
4-
import sys
54
from copy import deepcopy
65

76
import hightime as ht
87
import pytest
98

9+
from nitypes._typing import assert_type
1010
from nitypes.waveform import PrecisionTiming, SampleIntervalMode
1111

12-
if sys.version_info >= (3, 11):
13-
from typing import assert_type
14-
else:
15-
from typing_extensions import assert_type
16-
1712

1813
###############################################################################
1914
# empty

0 commit comments

Comments
 (0)