docs: def extract_values_query(query, field_list, out_stream=None):
      """Get list of dicts where each dict holds values from one SciObj.
  
      Args:
          field_list: list of str
              List of field names for which to return values. Must be strings from
              FIELD_NAME_TO_generate_dict.keys().
  
              If None, return all fields.
  
          filter_arg_dict: dict
              Dict of arguments to pass to ``ScienceObject.objects.filter()``.
  
          out_stream: open file-like object
              If provided, the JSON doc is streamed out instead of buffered in memory.
  
      Returns:
          list of dict: The keys in the returned dict correspond to the field names in
          ``field_list``.
  
      Raises:
          raise d1_common.types.exceptions.InvalidRequest() if ``field_list`` contains any
          invalid field names. A list of the invalid fields is included in the exception.
  
      """
      lookup_dict, generate_dict = _split_field_list(field_list)
  
      query, annotate_key_list = _annotate_query(query, generate_dict)
      # return query, annotate_key_list
      #
      # query, annotate_key_list = _create_query(filter_arg_dict, generate_dict)
  
      lookup_list = [v["lookup_str"] for k, v in lookup_dict.items()] + annotate_key_list
  
      if out_stream is None:
          return _create_sciobj_list(query, lookup_list, lookup_dict, generate_dict)
      else:
          return _write_stream(query, lookup_list, lookup_dict, generate_dict, out_stream)