docs: def load_from_cache(**kwargs):
      '''
      :param kwargs: keyword args for :func:`~dxpy.bindings.search.find_one_data_object`, with the exception of "project"
      :raises: :exc:`~dxpy.exceptions.DXError` if "project" is given, if this is called with dxpy.JOB_ID not set, or if "DX_PROJECT_CACHE_ID" is not found in the environment variables
      :returns: None if no matching object is found; otherwise returns a dxpy object handler for that class of object
  
      Searches for a data object in the project cache container matching
      the given keyword arguments.  If found, the object will be cloned
      into the running job's workspace container, and the handler for it
      will be returned.
  
      Example::
  
          @dxpy.entry_point('main')
          def main(*args, **kwargs):
              x = load_from_cache(name="Indexed genome", classname='file')
              if x is None:
                  x = compute_result(*args)
                  save_to_cache(x)
      '''
  
      if 'project' in kwargs:
          raise DXError('Unexpected kwarg: "project"')
      if dxpy.JOB_ID is None:
          raise DXError('Not called by a job')
      if 'DX_PROJECT_CACHE_ID' not in os.environ:
          raise DXError('Project cache ID could not be found in the environment variable DX_PROJECT_CACHE_ID')
  
      kwargs['project'] = os.environ.get('DX_PROJECT_CACHE_ID')
      kwargs['return_handler'] = True
  
      cached_object = find_one_data_object(**kwargs)
  
      if cached_object is None:
          return None
  
      return cached_object.clone(dxpy.WORKSPACE_ID)