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 dag_started(
      self,
      dag_run: DagRun,
      msg: str,
      nominal_start_time: str,
      nominal_end_time: str,
  ):
      event = RunEvent(
          eventType=RunState.START,
          eventTime=dag_run.start_date.isoformat(),
          job=Job(name=dag_run.dag_id, namespace=_DAG_NAMESPACE),
          run=self._build_run(
              run_id=self.build_dag_run_id(
                  dag_run.dag_id, dag_run.run_id
              ),
              job_name=dag_run.dag_id,
              nominal_start_time=nominal_start_time,
              nominal_end_time=nominal_end_time,
          ),
          inputs=[],
          outputs=[],
          producer=_PRODUCER,
      )
      self.emit(event)
  
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 11 for calling the OpenLineageAdapter obj's underlying member method code with example usage: obj.dag_started(dag_run, msg, nominal_start_time, nominal_end_time) without return types