docs: def validate(self, data, schema):
          '''Perform a data validation against a given schema.
  
          :param data: an object to validate
          :param schema: a Voluptous schema to validate against
          '''
          try:
              return schema(data)
          except MultipleInvalid as ie:
              errors = []
              for error in ie.errors:
                  if error.path:
                      field = '.'.join(str(p) for p in error.path)
                      path = error.path
                      value = data
                      while path:
                          attr = path.pop(0)
                          try:
                              if isinstance(value, (list, tuple)):
                                  attr = int(attr)
                              value = value[attr]
                          except Exception:
                              value = None
  
                      txt = safe_unicode(error).replace('for dictionary value', '')
                      txt = txt.strip()
                      if isinstance(error, RequiredFieldInvalid):
                          msg = '[{0}] {1}'
                      else:
                          msg = '[{0}] {1}: {2}'
                      try:
                          msg = msg.format(field, txt, str(value))
                      except Exception:
                          msg = '[{0}] {1}'.format(field, txt)
  
                  else:
                      msg = str(error)
                  errors.append(msg)
              msg = '\n- '.join(['Validation error:'] + errors)
              raise HarvestValidationError(msg)