From 560bd41c8464645e80681615f51c1d820fbae611 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Barrois?= Date: Thu, 17 May 2012 16:59:13 +0200 Subject: Factor code between VersionField and SpecField. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raphaƫl Barrois --- src/semantic_version/django_fields.py | 56 ++++++++++++++--------------------- 1 file 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) -- cgit v1.2.1