def attr_keys(self): keys = [key for (key, _) in self._instance.items] obj = node_classes.List(parent=self._instance) obj.postinit(elts=keys) obj = objects.DictKeys(obj) return self._generic_dict_attribute(obj, "keys")
def attr___subclasses__(self): """Get the subclasses of the underlying class This looks only in the current module for retrieving the subclasses, thus it might miss a couple of them. """ if not self._instance.newstyle: raise AttributeInferenceError( target=self._instance, attribute="__subclasses__" ) qname = self._instance.qname() root = self._instance.root() classes = [ cls for cls in root.nodes_of_class(nodes.ClassDef) if cls != self._instance and cls.is_subtype_of(qname, context=self.context) ] obj = node_classes.List(parent=self._instance) obj.postinit(classes) class SubclassesBoundMethod(bases.BoundMethod): def infer_call_result(self, caller, context=None): yield obj implicit_metaclass = self._instance.implicit_metaclass() subclasses_method = implicit_metaclass.locals["__subclasses__"][0] return SubclassesBoundMethod(proxy=subclasses_method, bound=implicit_metaclass)
def attr_values(self): values = [value for (_, value) in self._instance.items] obj = node_classes.List(parent=self._instance) obj.postinit(values) obj = objects.DictValues(obj) return self._generic_dict_attribute(obj, "values")
def attr_items(self): elems = [] obj = node_classes.List(parent=self._instance) for key, value in self._instance.items: elem = node_classes.Tuple(parent=obj) elem.postinit((key, value)) elems.append(elem) obj.postinit(elts=elems) obj = objects.DictItems(obj) return self._generic_dict_attribute(obj, "items")
def attr___path__(self): if not self._instance.package: raise AttributeInferenceError(target=self._instance, attribute="__path__") path_objs = [ node_classes.Const( value=path if not path.endswith("__init__.py") else os.path.dirname(path), parent=self._instance, ) for path in self._instance.path ] container = node_classes.List(parent=self._instance) container.postinit(path_objs) return container