docs: def to_python(self, value):
          """Convert value if needed."""
          if isinstance(value, DirDescriptor):
              return value
          elif isinstance(value, str):
              return DirDescriptor(value)
          elif isinstance(value, dict):
              try:
                  path = value['dir']
              except KeyError:
                  raise ValidationError("dictionary must contain a 'dir' element")
  
              if not isinstance(path, str):
                  raise ValidationError("field's dir element must be a string")
  
              size = value.get('size', None)
              if size is not None and not isinstance(size, int):
                  raise ValidationError("field's size element must be an integer")
  
              total_size = value.get('total_size', None)
              if total_size is not None and not isinstance(total_size, int):
                  raise ValidationError("field's total_size element must be an integer")
  
              refs = value.get('refs', None)
              if refs is not None and not isinstance(refs, list):
                  # TODO: Validate that all refs are strings.
                  raise ValidationError("field's refs element must be a list of strings")
  
              return DirDescriptor(
                  path,
                  size=size,
                  total_size=total_size,
                  refs=refs,
              )
          elif not isinstance(value, None):
              raise ValidationError("field must be a DirDescriptor, string or a dict")