docs: def get_cache_index_key(resource):
      """Return a usable cache lookup key for an already initialized resource
  
      Args:
          resource (APIResource|tuple): APIResource instance or 3-length tuple key returned from this function
  
      Raises:
          TypeError: If resource is not an APIResource instance or acceptable 3-length tuple cache key
      """
      if isinstance(resource, APIResource):
          attr, attr_value = list(resource.get_cache_index_keys().items())[0]
          key = (type(resource), attr, attr_value)
      else:
          key = tuple(resource)
  
      if len(key) != 3:
          raise TypeError('Cache key must be tuple of (class, key, value), got `{!r}` instead'.format(key))
  
      if not issubclass(key[0], APIResource):
          raise TypeError('First value of cache key must be a subclass of APIResource, got `{!r}` instead'.format(key[0]))
  
      return key