diff options
author | Raphaël Barrois <raphael.barrois@polytechnique.org> | 2012-05-17 16:59:13 +0200 |
---|---|---|
committer | Raphaël Barrois <raphael.barrois@polytechnique.org> | 2012-05-17 16:59:13 +0200 |
commit | 560bd41c8464645e80681615f51c1d820fbae611 (patch) | |
tree | 85213e54db7938ec70f559e6166d6a49114d8289 | |
parent | a42ddd7467425ab76a0ebecd85ed1d6f7aa5ec7e (diff) | |
download | semantic-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.py | 56 |
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) |