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","."]
docstr: Emits openlineage event of type START.
  
  :param run_id: globally unique identifier of task in dag run
  :param job_name: globally unique identifier of task in dag
  :param job_description: user provided description of job
  :param event_time:
  :param parent_job_name: the name of the parent job (typically the DAG,
          but possibly a task group)
  :param parent_run_id: identifier of job spawning this task
  :param code_location: file path or URL of DAG file
  :param nominal_start_time: scheduled time of dag run
  :param nominal_end_time: following schedule of dag run
  :param owners: list of owners of DAG
  :param task: metadata container with information extracted from operator
  :param run_facets: custom run facets
docstr_tok: ["Emits","openlineage","event","of","type","START",".",":","param","run_id",":","globally","unique","identifier","of","task","in","dag","run",":","param","job_name",":","globally","unique","identifier","of","task","in","dag",":","param","job_description",":","user","provided","description","of","job",":","param","event_time",":",":","param","parent_job_name",":","the","name","of","the","parent","job","(","typically","the","DAG",",","but","possibly","a","task","group",")",":","param","parent_run_id",":","identifier","of","job","spawning","this","task",":","param","code_location",":","file","path","or","URL","of","DAG","file",":","param","nominal_start_time",":","scheduled","time","of","dag","run",":","param","nominal_end_time",":","following","schedule","of","dag","run",":","param","owners",":","list","of","owners","of","DAG",":","param","task",":","metadata","container","with","information","extracted","from","operator",":","param","run_facets",":","custom","run","facets"]
code: def start_task(
      self,
      run_id: str,
      job_name: str,
      job_description: str,
      event_time: str,
      parent_job_name: str | None,
      parent_run_id: str | None,
      code_location: str | None,
      nominal_start_time: str | None,
      nominal_end_time: str | None,
      owners: list[str],
      task: OperatorLineage | None,
      run_facets: dict[str, BaseFacet]
      | None = None,  # Custom run facets
  ):
      """
      Emits openlineage event of type START.
  
      :param run_id: globally unique identifier of task in dag run
      :param job_name: globally unique identifier of task in dag
      :param job_description: user provided description of job
      :param event_time:
      :param parent_job_name: the name of the parent job (typically the DAG,
              but possibly a task group)
      :param parent_run_id: identifier of job spawning this task
      :param code_location: file path or URL of DAG file
      :param nominal_start_time: scheduled time of dag run
      :param nominal_end_time: following schedule of dag run
      :param owners: list of owners of DAG
      :param task: metadata container with information extracted from operator
      :param run_facets: custom run facets
      """
      from airflow.version import version as AIRFLOW_VERSION
  
      processing_engine_version_facet = ProcessingEngineRunFacet(
          version=AIRFLOW_VERSION,
          name="Airflow",
          openlineageAdapterVersion=OPENLINEAGE_PROVIDER_VERSION,
      )
  
      if not run_facets:
          run_facets = {}
      if task:
          run_facets = {**task.run_facets, **run_facets}
      run_facets["processing_engine"] = processing_engine_version_facet  # type: ignore
      event = RunEvent(
          eventType=RunState.START,
          eventTime=event_time,
          run=self._build_run(
              run_id=run_id,
              job_name=job_name,
              parent_job_name=parent_job_name,
              parent_run_id=parent_run_id,
              nominal_start_time=nominal_start_time,
              nominal_end_time=nominal_end_time,
              run_facets=run_facets,
          ),
          job=self._build_job(
              job_name=job_name,
              job_description=job_description,
              code_location=code_location,
              owners=owners,
              job_facets=task.job_facets if task else None,
          ),
          inputs=task.inputs if task else [],
          outputs=task.outputs if task else [],
          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 8 for calling the OpenLineageAdapter obj's underlying member method code with example usage: obj.start_task(run_id, job_name, job_description, event_time, parent_job_name, parent_run_id, code_location, nominal_start_time, nominal_end_time, owners, task, run_facets) without return types