Skip to content

Commit a8cb4c6

Browse files
committed
Implement closed support in serialization
1 parent ede00cb commit a8cb4c6

2 files changed

Lines changed: 18 additions & 4 deletions

File tree

mypy/types.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3020,17 +3020,17 @@ def serialize(self) -> JsonDict:
30203020
"required_keys": sorted(self.required_keys),
30213021
"readonly_keys": sorted(self.readonly_keys),
30223022
"fallback": self.fallback.serialize(),
3023+
"is_closed": self.is_closed,
30233024
}
30243025

30253026
@classmethod
30263027
def deserialize(cls, data: JsonDict) -> TypedDictType:
30273028
assert data[".class"] == "TypedDictType"
3028-
# TODO: round-trip is_closed
30293029
return TypedDictType(
30303030
{n: deserialize_type(t) for (n, t) in data["items"]},
30313031
set(data["required_keys"]),
30323032
set(data["readonly_keys"]),
3033-
False,
3033+
bool(data["is_closed"]),
30343034
Instance.deserialize(data["fallback"]),
30353035
)
30363036

@@ -3040,18 +3040,18 @@ def write(self, data: WriteBuffer) -> None:
30403040
write_type_map(data, self.items)
30413041
write_str_list(data, sorted(self.required_keys))
30423042
write_str_list(data, sorted(self.readonly_keys))
3043+
write_bool(data, self.is_closed)
30433044
write_tag(data, END_TAG)
30443045

30453046
@classmethod
30463047
def read(cls, data: ReadBuffer) -> TypedDictType:
30473048
assert read_tag(data) == INSTANCE
30483049
fallback = Instance.read(data)
3049-
# TODO: round-trip is_closed
30503050
ret = TypedDictType(
30513051
read_type_map(data),
30523052
set(read_str_list(data)),
30533053
set(read_str_list(data)),
3054-
False,
3054+
read_bool(data),
30553055
fallback,
30563056
)
30573057
assert read_tag(data) == END_TAG

test-data/unit/check-serialize.test

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,6 +1088,20 @@ main:2: note: Revealed type is "TypedDict('m.D', {'x'?: builtins.int, 'y'?: buil
10881088
[out2]
10891089
main:2: note: Revealed type is "TypedDict('m.D', {'x'?: builtins.int, 'y'?: builtins.str})"
10901090

1091+
[case testSerializeClosedTotalTypedDict]
1092+
from m import d
1093+
reveal_type(d)
1094+
[file m.py]
1095+
from typing import TypedDict
1096+
D = TypedDict('D', {'x': int, 'y': str}, closed=True)
1097+
d: D
1098+
[builtins fixtures/dict.pyi]
1099+
[typing fixtures/typing-typeddict.pyi]
1100+
[out1]
1101+
main:2: note: Revealed type is "TypedDict('m.D', {'x': builtins.int, 'y': builtins.str}, closed=True)"
1102+
[out2]
1103+
main:2: note: Revealed type is "TypedDict('m.D', {'x': builtins.int, 'y': builtins.str}, closed=True)"
1104+
10911105
--
10921106
-- Modules
10931107
--

0 commit comments

Comments
 (0)