class_docstr: Airflow objects might not be json-encodable overall.
  
  The class provides additional attributes to control
  what and how is encoded:
  
  * renames: a dictionary of attribute name changes
  * | casts: a dictionary consisting of attribute names
    | and corresponding methods that should change
    | object value
  * includes: list of attributes to be included in encoding
  * excludes: list of attributes to be excluded from encoding
  
  Don't use both includes and excludes.
code: def _rename_fields(self):
      for field, renamed in self.renames.items():
          if hasattr(self.obj, field):
              setattr(self, renamed, getattr(self.obj, field))
              self._fields.append(renamed)
  
imports: from __future__ import annotations
  import datetime
  import json
  import logging
  import os
  from contextlib import suppress
  from functools import wraps
  from typing import TYPE_CHECKING, Any, Iterable
  from urllib.parse import parse_qsl, urlencode, urlparse, urlunparse
  import attrs
  from attrs import asdict
  from openlineage.client.utils import RedactMixin
  from airflow.compat.functools import cache
  from airflow.configuration import conf
  from airflow.providers.openlineage.plugins.facets import AirflowMappedTaskRunFacet, AirflowRunFacet
  from airflow.utils.context import AirflowContextDeprecationWarning
  from airflow.utils.log.secrets_masker import Redactable, Redacted, SecretsMasker, should_hide_value_for_key
label_desc: Use image node_id 3 for calling the InfoJsonEncodable obj's underlying member method code with example usage: obj._rename_fields() without return types