From 7a3850fd932d37a4cda6068c20c6482eeb40fb0f Mon Sep 17 00:00:00 2001 From: "Pastravanu, Gabriel" Date: Mon, 31 Aug 2020 15:38:18 +0300 Subject: [PATCH] fix-django-full_clean-error --- semantic_version/django_fields.py | 33 +++++++++++++++++++------------ tests/test_django.py | 8 +++----- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/semantic_version/django_fields.py b/semantic_version/django_fields.py index caa7a8c..5427560 100644 --- a/semantic_version/django_fields.py +++ b/semantic_version/django_fields.py @@ -4,6 +4,7 @@ import warnings +from django.core.exceptions import ValidationError from django.db import models from django.utils.translation import ugettext_lazy as _ @@ -65,14 +66,17 @@ def deconstruct(self): def to_python(self, value): """Converts any value to a base.Version field.""" - if value is None or value == '': - return value - if isinstance(value, base.Version): - return value - if self.coerce: - return base.Version.coerce(value, partial=self.partial) - else: - return base.Version(value, partial=self.partial) + try: + if value is None or value == '': + return value + if isinstance(value, base.Version): + return value + if self.coerce: + return base.Version.coerce(value, partial=self.partial) + else: + return base.Version(value, partial=self.partial) + except ValueError as err: + raise ValidationError(err) class SpecField(SemVerField): @@ -94,8 +98,11 @@ def deconstruct(self): def to_python(self, value): """Converts any value to a base.Spec field.""" - if value is None or value == '': - return value - if isinstance(value, base.BaseSpec): - return value - return base.BaseSpec.parse(value, syntax=self.syntax) + try: + if value is None or value == '': + return value + if isinstance(value, base.BaseSpec): + return value + return base.BaseSpec.parse(value, syntax=self.syntax) + except ValueError as err: + raise ValidationError(err) diff --git a/tests/test_django.py b/tests/test_django.py index 3361a9b..9c7846d 100644 --- a/tests/test_django.py +++ b/tests/test_django.py @@ -5,10 +5,8 @@ import unittest from semantic_version import Version, SimpleSpec, NpmSpec - from .setup_django import django_loaded - if django_loaded: # pragma: no cover from semantic_version import django_fields from .django_test_app import models @@ -20,12 +18,12 @@ from django.test import TransactionTestCase from django.test import runner as django_test_runner from django.test import utils as django_test_utils + from django.core.exceptions import ValidationError else: DjangoTestCase = unittest.TestCase TransactionTestCase = unittest.TestCase - test_state = {} @@ -139,10 +137,10 @@ def test_coerce_clean(self): def test_invalid_input(self): v = models.VersionModel(version='0.1.1', spec='blah') - self.assertRaises(ValueError, v.full_clean) + self.assertRaises(ValidationError, v.full_clean) v2 = models.VersionModel(version='0.1', spec='==0.1.1,!=0.1.1-alpha') - self.assertRaises(ValueError, v2.full_clean) + self.assertRaises(ValidationError, v2.full_clean) def test_partial(self): obj = models.PartialVersionModel(partial=Version('0.1.0'))