summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaphaël Barrois <raphael.barrois@polytechnique.org>2012-05-17 16:59:13 +0200
committerRaphaël Barrois <raphael.barrois@polytechnique.org>2012-05-17 16:59:13 +0200
commit560bd41c8464645e80681615f51c1d820fbae611 (patch)
tree85213e54db7938ec70f559e6166d6a49114d8289
parenta42ddd7467425ab76a0ebecd85ed1d6f7aa5ec7e (diff)
downloadsemantic-version-560bd41c8464645e80681615f51c1d820fbae611.tar.gz
Factor code between VersionField and SpecField.
Signed-off-by: Raphaël Barrois <raphael.barrois@polytechnique.org>
-rw-r--r--src/semantic_version/django_fields.py56
1 files changed, 23 insertions, 33 deletions
diff --git a/src/semantic_version/django_fields.py b/src/semantic_version/django_fields.py
index ab8b064..f982f2c 100644
--- a/src/semantic_version/django_fields.py
+++ b/src/semantic_version/django_fields.py
@@ -7,26 +7,12 @@ from django.utils.translation import ugettext_lazy as _
from . import base
-class VersionField(models.CharField):
- default_error_messages = {
- 'invalid': _(u"Enter a valid version number in X.Y.Z format."),
- }
- description = _(u"Version")
-
+class BaseSemVerField(models.CharField):
__metaclass__ = models.SubfieldBase
def __init__(self, *args, **kwargs):
- self.partial = kwargs.pop('partial', False)
- kwargs.setdefault('max_length', 40)
- super(VersionField, self).__init__(*args, **kwargs)
-
- 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
- return base.Version(value, partial=self.partial)
+ kwargs.setdefault('max_length', 200)
+ super(BaseSemVerField, self).__init__(*args, **kwargs)
def get_prep_value(self, obj):
return str(obj)
@@ -41,34 +27,38 @@ class VersionField(models.CharField):
return str(value)
-class SpecField(models.CharField):
+class VersionField(BaseSemVerField):
default_error_messages = {
- 'invalid': _(u"Enter a valid version number spec in ==X.Y.Z format."),
+ 'invalid': _(u"Enter a valid version number in X.Y.Z format."),
}
- description = _(u"Version specification")
-
- __metaclass__ = models.SubfieldBase
+ description = _(u"Version")
def __init__(self, *args, **kwargs):
- kwargs.setdefault('max_length', 42)
- return super(SpecField, self).__init__(*args, **kwargs)
+ self.partial = kwargs.pop('partial', False)
+ super(VersionField, self).__init__(*args, **kwargs)
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
+ return base.Version(value, partial=self.partial)
+
+
+class SpecField(BaseSemVerField):
+ default_error_messages = {
+ 'invalid': _(u"Enter a valid version number spec in ==X.Y.Z format."),
+ }
+ description = _(u"Version specification")
+
+ 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.Spec):
return value
return base.Spec(value)
- def get_prep_value(self, obj):
- return str(obj)
- def get_db_prep_value(self, value, connection, prepared=False):
- if not prepared:
- value = self.get_prep_value(value)
- return value
- def value_to_string(self, obj):
- value = self.to_python(self._get_val_from_obj(obj))
- return str(value)