Browse Source

Merge pull request #22 from sbrandtb/fix_exc

Raise ValidationError instead of AddrFormatError
jimfunk 10 years ago
parent
commit
010fa37d61
2 changed files with 15 additions and 3 deletions
  1. 10 2
      netfields/fields.py
  2. 5 1
      netfields/tests.py

+ 10 - 2
netfields/fields.py

@@ -1,6 +1,8 @@
 from netaddr import IPAddress, IPNetwork, EUI
+from netaddr.core import AddrFormatError
 
 from django.db import models
+from django.core.exceptions import ValidationError
 
 from netfields.managers import NET_OPERATORS, NET_TEXT_OPERATORS
 from netfields.forms import InetAddressFormField, CidrAddressFormField, MACAddressFormField
@@ -18,7 +20,10 @@ class _NetAddressField(models.Field):
         if not value:
             return value
 
-        return self.python_type()(value)
+        try:
+            return self.python_type()(value)
+        except AddrFormatError as e:
+            raise ValidationError(e)
 
     def get_prep_lookup(self, lookup_type, value):
         if not value:
@@ -99,7 +104,10 @@ class MACAddressField(models.Field):
         if not value:
             return value
 
-        return EUI(value, dialect=mac_unix_common)
+        try:
+            return EUI(value, dialect=mac_unix_common)
+        except AddrFormatError as e:
+            raise ValidationError(e)
 
     def get_prep_value(self, value):
         if not value:

+ 5 - 1
netfields/tests.py

@@ -1,3 +1,4 @@
+from django.core.exceptions import ValidationError
 from netaddr import IPAddress, IPNetwork, EUI, AddrFormatError
 
 from django import VERSION
@@ -74,7 +75,7 @@ class BaseInetTestCase(BaseSqlTestCase):
         self.model(field=self.value1).save()
 
     def test_init_with_text_fails(self):
-        self.assertRaises(AddrFormatError, self.model, field='abc')
+        self.assertRaises(ValidationError, self.model, field='abc')
 
     def test_iexact_lookup(self):
         self.assertSqlEquals(self.qs.filter(field__iexact=self.value1),
@@ -387,6 +388,9 @@ class TestMacAddressField(BaseMacTestCase, TestCase):
     def test_save_nothing_fails(self):
         self.model().save()
 
+    def test_invalid_fails(self):
+        self.assertRaises(ValidationError, self.model(field='foobar').save)
+
 
 class MacAddressTestModelForm(ModelForm):
     class Meta: