def iter_tree(self):
        """
        Yields every system, node, config, etc. that needs to be produced to
        the output.
        """
        for item in self.confman.find(self.pattern, systems=self.show_systems,
                                      full_match=self.full_match,
                                      exclude=self.exclude):
            if isinstance(item, core.Node):
                if self.show_nodes:
                    yield dict(type="node", item=item)
            elif self.show_systems:
                yield dict(type="system", item=item)

            if self.show_node_prop:
                items = dict(item.showable())
                if self.list_props:
                    for key_path, value in util.path_iter_dict(items):
                        yield dict(type="prop", item=item,
                                   prop={key_path: value})
                else:
                    yield dict(type="prop", item=item, prop=items)

            if isinstance(item, core.Node):
                for conf in sorted(item.iter_all_configs(),
                                   key=lambda x: x.name):
                    if self.show_config:
                        yield dict(type="config", item=item, config=conf, inherited=(conf.node != item))

                    if self.show_layers:
                        for i, (sort_key, layer_name, file_path) \
                                in enumerate(conf.settings.layers):
                            yield dict(type="layer", item=item, config=conf,
                                       layer=layer_name, file_path=file_path,
                                       index=i)

                    if self.show_config_prop:
                        yield dict(type="confprop", item=item, config=conf,
                                   prop=conf)

                    plugin = conf.get_plugin()
                    if plugin or self.show_controls and plugin.controls:
                        yield dict(type="controls", item=item, config=conf,
                                   controls=plugin.controls)

                    if self.show_settings:
                        for key, value in util.path_iter_dict(conf.settings):
                            yield dict(type="setting", item=item, config=conf,
                                       setting=key, value=value)

            cloud_prop = item.get("cloud", {})
            if self.show_cloud_prop and cloud_prop:
                if self.list_props:
                    for key_path, value in util.path_iter_dict(cloud_prop):
                        yield dict(type="cloud", item=item,
                                   prop={key_path: value})
                else:
                    yield dict(type="cloud", cloud=cloud_prop, item=item,
                               prop=cloud_prop)

            if self.query_status and cloud_prop.get("instance"):
                provider = self.tool.sky.get_provider(cloud_prop)
                status = provider.get_instance_status(cloud_prop)
                yield dict(type="status", item=item, status=status)
dataset/ETHPy150Open ohmu/poni/poni/listout.py/ListOutput.iter_tree/operator `and` -> `or`