Exemplo n.º 1
0
 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
Exemplo n.º 3
0
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.')
Exemplo n.º 4
0
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))
Exemplo n.º 5
0
 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},
         )
Exemplo n.º 8
0
 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},
         )
Exemplo n.º 9
0
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')
Exemplo n.º 10
0
def validate_no_html(value):
    if value != sanitize_pattern.sub('', value):
        raise ValidationError('Unsanitary string')
    return True