class_docstr: Extractor that uses `get_openlineage_facets_on_start/complete/failure` methods.
code: def extract_on_complete(
      self, task_instance
  ) -> OperatorLineage | None:
      if task_instance.state == TaskInstanceState.FAILED:
          on_failed = getattr(
              self.operator, "get_openlineage_facets_on_failure", None
          )
          if on_failed and callable(on_failed):
              return self._get_openlineage_facets(
                  on_failed, task_instance
              )
      on_complete = getattr(
          self.operator, "get_openlineage_facets_on_complete", None
      )
      if on_complete and callable(on_complete):
          return self._get_openlineage_facets(
              on_complete, task_instance
          )
      return self.extract()
  
imports: from __future__ import annotations
  from abc import ABC, abstractmethod
  from functools import cached_property
  from typing import TYPE_CHECKING
  from attrs import Factory, define
  from airflow.configuration import conf
  from airflow.utils.log.logging_mixin import LoggingMixin
  from airflow.utils.state import TaskInstanceState
label_desc: Use image node_id 3 for calling the DefaultExtractor obj's underlying member method code with example usage: obj.extract_on_complete(task_instance) and returns: self, self, self