summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaphaël Barrois <raphael.barrois@polytechnique.org>2012-05-17 16:59:39 +0200
committerRaphaël Barrois <raphael.barrois@polytechnique.org>2012-05-17 16:59:39 +0200
commit073b97aeec76a10c16e0f5155edb1b0fb212ad7b (patch)
treed2d27d946cc00062a15518682e23fc74aee3e4ba
parent138a76c24b946cafe32e97ebc13af816f3582ef2 (diff)
downloadsemantic-version-073b97aeec76a10c16e0f5155edb1b0fb212ad7b.tar.gz
Introduce the SpecListField.
Signed-off-by: Raphaël Barrois <raphael.barrois@polytechnique.org>
-rw-r--r--src/semantic_version/django_fields.py12
-rw-r--r--tests/django_test_app/models.py3
-rw-r--r--tests/test_django.py31
3 files changed, 37 insertions, 9 deletions
diff --git a/src/semantic_version/django_fields.py b/src/semantic_version/django_fields.py
index f982f2c..1495bd1 100644
--- a/src/semantic_version/django_fields.py
+++ b/src/semantic_version/django_fields.py
@@ -61,4 +61,16 @@ class SpecField(BaseSemVerField):
return base.Spec(value)
+class SpecListField(BaseSemVerField):
+ default_error_messages = {
+ 'invalid': _(u"Enter a valid version number spec list in ==X.Y.Z,>=A.B.C format."),
+ }
+ description = _(u"Version specification list")
+ def to_python(self, value):
+ """Converts any value to a base.SpecList field."""
+ if value is None or value == '':
+ return value
+ if isinstance(value, base.SpecList):
+ return value
+ return base.SpecList(value)
diff --git a/tests/django_test_app/models.py b/tests/django_test_app/models.py
index 53ed874..df654e2 100644
--- a/tests/django_test_app/models.py
+++ b/tests/django_test_app/models.py
@@ -8,9 +8,12 @@ from semantic_version import django_fields as semver_fields
class VersionModel(models.Model):
version = semver_fields.VersionField(verbose_name='my version')
spec = semver_fields.SpecField(verbose_name='my spec')
+ speclist = semver_fields.SpecListField(verbose_name='my spec list')
class PartialVersionModel(models.Model):
partial = semver_fields.VersionField(partial=True, verbose_name='partial version')
optional = semver_fields.VersionField(verbose_name='optional version', blank=True, null=True)
optional_spec = semver_fields.SpecField(verbose_name='optional spec', blank=True, null=True)
+ optional_speclist = semver_fields.SpecListField(verbose_name='optional spec list',
+ blank=True, null=True)
diff --git a/tests/test_django.py b/tests/test_django.py
index 86e4b60..79cd1c0 100644
--- a/tests/test_django.py
+++ b/tests/test_django.py
@@ -35,21 +35,28 @@ if django_loaded: # pragma: no cover
@unittest.skipIf(not django_loaded, "Django not installed")
class DjangoFieldTestCase(unittest.TestCase):
def test_version(self):
- obj = models.VersionModel(version='0.1.1', spec='>0.1.0')
+ obj = models.VersionModel(version='0.1.1', spec='>0.1.0', speclist='~=0.1,!~0.1.1')
self.assertEqual(semantic_version.Version('0.1.1'), obj.version)
self.assertEqual(semantic_version.Spec('>0.1.0'), obj.spec)
+ self.assertEqual(semantic_version.SpecList('~=0.1,!~0.1.1'), obj.speclist)
- alt_obj = models.VersionModel(version=obj.version, spec=obj.spec)
+ alt_obj = models.VersionModel(version=obj.version, spec=obj.spec, speclist=obj.speclist)
self.assertEqual(semantic_version.Version('0.1.1'), alt_obj.version)
self.assertEqual(semantic_version.Spec('>0.1.0'), alt_obj.spec)
+ self.assertEqual(semantic_version.SpecList('~=0.1,!~0.1.1'), alt_obj.speclist)
self.assertEqual(obj.spec, alt_obj.spec)
self.assertEqual(obj.version, alt_obj.version)
+ self.assertEqual(obj.speclist, alt_obj.speclist)
def test_invalid_input(self):
- self.assertRaises(ValueError, models.VersionModel, version='0.1.1', spec='blah')
- self.assertRaises(ValueError, models.VersionModel, version='0.1', spec='>0.1.1')
+ self.assertRaises(ValueError, models.VersionModel,
+ version='0.1.1', spec='blah', speclist='~=0.1,!~0.1.1')
+ self.assertRaises(ValueError, models.VersionModel,
+ version='0.1', spec='>0.1.1', speclist='~=0.1,!~0.1.1')
+ self.assertRaises(ValueError, models.VersionModel,
+ version='0.1.1', spec='>0.1.1', speclist='~=0,!=0.2')
def test_partial(self):
obj = models.PartialVersionModel(partial='0.1')
@@ -57,17 +64,21 @@ class DjangoFieldTestCase(unittest.TestCase):
self.assertEqual(semantic_version.Version('0.1', partial=True), obj.partial)
self.assertIsNone(obj.optional)
self.assertIsNone(obj.optional_spec)
+ self.assertIsNone(obj.optional_speclist)
alt_obj = models.PartialVersionModel(partial=obj.partial, optional=obj.optional,
- optional_spec=obj.optional_spec)
+ optional_spec=obj.optional_spec, optional_speclist=obj.optional_speclist)
self.assertEqual(semantic_version.Version('0.1', partial=True), alt_obj.partial)
self.assertEqual(obj.partial, alt_obj.partial)
self.assertIsNone(obj.optional)
self.assertIsNone(obj.optional_spec)
+ self.assertIsNone(obj.optional_speclist)
def test_serialization(self):
- o1 = models.VersionModel(version='0.1.1', spec='<0.2.4-rc42')
- o2 = models.VersionModel(version='0.4.3-rc3+build3', spec='~=0.4')
+ o1 = models.VersionModel(version='0.1.1', spec='<0.2.4-rc42',
+ speclist='~=0.1,!=0.1.1')
+ o2 = models.VersionModel(version='0.4.3-rc3+build3', spec='~=0.4',
+ speclist='<=0.1.1-rc2,!~0.1.1-rc1')
data = serializers.serialize('json', [o1, o2])
@@ -76,8 +87,10 @@ class DjangoFieldTestCase(unittest.TestCase):
self.assertEqual(o2, obj2.object)
def test_serialization_partial(self):
- o1 = models.PartialVersionModel(partial='0.1.1', optional='0.2.4-rc42', optional_spec=None)
- o2 = models.PartialVersionModel(partial='0.4.3-rc3+build3', optional='', optional_spec='~=1.1')
+ o1 = models.PartialVersionModel(partial='0.1.1', optional='0.2.4-rc42',
+ optional_spec=None, optional_speclist=None)
+ o2 = models.PartialVersionModel(partial='0.4.3-rc3+build3', optional='',
+ optional_spec='~=1.1', optional_speclist='~=0.1,!=0.1.1')
data = serializers.serialize('json', [o1, o2])