summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRaphaël Barrois <raphael.barrois@polyconseil.fr>2012-05-15 16:42:40 +0200
committerRaphaël Barrois <raphael.barrois@polyconseil.fr>2012-05-15 16:42:40 +0200
commit6713f3071764e1438fb7e07cf51bacde8fd97394 (patch)
tree41bb5fcf99bbb143ca6cc5ad95523e7b79e71fd6 /src
parent48f7cc1c811cdfb807615931a0fa3d102aa1fa90 (diff)
downloadsemantic-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.py74
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)