diff options
author | Raphaël Barrois <raphael.barrois@polyconseil.fr> | 2012-05-15 16:42:40 +0200 |
---|---|---|
committer | Raphaël Barrois <raphael.barrois@polyconseil.fr> | 2012-05-15 16:42:40 +0200 |
commit | 6713f3071764e1438fb7e07cf51bacde8fd97394 (patch) | |
tree | 41bb5fcf99bbb143ca6cc5ad95523e7b79e71fd6 /src | |
parent | 48f7cc1c811cdfb807615931a0fa3d102aa1fa90 (diff) | |
download | semantic-version-6713f3071764e1438fb7e07cf51bacde8fd97394.tar.gz |
Add django fields for SemanticVersion and Spec.
Signed-off-by: Raphaël Barrois <raphael.barrois@polyconseil.fr>
Diffstat (limited to 'src')
-rw-r--r-- | src/semantic_version/django_fields.py | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/semantic_version/django_fields.py b/src/semantic_version/django_fields.py new file mode 100644 index 0000000..17184bc --- /dev/null +++ b/src/semantic_version/django_fields.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2012 Raphaël Barrois + +from django.db import models +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") + + __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.SemanticVersion field.""" + if value is None or value == '': + return value + if isinstance(value, base.SemanticVersion): + return value + return base.SemanticVersion(value, partial=self.partial) + + 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) + + +class SpecField(models.CharField): + default_error_messages = { + 'invalid': _(u"Enter a valid version number spec in ==X.Y.Z format."), + } + description = _(u"Version specification") + + __metaclass__ = models.SubfieldBase + + def __init__(self, *args, **kwargs): + kwargs.setdefault('max_length', 42) + return super(SpecField, self).__init__(*args, **kwargs) + + def to_python(self, value): + """Converts any value to a base.SemanticVersion 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) |