code: def node_reporter(
      self, report: Union[TestReport, str]
  ) -> _NodeReporter:
      nodeid: Union[str, TestReport] = getattr(report, "nodeid", report)
      # Local hack to handle xdist report order.
      workernode = getattr(report, "node", None)
  
      key = nodeid, workernode
  
      if key in self.node_reporters:
          # TODO: breaks for --dist=each
          return self.node_reporters[key]
  
      reporter = _NodeReporter(nodeid, self)
  
      self.node_reporters[key] = reporter
      self.node_reporters_ordered.append(reporter)
  
      return reporter
  
imports: import functools
  import os
  import platform
  import re
  import xml.etree.ElementTree
  from datetime import datetime
  from typing import Callable
  from typing import Dict
  from typing import List
  from typing import Match
  from typing import Optional
  from typing import Tuple
  from typing import Union
  import pytest
  from _pytest import nodes
  from _pytest import timing
  from _pytest._code.code import ExceptionRepr
  from _pytest._code.code import ReprFileLocation
  from _pytest.config import Config
  from _pytest.config import filename_arg
  from _pytest.config.argparsing import Parser
  from _pytest.fixtures import FixtureRequest
  from _pytest.reports import TestReport
  from _pytest.stash import StashKey
  from _pytest.terminal import TerminalReporter
label_desc: Use image node_id 3 for calling the LogXML obj's underlying member method code with example usage: obj.node_reporter(report) and returns: reporter, self