Skip to content

Commit f15ad1d

Browse files
committed
refactor: Python version conditions typing imports
1 parent 3f07c2f commit f15ad1d

File tree

12 files changed

+63
-39
lines changed

12 files changed

+63
-39
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ adheres to [Semantic Versioning](https://semver.org/).
2020
- Add tests for CPython 3.11 and PyPy 3.9
2121
- Use CPython 3.11 for misc. tests
2222
- Update Github actions dependencies
23+
- Import typing modules impacted by PEP 585 based on Python version
2324

2425
## [0.4.0] - 2022-01-09
2526

setup.cfg

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,5 @@ python_requires = >=3.7
3636
setup_requires =
3737
setuptools_scm
3838
wheel
39+
install_requires =
40+
typing-extensions>=4.5.0;python_version<"3.8"

src/xz/block.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from io import DEFAULT_BUFFER_SIZE, SEEK_SET
22
from lzma import FORMAT_XZ, LZMACompressor, LZMADecompressor, LZMAError
3-
from typing import Tuple, Union
3+
from typing import Optional, Tuple, Union
44

55
from xz.common import (
66
XZError,
@@ -11,12 +11,7 @@
1111
)
1212
from xz.io import IOAbstract, IOCombiner, IOStatic
1313
from xz.strategy import KeepBlockReadStrategy
14-
from xz.typing import (
15-
Optional,
16-
_BlockReadStrategyType,
17-
_LZMAFiltersType,
18-
_LZMAPresetType,
19-
)
14+
from xz.typing import _BlockReadStrategyType, _LZMAFiltersType, _LZMAPresetType
2015

2116

2217
class BlockRead:

src/xz/stream.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from io import SEEK_CUR
2-
from typing import BinaryIO, List
2+
from typing import BinaryIO, List, Optional
33

44
from xz.block import XZBlock
55
from xz.common import (
@@ -12,12 +12,7 @@
1212
round_up,
1313
)
1414
from xz.io import IOCombiner, IOProxy
15-
from xz.typing import (
16-
Optional,
17-
_BlockReadStrategyType,
18-
_LZMAFiltersType,
19-
_LZMAPresetType,
20-
)
15+
from xz.typing import _BlockReadStrategyType, _LZMAFiltersType, _LZMAPresetType
2116

2217

2318
class XZStream(IOCombiner[XZBlock]):

src/xz/typing.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
11
from os import PathLike
22
import sys
3-
from typing import TYPE_CHECKING, Any, BinaryIO, Mapping, Optional, Sequence, Union
3+
from typing import TYPE_CHECKING, Any, BinaryIO, Optional, Union
44

55
if sys.version_info >= (3, 9): # pragma: no cover
6+
from collections.abc import Mapping, Sequence
7+
68
_LZMAFilenameType = Union[str, bytes, PathLike[str], PathLike[bytes], BinaryIO]
7-
from typing import Literal
89
else: # pragma: no cover
9-
_LZMAFilenameType = Union[str, bytes, PathLike, BinaryIO]
10+
from typing import Mapping, Sequence
1011

11-
class Literal:
12-
def __class_getitem__(cls, items: Any) -> str:
13-
return f"Literal{list(items)}"
12+
_LZMAFilenameType = Union[str, bytes, PathLike, BinaryIO]
1413

1514

1615
if sys.version_info >= (3, 8): # pragma: no cover
17-
from typing import Protocol
16+
from typing import Literal, Protocol
1817
else: # pragma: no cover
19-
# ducktype Protocol
20-
# we could require typing-extensions package instead
21-
Protocol = object
18+
from typing_extensions import Literal, Protocol
19+
2220

2321
if TYPE_CHECKING: # pragma: no cover
2422
# avoid circular dependency

src/xz/utils.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
from bisect import bisect_right, insort_right
2-
from collections.abc import MutableMapping
32
import sys
4-
from typing import Any, Dict, Generic, Iterator, List
5-
from typing import MutableMapping as TypingMutableMapping
6-
from typing import Tuple, TypeVar, cast
7-
8-
T = TypeVar("T")
3+
from typing import Any, Dict, Generic, List, Tuple, TypeVar, cast
94

105
if sys.version_info >= (3, 9): # pragma: no cover
11-
_MutableMapping = MutableMapping
6+
from collections.abc import Iterator, MutableMapping
127
else: # pragma: no cover
13-
_MutableMapping = TypingMutableMapping
8+
from typing import Iterator, MutableMapping
9+
10+
11+
T = TypeVar("T")
1412

1513

16-
class FloorDict(_MutableMapping[int, T]):
14+
class FloorDict(MutableMapping[int, T]):
1715
"""A dict where keys are int, and accessing a key will use the closest lower one.
1816
1917
Differences from dict:

tests/conftest.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
from itertools import chain, product
22
from pathlib import Path
3-
from typing import Callable, Iterator, List, Tuple
3+
import sys
4+
from typing import List, Tuple
45

56
import pytest
67

8+
if sys.version_info >= (3, 9): # pragma: no cover
9+
from collections.abc import Callable, Iterator
10+
else: # pragma: no cover
11+
from typing import Callable, Iterator
12+
713

814
def pytest_addoption(parser: pytest.Parser) -> None:
915
parser.addoption(

tests/integration/test_ram_usage.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from pathlib import Path
44
from random import seed
55
import sys
6-
from typing import BinaryIO, Callable, Iterator, Optional, cast
6+
from typing import BinaryIO, Optional, cast
77

88
import pytest
99

@@ -12,9 +12,11 @@
1212
from xz.io import IOCombiner, IOStatic
1313

1414
if sys.version_info >= (3, 9):
15+
from collections.abc import Callable, Iterator
1516
from random import randbytes
1617
else:
1718
from random import getrandbits
19+
from typing import Callable, Iterator
1820

1921
def randbytes(length: int) -> bytes:
2022
return getrandbits(length * 8).to_bytes(length, "little")

tests/integration/test_readme.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@
22
import os
33
from pathlib import Path
44
import shutil
5-
from typing import Iterator, List, Optional, Tuple
5+
import sys
6+
from typing import List, Optional, Tuple
67

78
import pytest
89

910
import xz
1011

12+
if sys.version_info >= (3, 9): # pragma: no cover
13+
from collections.abc import Iterator
14+
else: # pragma: no cover
15+
from typing import Iterator
16+
1117

1218
@pytest.fixture(autouse=True)
1319
def change_dir(tmp_path: Path) -> Iterator[None]:

tests/unit/test_block.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from io import SEEK_SET, BytesIO, UnsupportedOperation
2-
from typing import Callable, Iterator, Tuple, cast
2+
import sys
3+
from typing import Tuple, cast
34
from unittest.mock import Mock, call
45

56
import pytest
@@ -9,6 +10,12 @@
910
from xz.common import XZError, create_xz_header, create_xz_index_footer
1011
from xz.io import IOAbstract, IOStatic
1112

13+
if sys.version_info >= (3, 9): # pragma: no cover
14+
from collections.abc import Callable, Iterator
15+
else: # pragma: no cover
16+
from typing import Callable, Iterator
17+
18+
1219
BLOCK_BYTES = bytes.fromhex(
1320
"0200210116000000742fe5a3e0006300415d00209842100431d01ab285328305"
1421
"7ddb5924a128599cc9911a7fcff8d59c1f6f887bcee97b1f83f1808f005de273"

0 commit comments

Comments
 (0)