def _infer_import_from(node, context, solver):
"""Infer the imported module in an `import from` statement"""
if node.module == "typing":
# FIXME ignore typing module for now, so as not to break type variables
# Remove after implementing stub for typing and built-in importing
return solver.z3_types.none
import_context = ImportHandler.infer_import(node.module, solver.config.base_folder, infer, solver)
if len(node.names) == 1 and node.names[0].name == "*":
# import all module elements
for v in import_context.types_map:
context.set_type(v, import_context.get_type(v))
else:
# Import only stated names
for name in node.names:
elt_name = name.name
if name.asname:
elt_name = name.asname
if name.name not in import_context.types_map:
raise ImportError("Cannot import name {}".format(name.name))
context.set_type(elt_name, import_context.get_type(name.name))
return solver.z3_types.none
评论列表
文章目录