From 522c6cd345959c06370ebfbd0a260ad4f73b86f1 Mon Sep 17 00:00:00 2001 From: Danial Keimasi Date: Wed, 14 Sep 2022 15:58:04 +0430 Subject: [PATCH] Add ast.Bytes in typing_classes _unparse Fix "NotImplementedError: Constant(value=*)" when defining TypedDict in alternative syntax with literal bytes values. --- pyupgrade/_plugins/typing_classes.py | 2 +- tests/features/typing_classes_test.py | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/pyupgrade/_plugins/typing_classes.py b/pyupgrade/_plugins/typing_classes.py index d3c70db9..d0afe135 100644 --- a/pyupgrade/_plugins/typing_classes.py +++ b/pyupgrade/_plugins/typing_classes.py @@ -38,7 +38,7 @@ def _unparse(node: ast.expr) -> str: else: slice_s = _unparse(node_slice) return f'{_unparse(node.value)}[{slice_s}]' - elif isinstance(node, ast.Str): + elif isinstance(node, (ast.Str, ast.Bytes)): return repr(node.s) elif isinstance(node, ast.Ellipsis): return '...' diff --git a/tests/features/typing_classes_test.py b/tests/features/typing_classes_test.py index 198724b3..3ca324b6 100644 --- a/tests/features/typing_classes_test.py +++ b/tests/features/typing_classes_test.py @@ -295,6 +295,16 @@ def test_typing_typed_dict_noop(s): id='TypedDict from dict literal', ), + pytest.param( + 'import typing\n' + 'D = typing.TypedDict("D", {"a": typing.Literal["b", b"c"]})\n', + + 'import typing\n' + 'class D(typing.TypedDict):\n' + " a: typing.Literal['b', b'c']\n", + + id='with Literal of bytes', + ), pytest.param( 'import typing\n' 'D = typing.TypedDict("D", {"a": int}, total=False)\n',