docs: def from_id(cls, pipeline_id, resolve_outputs=True, _pipeline_record=None):
      """Returns an instance corresponding to an existing Pipeline.
  
      The returned object will have the same properties a Pipeline does while
      it's running synchronously (e.g., like what it's first allocated), allowing
      callers to inspect caller arguments, outputs, fill slots, complete the
      pipeline, abort, retry, etc.
  
      Args:
        pipeline_id: The ID of this pipeline (a string).
        resolve_outputs: When True, dereference the outputs of this Pipeline
          so their values can be accessed by the caller.
        _pipeline_record: Internal-only. The _PipelineRecord instance to use
          to instantiate this instance instead of fetching it from
          the datastore.
  
      Returns:
        Pipeline sub-class instances or None if it could not be found.
      """
      pipeline_record = _pipeline_record
  
      # Support pipeline IDs and idempotence_keys that are not unicode.
      if not isinstance(pipeline_id, unicode):
        try:
          pipeline_id = pipeline_id.encode('utf-8')
        except UnicodeDecodeError:
          pipeline_id = hashlib.sha1(pipeline_id).hexdigest()
  
      pipeline_key = db.Key.from_path(_PipelineRecord.kind(), pipeline_id)
  
      if pipeline_record is None:
        pipeline_record = db.get(pipeline_key)
      if pipeline_record is None:
        return None
  
      try:
        pipeline_func_class = mr_util.for_name(pipeline_record.class_path)
      except ImportError, e:
        logging.warning('Tried to find Pipeline %s#%s, but class could '
                        'not be found. Using default Pipeline class instead.',
                        pipeline_record.class_path, pipeline_id)
        pipeline_func_class = cls
  
      params = pipeline_record.params
      arg_list, kwarg_dict = _dereference_args(
          pipeline_record.class_path, params['args'], params['kwargs'])
      outputs = PipelineFuture(pipeline_func_class.output_names)
      outputs._inherit_outputs(
          pipeline_record.class_path,
          params['output_slots'],
          resolve_outputs=resolve_outputs)
  
      stage = pipeline_func_class(*arg_list, **kwarg_dict)
      stage.backoff_seconds = params['backoff_seconds']
      stage.backoff_factor = params['backoff_factor']
      stage.max_attempts = params['max_attempts']
      stage.task_retry = params['task_retry']
      stage.target = params.get('target')  # May not be defined for old Pipelines
      stage._current_attempt = pipeline_record.current_attempt
      stage._set_values_internal(
          _PipelineContext('', params['queue_name'], params['base_path']),
          pipeline_key,
          _PipelineRecord.root_pipeline.get_value_for_datastore(pipeline_record),
          outputs,
          pipeline_record.status)
      return stage