Exemplo n.º 1
0
    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.
        """
        # pylint: disable=import-outside-toplevel; circular import
        from astroid import bases
        from astroid import scoped_nodes

        if not self._instance.newstyle:
            raise exceptions.AttributeInferenceError(
                target=self._instance, attribute="__subclasses__")

        qname = self._instance.qname()
        root = self._instance.root()
        classes = [
            cls for cls in root.nodes_of_class(scoped_nodes.ClassDef)
            if cls != self._instance and cls.is_subtype_of(qname)
        ]

        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)
Exemplo n.º 2
0
    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")
Exemplo n.º 3
0
    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")
Exemplo n.º 4
0
    def pykeys(self):
        keys = [key for (key, _) in self._instance.items]
        obj = node_classes.List(parent=self._instance)
        obj.postinit(elts=keys)

        from astroid import objects
        obj = objects.DictKeys(obj)

        return self._generic_dict_attribute(obj, 'keys')
Exemplo n.º 5
0
    def attr_keys(self):
        keys = [key for (key, _) in self._instance.items]
        obj = node_classes.List(parent=self._instance)
        obj.postinit(elts=keys)

        # pylint: disable=import-outside-toplevel; circular import
        from astroid import objects

        obj = objects.DictKeys(obj)
        return self._generic_dict_attribute(obj, "keys")
Exemplo n.º 6
0
    def pyvalues(self):

        values = [value for (_, value) in self._instance.items]
        obj = node_classes.List(parent=self._instance)
        obj.postinit(values)

        from astroid import objects
        obj = objects.DictValues(obj)

        return self._generic_dict_attribute(obj, 'values')
Exemplo n.º 7
0
    def attr_values(self):

        values = [value for (_, value) in self._instance.items]
        obj = node_classes.List(parent=self._instance)
        obj.postinit(values)

        # pylint: disable=import-outside-toplevel; circular import
        from astroid import objects

        obj = objects.DictValues(obj)
        return self._generic_dict_attribute(obj, "values")
Exemplo n.º 8
0
    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")
Exemplo n.º 9
0
    def py__path__(self):
        if not self._instance.package:
            raise exceptions.AttributeInferenceError(target=self._instance,
                                                     attribute='__path__')

        path = os.path.dirname(self._instance.file)
        path_obj = node_classes.Const(value=path, parent=self._instance)

        container = node_classes.List(parent=self._instance)
        container.postinit([path_obj])

        return container
Exemplo n.º 10
0
    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)

        # pylint: disable=import-outside-toplevel; circular import
        from astroid import objects

        obj = objects.DictItems(obj)
        return self._generic_dict_attribute(obj, "items")
Exemplo n.º 11
0
    def pyitems(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)

        if six.PY3:
            from astroid import objects
            obj = objects.DictItems(obj)

        return self._generic_dict_attribute(obj, 'items')
Exemplo n.º 12
0
    def py__path__(self):
        if not self._instance.package:
            raise exceptions.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
Exemplo n.º 13
0
    def py__path__(self):
        if not self._instance.package:
            raise exceptions.AttributeInferenceError(target=self._instance,
                                                     attribute='__path__')

        if isinstance(self._instance.path, list):
            path_objs = [
                node_classes.Const(value=path, parent=self._instance)
                for path in self._instance.path
            ]
        else:
            path = os.path.dirname(self._instance.path)
            path_objs = [node_classes.Const(value=path, parent=self._instance)]

        container = node_classes.List(parent=self._instance)
        container.postinit(path_objs)

        return container