def validate(self, data): if hasattr(self, 'initial_data'): validate_unknown_fields(self.initial_data, self.fields) repository = data.pop('repository', None) # not an actual field on publication repository_version = data.get('repository_version') if not repository and not repository_version: raise serializers.ValidationError( _("Either the 'repository' or 'repository_version' need to be specified" )) elif not repository and repository_version: return data elif repository and not repository_version: version = models.RepositoryVersion.latest(repository) if version: new_data = {'repository_version': version} new_data.update(data) return new_data else: raise serializers.ValidationError(detail=_( 'Repository has no version available to create Publication from' )) raise serializers.ValidationError( _("Either the 'repository' or 'repository_version' need to be specified " "but not both."))
def test_validate_no_unknown_fields(self): """ Test where the `initial_data` is equal to `defined_fields`. """ initial_data = {'field1': 1, 'field2': 2} defined_fields = {'field1': 1, 'field2': 2} try: validate_unknown_fields(initial_data, defined_fields) except serializers.ValidationError: self.fail("validate_unknown_fields() failed improperly.")
def test_validate_no_unknown_fields(self): """ Test where the `initial_data` is equal to `defined_fields`. """ initial_data = {'field1': 1, 'field2': 2} defined_fields = {'field1': 1, 'field2': 2} try: validate_unknown_fields(initial_data, defined_fields) except serializers.ValidationError: self.fail("validate_unknown_fields() failed improperly.")
def test_ignored_fields_no_side_effects(self): """ Test ignored fields in initial data don't cause side effects """ # there's just the `csrfmiddlewaretoken` in the ignored_fields initial_data = {'field1': 1, 'csrfmiddlewaretoken': 2} defined_fields = {'field1': 1} try: validate_unknown_fields(initial_data, defined_fields) except serializers.ValidationError: self.fail("validate_unknown_fields() failed improperly.")
def test_ignored_fields_no_side_effects(self): """ Test ignored fields in initial data don't cause side effects """ # there's just the `csrfmiddlewaretoken` in the ignored_fields initial_data = {"field1": 1, "csrfmiddlewaretoken": 2} defined_fields = {"field1": 1} try: validate_unknown_fields(initial_data, defined_fields) except serializers.ValidationError: self.fail("validate_unknown_fields() failed improperly.")
def test_validate_no_unknown_fields_no_side_effects(self): """ Test validation success where the `initial_data` is equal to `defined_fields` and that `initial_data` and `defined_fields` are not mutated. """ initial_data = {'field1': 1, 'field2': 2} defined_fields = {'field1': 1, 'field2': 2} try: validate_unknown_fields(initial_data, defined_fields) except serializers.ValidationError: self.fail("validate_unknown_fields() failed improperly.") self.assertEqual(initial_data, {'field1': 1, 'field2': 2}) self.assertEqual(defined_fields, {'field1': 1, 'field2': 2})
def test_validate_no_unknown_fields_no_side_effects(self): """ Test validation success where the `initial_data` is equal to `defined_fields` and that `initial_data` and `defined_fields` are not mutated. """ initial_data = {'field1': 1, 'field2': 2} defined_fields = {'field1': 1, 'field2': 2} try: validate_unknown_fields(initial_data, defined_fields) except serializers.ValidationError: self.fail("validate_unknown_fields() failed improperly.") self.assertEqual(initial_data, {'field1': 1, 'field2': 2}) self.assertEqual(defined_fields, {'field1': 1, 'field2': 2})
def validate(self, data): if hasattr(self, 'initial_data'): validate_unknown_fields(self.initial_data, self.fields) repository = data.pop('repository', None) repository_version = data.get('repository_version') if not repository and not repository_version: raise serializers.ValidationError( _("Either the 'repository' or 'repository_version' need to be specified")) elif not repository and repository_version: return data elif repository and not repository_version: version = models.RepositoryVersion.latest(repository) if version: new_data = {'repository_version': version} new_data.update(data) return new_data else: raise serializers.ValidationError( detail=_('Repository has no version available to publish')) raise serializers.ValidationError( _("Either the 'repository' or 'repository_version' need to be specified " "but not both.") )