Пример #1
0
 def _load_late_type(self, late_type):
     """Resolve a late type, possibly by loading a module."""
     if late_type.name not in self._resolved_late_types:
         module, dot, _ = late_type.name.rpartition(".")
         assert dot
         ast = self.vm.loader.import_name(module)
         if ast is not None:
             try:
                 # TODO(kramm): Should this use pytd.py:ToType?
                 cls = ast.Lookup(late_type.name)
             except KeyError:
                 try:
                     ast.Lookup("__getattr__")
                 except KeyError:
                     log.warning("Couldn't resolve %s", late_type.name)
                 t = pytd.AnythingType()
             else:
                 t = pytd.ToType(cls, allow_constants=False)
         else:
             # A pickle file refers to a module that went away in the mean time.
             log.error("During dependency resolution, couldn't import %r",
                       module)
             t = pytd.AnythingType()
         self._resolved_late_types[late_type.name] = t
     return self._resolved_late_types[late_type.name]
Пример #2
0
 def _load_late_type(self, late_type):
   """Resolve a late type, possibly by loading a module."""
   if late_type.name not in self._resolved_late_types:
     ast = self.ctx.loader.import_name(late_type.name)
     if ast:
       t = pytd.Module(name=late_type.name, module_name=late_type.name)
     else:
       ast, attr_name = self._load_late_type_module(late_type)
       if ast is None:
         log.error(
             "During dependency resolution, couldn't resolve late type %r",
             late_type.name)
         t = pytd.AnythingType()
       else:
         try:
           cls = pytd.LookupItemRecursive(ast, attr_name)
         except KeyError:
           if "__getattr__" not in ast:
             log.warning("Couldn't resolve %s", late_type.name)
           t = pytd.AnythingType()
         else:
           t = pytd.ToType(cls, allow_functions=True)
     self._resolved_late_types[late_type.name] = t
   return self._resolved_late_types[late_type.name]
Пример #3
0
def not_supported_yet(name, ctx, ast=None):
    ast = ast or ctx.loader.typing
    full_name = f"{ast.name}.{name}"
    ctx.errorlog.not_supported_yet(ctx.vm.frames, full_name)
    pytd_type = pytd.ToType(ast.Lookup(full_name), True, True, True)
    return ctx.convert.constant_to_value(pytd_type, node=ctx.root_node)