summaryrefslogtreecommitdiff
path: root/mirrors/fields.py
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2013-04-21 02:23:40 -0400
committerLuke Shumaker <LukeShu@sbcglobal.net>2013-04-21 02:23:40 -0400
commit8ff271216f421594970631eec1ba156a8a35e561 (patch)
treee56af4f242621c0e0a20a30d9fe881edbc307feb /mirrors/fields.py
parent03fa7e4f27bdb39a8f8f5ed91a87d18bf8357b47 (diff)
parentbb18fa3323a0494a2774ea61911572b089d04b6d (diff)
Merge branch 'archweb' into archweb-generic2
Diffstat (limited to 'mirrors/fields.py')
-rw-r--r--mirrors/fields.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/mirrors/fields.py b/mirrors/fields.py
new file mode 100644
index 00000000..206c9d7d
--- /dev/null
+++ b/mirrors/fields.py
@@ -0,0 +1,49 @@
+from IPy import IP
+
+from django import forms
+from django.core import validators
+from django.core.exceptions import ValidationError
+from django.db import models
+from south.modelsinspector import add_introspection_rules
+
+
+class IPNetworkFormField(forms.Field):
+ def to_python(self, value):
+ if value in validators.EMPTY_VALUES:
+ return None
+ try:
+ value = IP(value)
+ except ValueError as e:
+ raise ValidationError(str(e))
+ return value
+
+
+class IPNetworkField(models.Field):
+ __metaclass__ = models.SubfieldBase
+ description = "IPv4 or IPv6 address or subnet"
+
+ def __init__(self, *args, **kwargs):
+ kwargs['max_length'] = 44
+ super(IPNetworkField, self).__init__(*args, **kwargs)
+
+ def get_internal_type(self):
+ return "IPAddressField"
+
+ def to_python(self, value):
+ if not value:
+ return None
+ return IP(value)
+
+ def get_prep_value(self, value):
+ value = self.to_python(value)
+ if not value:
+ return None
+ return str(value)
+
+ def formfield(self, **kwargs):
+ defaults = {'form_class': IPNetworkFormField}
+ defaults.update(kwargs)
+ return super(IPNetworkField, self).formfield(**defaults)
+
+
+add_introspection_rules([], ["^mirrors\.fields\.IPNetworkField"])