pytype
pytype copied to clipboard
Importing certain stdlib modules raises LiteralString exception (--protocols)
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