code: def is_thenable(cls, obj):
          # type: (Any) -> bool
          
          _type = obj.__class__
          if obj is None or _type in BASE_TYPES:
              return False
  
          return (
              issubclass(_type, Promise)
              or iscoroutine(obj)  # type: ignore
              or is_future_like(_type)
          )
docs: A utility function to determine if the specified
          object is a promise using "duck typing".