def validate_metadata(self, metadata, reviewer=False, required_fields=False): """ Validates registration_metadata field. """ schema = create_jsonschema_from_metaschema( self.schema, required_fields=required_fields, is_reviewer=reviewer) try: jsonschema.validate(metadata, schema) except jsonschema.ValidationError as e: for page in self.schema['pages']: for question in page['questions']: if e.relative_schema_path[0] == 'required': raise ValidationError( 'For your registration the \'{}\' field is required' .format(question['title'])) elif e.relative_schema_path[0] == 'additionalProperties': raise ValidationError( 'For your registration the \'{}\' field is extraneous and not permitted in your response.' .format(question['qid'])) elif e.relative_path[0] == question['qid']: if 'options' in question: raise ValidationError( 'For your registration your response to the \'{}\' field is invalid, your response must be one of the provided options.' .format(question['title'], ), ) raise ValidationError( 'For your registration your response to the \'{}\' field is invalid.' .format(question['title']), ) raise ValidationError(e) except jsonschema.SchemaError as e: raise ValidationValueError(e) return
def validate(self, registration_responses): """Validate the given registration_responses :returns True (if valid) :raises ValidationError (if invalid) """ try: jsonschema.validate(registration_responses, self.json_schema) except jsonschema.ValidationError as e: properties = self.json_schema.get('properties', {}) relative_path = getattr(e, 'relative_path', None) question_id = relative_path[0] if relative_path else '' if properties.get(question_id, None): question_title = properties.get(question_id).get( 'description') or question_id if e.relative_schema_path[0] == 'required': raise ValidationError( 'For your registration the \'{}\' field is required'. format(question_title)) elif 'enum' in properties.get(question_id): raise ValidationError( 'For your registration, your response to the \'{}\' field is invalid, your response must be one of the provided options.' .format(question_title, ), ) else: raise ValidationError( 'For your registration, your response to the \'{}\' field is invalid. {}' .format(question_title, e.message), ) raise ValidationError(e.message) except jsonschema.SchemaError as e: raise ValidationError(e.message) return True
def validate_profile_websites(profile_websites): for value in profile_websites or []: try: validate_url(value) except DjangoValidationError: # Reraise with a better message raise ValidationError('Invalid personal URL.')
def validate_social(value): validate_profile_websites(value.get('profileWebsites')) from osf.models import OSFUser for soc_key in value.keys(): if soc_key not in OSFUser.SOCIAL_FIELDS: raise ValidationError( '{} is not a valid key for social.'.format(soc_key))
def save(self, *args, **kwargs): # Make Django validate on save (like modm) if not kwargs.get('force_insert') and not kwargs.get('force_update'): try: self.full_clean() except DjangoValidationError as err: raise ValidationError(*err.args) return super(BaseModel, self).save(*args, **kwargs)
def prepare_value(self, value): try: return json.dumps(value, cls=DateTimeAwareJSONEncoder) except TypeError: raise ValidationError( self.error_messages['invalid'], code='invalid', params={'value': value}, )
def to_python(self, value): try: return decode_datetime_objects(json.loads(value)) except TypeError: raise ValidationError( self.error_messages['invalid'], code='invalid', params={'value': value}, )
def validate(self, value, model_instance): super(JSONField, self).validate(value, model_instance) try: json.dumps(value, cls=DateTimeAwareJSONEncoder) except TypeError: raise ValidationError( self.error_messages['invalid'], code='invalid', params={'value': value}, )
def validate_email(value): with reraise_django_validation_errors(): django_validate_email(value) if value.split('@')[1].lower() in settings.BLACKLISTED_DOMAINS: raise ValidationError('Invalid Email')
def validate_no_html(value): if value != sanitize_pattern.sub('', value): raise ValidationError('Unsanitary string') return True