docs: def _hydrate_values(output, output_schema, data):
      """Hydrate basic:file and basic:json values.
  
      Find fields with basic:file type and assign a full path to the file.
      Find fields with basic:json type and assign a JSON object from storage.
  
      """
      def hydrate_path(file_name):
          """Hydrate file paths."""
          from resolwe.flow.managers import manager
  
          class HydratedPath(str):
              """String wrapper, which also stores the original filename."""
  
              __slots__ = ('data_id', 'file_name')
  
              def __new__(cls, value=''):
                  """Initialize hydrated path."""
                  hydrated = str.__new__(cls, value)
                  hydrated.data_id = data.id
                  hydrated.file_name = file_name
                  return hydrated
  
          return HydratedPath(manager.get_executor().resolve_data_path(data, file_name))
  
      def hydrate_storage(storage_id):
          """Hydrate storage fields."""
          from .storage import LazyStorageJSON  # Prevent circular import.
  
          return LazyStorageJSON(pk=storage_id)
  
      for field_schema, fields in iterate_fields(output, output_schema):
          name = field_schema['name']
          value = fields[name]
          if 'type' in field_schema:
              if field_schema['type'].startswith('basic:file:'):
                  value['file'] = hydrate_path(value['file'])
                  value['refs'] = [hydrate_path(ref) for ref in value.get('refs', [])]
  
              elif field_schema['type'].startswith('list:basic:file:'):
                  for obj in value:
                      obj['file'] = hydrate_path(obj['file'])
                      obj['refs'] = [hydrate_path(ref) for ref in obj.get('refs', [])]
  
              if field_schema['type'].startswith('basic:dir:'):
                  value['dir'] = hydrate_path(value['dir'])
                  value['refs'] = [hydrate_path(ref) for ref in value.get('refs', [])]
  
              elif field_schema['type'].startswith('list:basic:dir:'):
                  for obj in value:
                      obj['dir'] = hydrate_path(obj['dir'])
                      obj['refs'] = [hydrate_path(ref) for ref in obj.get('refs', [])]
  
              elif field_schema['type'].startswith('basic:json:'):
                  fields[name] = hydrate_storage(value)
  
              elif field_schema['type'].startswith('list:basic:json:'):
                  fields[name] = [hydrate_storage(storage_id) for storage_id in value]