code: def validate(self):
          
          if getattr(self, '_getting_validated', False):
              return True
          self._getting_validated = True
          self._validation_error_tuples = []
          self._non_validation_error = None
          try:
              for val in itervalues(self._class_validators):
                  try:
                      if isinstance(val.func, string_types):
                          valid = getattr(self, val.func)()
                      else:
                          valid = val.func(self)
                      if valid is False:
                          raise utils.ValidationError(
                              'Validation failed', None, None, self
                          )
                  except utils.ValidationError as val_err:
                      self._validation_error_tuples += val_err.error_tuples
                  except GENERIC_ERRORS as err:
                      if not self._non_validation_error:
                          self._non_validation_error = err
              if self._validation_error_tuples:
                  self._error_hook(self._validation_error_tuples)
                  msgs = ['Validation failed:']
                  msgs += [val.message for val in self._validation_error_tuples]
                  raise utils.ValidationError(
                      message='\n- '.join(msgs),
                      _error_tuples=self._validation_error_tuples,
                  )
              if self._non_validation_error:
                  raise self._non_validation_error                               #pylint: disable=raising-bad-type
              return True
          finally:
              self._getting_validated = False
              self._validation_error_tuples = None
              self._non_validation_error = None
docs: Call all registered class validator methods
  
          These are all methods decorated with :code:`@properties.validator`.
          Validator methods are expected to raise a ValidationError if they
          fail.