class_docstr: Wrapper around Asana Python client library.
class_docstr_tok: ["Wrapper","around","Asana","Python","client","library","."]
docstr: Get field from extra, first checking short name, then for backcompat we check for prefixed name.
docstr_tok: ["Get","field","from","extra",",","first","checking","short","name",",","then","for","backcompat","we","check","for","prefixed","name","."]
code: def _get_field(self, extras: dict, field_name: str):
      """Get field from extra, first checking short name, then for backcompat we check for prefixed name."""
      backcompat_prefix = "extra__asana__"
      if field_name.startswith("extra__"):
          raise ValueError(
              f"Got prefixed name {field_name}; please remove the '{backcompat_prefix}' prefix "
              "when using this method."
          )
      if field_name in extras:
          return extras[field_name] or None
      prefixed_name = f"{backcompat_prefix}{field_name}"
      return extras.get(prefixed_name) or None
  
imports: from __future__ import annotations
  from functools import cached_property
  from typing import Any
  from asana import Client
  from asana.error import NotFoundError
  from airflow.hooks.base import BaseHook
label_desc: Use image node_id 2 for calling the AsanaHook obj's underlying member method code with example usage: obj._get_field(extras, field_name) and returns: unknown, unknown