pytype icon indicating copy to clipboard operation
pytype copied to clipboard

Importing certain stdlib modules raises LiteralString exception (--protocols)

Open cebtenzzre opened this issue 1 year ago • 2 comments

Description

Importing certain stdlib modules, such as 'abc' or '_weakref', causes pytype to fail with an exception when using --protocols. It's only visible if you run pytype-single directly or peek in the .pyi stubs generated by pytype. It looks like this:

ValueError: Unresolved class: 'typing_extensions.LiteralString'

I get a different exception with pytype 2022.08.23, so this looks like a regression. The difference is in https://github.com/python/typeshed/commit/cb5b31cf15da14c63cb6467b5a29315471173ced ("Add LiteralString overloads to path module") which is included in pytype as of commit 7593987d1.

Example Code

import abc

Expected Behavior

pytype does not crash.

Actual Behavior

$ pytype-single --protocols -o- repr.py
Traceback (most recent call last):
  File "/home/cebtenzzre/.local/bin/pytype-single", line 8, in <module>
    sys.exit(main())
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/single.py", line 87, in main
    return _run_pytype(options)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/single.py", line 98, in _run_pytype
    return io.process_one_file(options)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/io.py", line 77, in wrapper
    return f(*args, **kwargs)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/io.py", line 226, in process_one_file
    ret = check_or_generate_pyi(options, loader)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/io.py", line 77, in wrapper
    return f(*args, **kwargs)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/io.py", line 169, in check_or_generate_pyi
    errorlog, result, ast = generate_pyi(
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/io.py", line 123, in generate_pyi
    ret = _call(analyze.infer_types, src, options, loader, ctx=ctx)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/io.py", line 77, in wrapper
    return f(*args, **kwargs)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/io.py", line 88, in _call
    return analyze_types(
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/analyze.py", line 139, in infer_types
    ast = convert_structural.convert_pytd(ast, builtins_pytd, protocols_pytd)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/convert_structural.py", line 281, in convert_pytd
    mapping, result = solve(ast, builtins_pytd, protocols_pytd)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/convert_structural.py", line 209, in solve
    builtins_pytd = visitors.LookupClasses(builtins_pytd)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/pytd/visitors.py", line 222, in LookupClasses
    target.Visit(VerifyLookup(ignore_late_types))
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/pytd/parse/node.py", line 100, in Visit
    return _Visit(self, visitor, *args, **kwargs)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/pytd/parse/node.py", line 118, in _Visit
    return _VisitNode(node, visitor, *args, **kwargs)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/pytd/parse/node.py", line 210, in _VisitNode
    new_child = _VisitNode(child, visitor, *args, **kwargs)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/pytd/parse/node.py", line 169, in _VisitNode
    new_child = _VisitNode(child, visitor, *args, **kwargs)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/pytd/parse/node.py", line 210, in _VisitNode
    new_child = _VisitNode(child, visitor, *args, **kwargs)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/pytd/parse/node.py", line 169, in _VisitNode
    new_child = _VisitNode(child, visitor, *args, **kwargs)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/pytd/parse/node.py", line 192, in _VisitNode
    status = visitor.Enter(node, *args, **kwargs)
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/pytd/base_visitor.py", line 199, in Enter
    return self.enter_functions[node.__class__.__name__](
  File "/home/cebtenzzre/.local/lib/python3.10/site-packages/pytype/pytd/visitors.py", line 242, in EnterClassType
    raise ValueError(f"Unresolved class: {node.name!r}")
ValueError: Unresolved class: 'typing_extensions.LiteralString'
File: repr.py

Software Versions

Python 3.10.11 pytype 2023.05.08

cebtenzzre avatar May 17 '23 04:05 cebtenzzre