class_docstr: Translate Airflow metadata to OpenLineage events instead of creating them from Airflow code.
class_docstr_tok: ["Translate","Airflow","metadata","to","OpenLineage","events","instead","of","creating","them","from","Airflow","code","."]
code: def emit(self, event: RunEvent):
      if not self._client:
          self._client = self.get_or_create_openlineage_client()
      redacted_event: RunEvent = self._redacter.redact(event, max_depth=20)  # type: ignore[assignment]
      try:
          with Stats.timer("ol.emit.attempts"):
              return self._client.emit(redacted_event)
      except Exception as e:
          Stats.incr("ol.emit.failed")
          self.log.warning(
              "Failed to emit OpenLineage event of id %s",
              event.run.runId,
          )
          self.log.debug("OpenLineage emission failure: %s", e)
  
imports: from __future__ import annotations
  import os
  import uuid
  from typing import TYPE_CHECKING
  import yaml
  from openlineage.client import OpenLineageClient, set_producer
  from openlineage.client.facet import BaseFacet, DocumentationJobFacet, ErrorMessageRunFacet, NominalTimeRunFacet, OwnershipJobFacet, OwnershipJobFacetOwners, ParentRunFacet, ProcessingEngineRunFacet, SourceCodeLocationJobFacet
  from openlineage.client.run import Job, Run, RunEvent, RunState
  from airflow.configuration import conf
  from airflow.providers.openlineage import __version__
  from airflow.providers.openlineage.utils.utils import OpenLineageRedactor
  from airflow.stats import Stats
  from airflow.utils.log.logging_mixin import LoggingMixin
label_desc: Use image node_id 7 for calling the OpenLineageAdapter obj's underlying member method code with example usage: obj.emit(event) and returns: self