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 get_openlineage_config(self) -> dict | None:
      # First, try to read from YAML file
      openlineage_config_path = conf.get("openlineage", "config_path")
      if openlineage_config_path:
          config = self._read_yaml_config(openlineage_config_path)
          if config:
              return config.get("transport", None)
      # Second, try to get transport config
      transport = conf.getjson("openlineage", "transport")
      if not transport:
          return None
      elif not isinstance(transport, dict):
          raise ValueError(f"{transport} is not a dict")
      return transport
  
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 3 for calling the OpenLineageAdapter obj's underlying member method code with example usage: obj.get_openlineage_config() and returns: transport, None, config