Skip to content

Commit 38682e2

Browse files
committed
[codecs] Update _CharMap alias for mapping params
1 parent 9a0198f commit 38682e2

3 files changed

Lines changed: 32 additions & 29 deletions

File tree

stdlib/_codecs.pyi

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import codecs
22
import sys
3-
from _typeshed import ReadableBuffer
3+
from _typeshed import ReadableBuffer, SupportsGetItem
44
from collections.abc import Callable
55
from typing import Literal, TypeAlias, final, overload, type_check_only
66

@@ -11,7 +11,8 @@ from typing import Literal, TypeAlias, final, overload, type_check_only
1111
class _EncodingMap:
1212
def size(self) -> int: ...
1313

14-
_CharMap: TypeAlias = dict[int, int] | _EncodingMap
14+
_DecodeCharMap: TypeAlias = SupportsGetItem[int, str | int | None] | _EncodingMap
15+
_EncodeCharMap: TypeAlias = SupportsGetItem[int, bytes | int | None] | _EncodingMap
1516
_Handler: TypeAlias = Callable[[UnicodeError], tuple[str | bytes, int]]
1617
_SearchFunction: TypeAlias = Callable[[str], codecs.CodecInfo | None]
1718

@@ -70,11 +71,13 @@ def decode(obj: str, encoding: Literal["hex", "hex_codec"], errors: str = "stric
7071
def decode(obj: ReadableBuffer, encoding: str = "utf-8", errors: str = "strict") -> str: ...
7172

7273
def lookup(encoding: str, /) -> codecs.CodecInfo: ...
73-
def charmap_build(map: str, /) -> _CharMap: ...
74+
def charmap_build(map: str, /) -> dict[int, int] | _EncodingMap: ...
7475
def ascii_decode(data: ReadableBuffer, errors: str | None = None, /) -> tuple[str, int]: ...
7576
def ascii_encode(str: str, errors: str | None = None, /) -> tuple[bytes, int]: ...
76-
def charmap_decode(data: ReadableBuffer, errors: str | None = None, mapping: _CharMap | None = None, /) -> tuple[str, int]: ...
77-
def charmap_encode(str: str, errors: str | None = None, mapping: _CharMap | None = None, /) -> tuple[bytes, int]: ...
77+
def charmap_decode(
78+
data: ReadableBuffer, errors: str | None = None, mapping: _DecodeCharMap | None = None, /
79+
) -> tuple[str, int]: ...
80+
def charmap_encode(str: str, errors: str | None = None, mapping: _EncodeCharMap | None = None, /) -> tuple[bytes, int]: ...
7881

7982
# Docs say this accepts a bytes-like object, but in practice it also accepts str.
8083
def escape_decode(data: str | ReadableBuffer, errors: str | None = None, /) -> tuple[bytes, int]: ...

stdlib/encodings/charmap.pyi

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
import codecs
2-
from _codecs import _CharMap
2+
from _codecs import _DecodeCharMap, _EncodeCharMap
33
from _typeshed import ReadableBuffer
44

55
class Codec(codecs.Codec):
66
# At runtime, this is codecs.charmap_encode
77
@staticmethod
8-
def encode(str: str, errors: str | None = None, mapping: _CharMap | None = None, /) -> tuple[bytes, int]: ...
8+
def encode(str: str, errors: str | None = None, mapping: _EncodeCharMap | None = None, /) -> tuple[bytes, int]: ...
99
# At runtime, this is codecs.charmap_decode
1010
@staticmethod
11-
def decode(data: ReadableBuffer, errors: str | None = None, mapping: _CharMap | None = None, /) -> tuple[str, int]: ...
11+
def decode(data: ReadableBuffer, errors: str | None = None, mapping: _DecodeCharMap | None = None, /) -> tuple[str, int]: ...
1212

1313
class IncrementalEncoder(codecs.IncrementalEncoder):
14-
mapping: _CharMap | None
15-
def __init__(self, errors: str = "strict", mapping: _CharMap | None = None) -> None: ...
14+
mapping: _EncodeCharMap | None
15+
def __init__(self, errors: str = "strict", mapping: _EncodeCharMap | None = None) -> None: ...
1616
def encode(self, input: str, final: bool = False) -> bytes: ...
1717

1818
class IncrementalDecoder(codecs.IncrementalDecoder):
19-
mapping: _CharMap | None
20-
def __init__(self, errors: str = "strict", mapping: _CharMap | None = None) -> None: ...
19+
mapping: _DecodeCharMap | None
20+
def __init__(self, errors: str = "strict", mapping: _DecodeCharMap | None = None) -> None: ...
2121
def decode(self, input: ReadableBuffer, final: bool = False) -> str: ...
2222

2323
class StreamWriter(Codec, codecs.StreamWriter):
24-
mapping: _CharMap | None
25-
def __init__(self, stream: codecs._WritableStream, errors: str = "strict", mapping: _CharMap | None = None) -> None: ...
24+
mapping: _EncodeCharMap | None
25+
def __init__(self, stream: codecs._WritableStream, errors: str = "strict", mapping: _EncodeCharMap | None = None) -> None: ...
2626
def encode(self, input: str, errors: str = "strict") -> tuple[bytes, int]: ... # type: ignore[override]
2727

2828
class StreamReader(Codec, codecs.StreamReader):
29-
mapping: _CharMap | None
30-
def __init__(self, stream: codecs._ReadableStream, errors: str = "strict", mapping: _CharMap | None = None) -> None: ...
29+
mapping: _DecodeCharMap | None
30+
def __init__(self, stream: codecs._ReadableStream, errors: str = "strict", mapping: _DecodeCharMap | None = None) -> None: ...
3131
def decode(self, input: ReadableBuffer, errors: str = "strict") -> tuple[str, int]: ... # type: ignore[override]
3232

3333
def getregentry() -> codecs.CodecInfo: ...
Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,48 @@
11
import codecs
2-
from _codecs import _CharMap
2+
from _codecs import _DecodeCharMap, _EncodeCharMap, _EncodingMap
33
from _typeshed import ReadableBuffer
4-
from typing import ClassVar, Final
4+
from typing import ClassVar, Final, Literal
55

66
class Codec(codecs.Codec):
7-
encoding_table: ClassVar[_CharMap | str | None]
8-
decoding_table: ClassVar[_CharMap | str | None]
7+
encoding_table: ClassVar[_EncodeCharMap | Literal[""] | None]
8+
decoding_table: ClassVar[_DecodeCharMap | None]
99
def encode(self, input: str, errors: str = "strict") -> tuple[bytes, int]: ...
1010
def decode(self, input: bytes, errors: str = "strict") -> tuple[str, int]: ...
1111

1212
class IncrementalEncoder(codecs.IncrementalEncoder):
13-
encoding_table: ClassVar[_CharMap | str | None]
13+
encoding_table: ClassVar[_EncodeCharMap | Literal[""] | None]
1414
def encode(self, input: str, final: bool = False) -> bytes: ...
1515

1616
class IncrementalDecoder(codecs.IncrementalDecoder):
17-
decoding_table: ClassVar[_CharMap | str | None]
17+
decoding_table: ClassVar[_DecodeCharMap | None]
1818
def decode(self, input: ReadableBuffer, final: bool = False) -> str: ...
1919

2020
class StreamWriter(Codec, codecs.StreamWriter): ...
2121
class StreamReader(Codec, codecs.StreamReader): ...
2222

2323
user_decoding_table: Final[str]
24-
user_encoding_table: Final[_CharMap]
24+
user_encoding_table: Final[_EncodingMap]
2525

2626
class UserCodec(Codec):
2727
decoding_table: ClassVar[str]
28-
encoding_table: ClassVar[_CharMap]
28+
encoding_table: ClassVar[_EncodeCharMap]
2929

3030
class UserIncrementalEncoder(IncrementalEncoder):
31-
encoding_table: ClassVar[_CharMap]
31+
encoding_table: ClassVar[_EncodeCharMap]
3232

3333
class UserIncrementalDecoder(IncrementalDecoder):
3434
decoding_table: ClassVar[str]
3535

3636
user_codec_info: Final[codecs.CodecInfo]
3737

3838
class ReplacementCodec(Codec):
39-
decoding_table: ClassVar[str]
40-
encoding_table: ClassVar[str]
39+
decoding_table: ClassVar[_DecodeCharMap]
40+
encoding_table: ClassVar[Literal[""]]
4141

4242
class ReplacementIncrementalEncoder(IncrementalEncoder):
43-
encoding_table: ClassVar[str]
43+
encoding_table: ClassVar[Literal[""]]
4444

4545
class ReplacementIncrementalDecoder(IncrementalDecoder):
46-
decoding_table: ClassVar[str]
46+
decoding_table: ClassVar[_DecodeCharMap]
4747

4848
replacement_codec_info: Final[codecs.CodecInfo]

0 commit comments

Comments
 (0)