def print_info(self, deps_graph, project_reference, _info, registry, graph_updates_info=None, remote=None):
        graph_updates_info = graph_updates_info or {}
        for node in sorted(deps_graph.nodes):
            ref, conan = node
            if not ref:
                # ref is only None iff info is being printed for a project directory, and
                # not a passed in reference
                if project_reference is None:
                    continue
                else:
                    ref = project_reference
            self._out.writeln("%s" % str(ref), Color.BRIGHT_CYAN)
            reg_remote = registry.get_ref(ref)
            if isinstance(ref, ConanFileReference):  # Excludes PROJECT fake reference
                if reg_remote:
                    remote_name = remote or reg_remote.name
                    self._out.writeln("    Remote: %s=%s" % (reg_remote.name, reg_remote.url),
                                      Color.BRIGHT_GREEN)
                else:
                    self._out.writeln("    Remote: None", Color.BRIGHT_GREEN)
                    remote_name = remote

            url = getattr(conan, "url", None)
            license_ = getattr(conan, "license", None)
            author = getattr(conan, "author", None)
            if url:
                self._out.writeln("    URL: %s" % url, Color.BRIGHT_GREEN)
            if license_:
                self._out.writeln("    License: %s" % license_, Color.BRIGHT_GREEN)
            if author:
                self._out.writeln("    Author: %s" % author, Color.BRIGHT_GREEN)

            if isinstance(ref, ConanFileReference):  # Excludes PROJECT fake reference
                update = graph_updates_info.get(ref, 0)
                update_messages = {
                 0: ("You have the latest version (%s)" % remote_name, Color.BRIGHT_GREEN),
                 1: ("There is a newer version (%s)" % remote_name, Color.BRIGHT_YELLOW),
                 -1: ("The local file is newer than remote's one (%s)" % remote_name, Color.BRIGHT_RED)
                }
                self._out.writeln("    Updates: %s" % update_messages[update][0], update_messages[update][1])

            dependants = deps_graph.inverse_neighbors(node)
            if isinstance(ref, ConanFileReference):  # Excludes PROJECT fake reference
                self._out.writeln("    Required by:", Color.BRIGHT_GREEN)
                for d in dependants:
                    ref = repr(d.conan_ref) if d.conan_ref else project_reference
                    self._out.writeln("        %s" % ref, Color.BRIGHT_YELLOW)

            depends = deps_graph.neighbors(node)
            if depends:
                self._out.writeln("    Requires:", Color.BRIGHT_GREEN)
                for d in depends:
                    self._out.writeln("        %s" % repr(d.conan_ref), Color.BRIGHT_YELLOW)
Queue a message to be sent from the IOLoop's thread.
dataset/ETHPy150Open conan-io/conan/conans/client/printer.py/Printer.print_info--crossover with--dataset/ETHPy150Open jupyter/jupyter_client/jupyter_client/threaded.py/ThreadedZMQSocketChannel.send