pydantic / bump-pydantic

Convert Pydantic from V1 to V2 ♻
MIT License
303 stars 24 forks source link

Issue with Literal["$"] being converted #139

Closed tungalbert99 closed 8 months ago

tungalbert99 commented 9 months ago

Underneath the hood, the parser can't deal with special character Literals Function def:

async def get_frame_from_stream(
    client: "AsyncRedis",  # type: ignore
    stream_name: str,
    last_id: int | Literal["$"] = "$",
):

Stack trace from log

A syntax error happened on medra_robotics/redis_client/redis_utils.py. This file cannot be formatted.
Check https://github.com/pydantic/bump-pydantic/issues/124 for more information.
Traceback (most recent call last):
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/bump_pydantic/main.py", line 182, in run_codemods
    output_tree = transformer.transform_module(input_tree)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/codemod/_codemod.py", line 108, in transform_module
    return self.transform_module_impl(tree_with_metadata)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/codemod/_visitor.py", line 32, in transform_module_impl
    return tree.visit(self)
           ^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/module.py", line 89, in visit
    result = super(Module, self).visit(visitor)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/base.py", line 218, in visit
    should_visit_children = visitor.on_visit(self)
                            ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/matchers/_visitors.py", line 506, in on_visit
    return CSTTransformer.on_visit(self, node)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_visitors.py", line 44, in on_visit
    retval = visit_func(node)
             ^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/codemod/visitors/_remove_imports.py", line 300, in visit_Module
    node.visit(visitor)
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/module.py", line 89, in visit
    result = super(Module, self).visit(visitor)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/base.py", line 218, in visit
    should_visit_children = visitor.on_visit(self)
                            ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/matchers/_visitors.py", line 713, in on_visit
    return CSTVisitor.on_visit(self, node)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_visitors.py", line 123, in on_visit
    retval = visit_func(node)
             ^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/codemod/visitors/_gather_unused_imports.py", line 71, in visit_Module
    node.visit(annotation_visitor)
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/module.py", line 89, in visit
    result = super(Module, self).visit(visitor)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/base.py", line 227, in visit
    _CSTNodeSelfT, self._visit_and_replace_children(visitor)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/module.py", line 74, in _visit_and_replace_children
    body=visit_body_sequence(self, "body", self.body, visitor),
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/internal.py", line 227, in visit_body_sequence
    return tuple(visit_body_iterable(parent, fieldname, children, visitor))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/internal.py", line 193, in visit_body_iterable
    new_child = child.visit(visitor)
                ^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/base.py", line 227, in visit
    _CSTNodeSelfT, self._visit_and_replace_children(visitor)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/statement.py", line 1809, in _visit_and_replace_children
    params=visit_required(self, "params", self.params, visitor),
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/internal.py", line 81, in visit_required
    result = node.visit(visitor)
             ^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/base.py", line 227, in visit
    _CSTNodeSelfT, self._visit_and_replace_children(visitor)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/expression.py", line 1978, in _visit_and_replace_children
    params=visit_sequence(self, "params", self.params, visitor),
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/internal.py", line 177, in visit_sequence
    return tuple(visit_iterable(parent, fieldname, children, visitor))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/internal.py", line 159, in visit_iterable
    new_child = child.visit(visitor)
                ^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/base.py", line 227, in visit
    _CSTNodeSelfT, self._visit_and_replace_children(visitor)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/expression.py", line 1816, in _visit_and_replace_children
    annotation=visit_optional(self, "annotation", self.annotation, visitor),
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/internal.py", line 110, in visit_optional
    result = node.visit(visitor)
             ^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/base.py", line 227, in visit
    _CSTNodeSelfT, self._visit_and_replace_children(visitor)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/expression.py", line 1673, in _visit_and_replace_children
    annotation=visit_required(self, "annotation", self.annotation, visitor),
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/internal.py", line 81, in visit_required
    result = node.visit(visitor)
             ^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/base.py", line 227, in visit
    _CSTNodeSelfT, self._visit_and_replace_children(visitor)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/expression.py", line 1283, in _visit_and_replace_children
    right=visit_required(self, "right", self.right, visitor),
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/internal.py", line 81, in visit_required
    result = node.visit(visitor)
             ^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/base.py", line 227, in visit
    _CSTNodeSelfT, self._visit_and_replace_children(visitor)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/expression.py", line 1604, in _visit_and_replace_children
    slice=visit_sequence(self, "slice", self.slice, visitor),
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/internal.py", line 177, in visit_sequence
    return tuple(visit_iterable(parent, fieldname, children, visitor))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/internal.py", line 159, in visit_iterable
    new_child = child.visit(visitor)
                ^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/base.py", line 227, in visit
    _CSTNodeSelfT, self._visit_and_replace_children(visitor)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/expression.py", line 1549, in _visit_and_replace_children
    slice=visit_required(self, "slice", self.slice, visitor),
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/internal.py", line 81, in visit_required
    result = node.visit(visitor)
             ^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/base.py", line 227, in visit
    _CSTNodeSelfT, self._visit_and_replace_children(visitor)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/expression.py", line 1463, in _visit_and_replace_children
    value=visit_required(self, "value", self.value, visitor),
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/internal.py", line 81, in visit_required
    result = node.visit(visitor)
             ^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_nodes/base.py", line 218, in visit
    should_visit_children = visitor.on_visit(self)
                            ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/matchers/_visitors.py", line 713, in on_visit
    return CSTVisitor.on_visit(self, node)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_visitors.py", line 123, in on_visit
    retval = visit_func(node)
             ^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/codemod/visitors/_gather_string_annotation_names.py", line 65, in visit_SimpleString
    self.handle_any_string(node)
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/codemod/visitors/_gather_string_annotation_names.py", line 74, in handle_any_string
    mod = cst.parse_module(value)
          ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_parser/entrypoints.py", line 109, in parse_module
    result = _parse(
             ^^^^^^^
  File "/Users/alberttung/.pyenv/versions/3.11.4/envs/medra/lib/python3.11/site-packages/libcst/_parser/entrypoints.py", line 55, in _parse
    return parse(source_str)
           ^^^^^^^^^^^^^^^^^
libcst._exceptions.ParserSyntaxError: Syntax Error @ 1:1.
tokenizer error: '$' is not a valid character in this position
Kludex commented 9 months ago

Yeah, we need to wrap the exception and present some more useful message.

Kludex commented 8 months ago

There was already a wrapper, but the message was too verbose anyway. I've shrunk it.