Skip to content

Commit 9f040ab

Browse files
Fix changelog entry and __mutable_keys__ tracking for PEP 705 (#334)
1 parent 566e01e commit 9f040ab

File tree

3 files changed

+8
-1
lines changed

3 files changed

+8
-1
lines changed

CHANGELOG.md

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

33
- Add support for PEP 742, adding `typing_extensions.TypeIs`. Patch
44
by Jelle Zijlstra.
5-
- Drop runtime error when a mutable `TypedDict` key overrides a read-only
5+
- Drop runtime error when a read-only `TypedDict` item overrides a mutable
66
one. Type checkers should still flag this as an error. Patch by Jelle
77
Zijlstra.
88
- Speedup `issubclass()` checks against simple runtime-checkable protocols by

src/test_typing_extensions.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4147,9 +4147,15 @@ def test_make_mutable_key_readonly(self):
41474147
class Base(TypedDict):
41484148
a: int
41494149

4150+
self.assertEqual(Base.__readonly_keys__, frozenset())
4151+
self.assertEqual(Base.__mutable_keys__, frozenset({'a'}))
4152+
41504153
class Child(Base):
41514154
a: ReadOnly[int] # type checker error, but allowed at runtime
41524155

4156+
self.assertEqual(Child.__readonly_keys__, frozenset({'a'}))
4157+
self.assertEqual(Child.__mutable_keys__, frozenset())
4158+
41534159
def test_can_make_readonly_key_mutable(self):
41544160
class Base(TypedDict):
41554161
a: ReadOnly[int]

src/typing_extensions.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -943,6 +943,7 @@ def __new__(cls, name, bases, ns, *, total=True):
943943
else:
944944
optional_keys.add(annotation_key)
945945
if ReadOnly in qualifiers:
946+
mutable_keys.discard(annotation_key)
946947
readonly_keys.add(annotation_key)
947948
else:
948949
mutable_keys.add(annotation_key)

0 commit comments

Comments
 (0)