Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
667a5fdb46 | ||
|
|
86e3e185f7 |
30
.travis.yml
30
.travis.yml
@@ -1,21 +1,20 @@
|
|||||||
language: python
|
language: python
|
||||||
|
|
||||||
python:
|
python:
|
||||||
- 2.6
|
|
||||||
- 2.7
|
- 2.7
|
||||||
- 3.2
|
|
||||||
- 3.3
|
- 3.3
|
||||||
- 3.4
|
- 3.4
|
||||||
|
- 3.5
|
||||||
|
|
||||||
env:
|
env:
|
||||||
- DJANGO_VERSION=1.4 MODULE=jsignature
|
|
||||||
- DJANGO_VERSION=1.5 MODULE=jsignature
|
|
||||||
- DJANGO_VERSION=1.6 MODULE=jsignature.tests
|
|
||||||
- DJANGO_VERSION=1.7 MODULE=jsignature.tests
|
- DJANGO_VERSION=1.7 MODULE=jsignature.tests
|
||||||
|
- DJANGO_VERSION=1.8 MODULE=jsignature.tests
|
||||||
|
- DJANGO_VERSION=1.9 MODULE=jsignature.tests
|
||||||
|
- DJANGO_VERSION=1.10 MODULE=jsignature.tests
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- pip install -r requirements.txt --use-mirrors
|
- pip install -r requirements.txt
|
||||||
- pip install -q Django==$DJANGO_VERSION --use-mirrors
|
- pip install -q Django==$DJANGO_VERSION
|
||||||
- pip install coverage
|
- pip install coverage
|
||||||
|
|
||||||
script: coverage run quicktest.py $MODULE
|
script: coverage run quicktest.py $MODULE
|
||||||
@@ -24,19 +23,10 @@ after_success:
|
|||||||
- pip install coveralls
|
- pip install coveralls
|
||||||
- coveralls
|
- coveralls
|
||||||
|
|
||||||
# We need to exclude old versions of Django for tests with python 3.
|
# We need to exclude old versions of Python for tests with Django >= 1.9.
|
||||||
# We need to exclude old versions of Python for tests with Django >= 1.7.
|
|
||||||
matrix:
|
matrix:
|
||||||
exclude:
|
exclude:
|
||||||
- python: 3.2
|
|
||||||
env: DJANGO_VERSION=1.4 MODULE=jsignature
|
|
||||||
- python: 3.3
|
- python: 3.3
|
||||||
env: DJANGO_VERSION=1.4 MODULE=jsignature
|
env: DJANGO_VERSION=1.9 MODULE=jsignature.tests
|
||||||
- python: 3.4
|
- python: 3.3
|
||||||
env: DJANGO_VERSION=1.4 MODULE=jsignature
|
env: DJANGO_VERSION=1.10 MODULE=jsignature.tests
|
||||||
- python: 3.4
|
|
||||||
env: DJANGO_VERSION=1.5 MODULE=jsignature
|
|
||||||
- python: 3.4
|
|
||||||
env: DJANGO_VERSION=1.6 MODULE=jsignature.tests
|
|
||||||
- python: 2.6
|
|
||||||
env: DJANGO_VERSION=1.7 MODULE=jsignature.tests
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ from .forms import (
|
|||||||
JSIGNATURE_EMPTY_VALUES)
|
JSIGNATURE_EMPTY_VALUES)
|
||||||
|
|
||||||
|
|
||||||
class JSignatureField(six.with_metaclass(models.SubfieldBase, models.Field)):
|
class JSignatureField(models.Field):
|
||||||
"""
|
"""
|
||||||
A model field handling a signature captured with jSignature
|
A model field handling a signature captured with jSignature
|
||||||
"""
|
"""
|
||||||
@@ -23,10 +23,6 @@ class JSignatureField(six.with_metaclass(models.SubfieldBase, models.Field)):
|
|||||||
return 'TextField'
|
return 'TextField'
|
||||||
|
|
||||||
def to_python(self, value):
|
def to_python(self, value):
|
||||||
"""
|
|
||||||
Validates that the input can be red as a JSON object. Returns a Python
|
|
||||||
datetime.date object.
|
|
||||||
"""
|
|
||||||
if value in JSIGNATURE_EMPTY_VALUES:
|
if value in JSIGNATURE_EMPTY_VALUES:
|
||||||
return None
|
return None
|
||||||
elif isinstance(value, list):
|
elif isinstance(value, list):
|
||||||
@@ -36,6 +32,14 @@ class JSignatureField(six.with_metaclass(models.SubfieldBase, models.Field)):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
raise ValidationError('Invalid JSON format.')
|
raise ValidationError('Invalid JSON format.')
|
||||||
|
|
||||||
|
def from_db_value(self, value, expression, connection, context):
|
||||||
|
if value in JSIGNATURE_EMPTY_VALUES:
|
||||||
|
return None
|
||||||
|
try:
|
||||||
|
return json.loads(value)
|
||||||
|
except ValueError:
|
||||||
|
raise ValidationError('Invalid JSON format.')
|
||||||
|
|
||||||
def get_prep_value(self, value):
|
def get_prep_value(self, value):
|
||||||
if value in JSIGNATURE_EMPTY_VALUES:
|
if value in JSIGNATURE_EMPTY_VALUES:
|
||||||
return None
|
return None
|
||||||
@@ -50,8 +54,3 @@ class JSignatureField(six.with_metaclass(models.SubfieldBase, models.Field)):
|
|||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return super(JSignatureField, self).formfield(**defaults)
|
return super(JSignatureField, self).formfield(**defaults)
|
||||||
|
|
||||||
try:
|
|
||||||
from south.modelsinspector import add_introspection_rules
|
|
||||||
add_introspection_rules([], ["jsignature.fields.JSignatureField"])
|
|
||||||
except ImportError:
|
|
||||||
pass
|
|
||||||
|
|||||||
@@ -31,6 +31,21 @@ class JSignatureFieldTest(SimpleTestCase):
|
|||||||
val = 'foo'
|
val = 'foo'
|
||||||
self.assertRaises(ValidationError, f.to_python, val)
|
self.assertRaises(ValidationError, f.to_python, val)
|
||||||
|
|
||||||
|
def test_from_db_value_empty(self):
|
||||||
|
f = JSignatureField()
|
||||||
|
self.assertIsNone(f.from_db_value(''))
|
||||||
|
|
||||||
|
def test_from_db_value_correct_value_json(self):
|
||||||
|
f = JSignatureField()
|
||||||
|
val = [{"x": [1, 2], "y": [3, 4]}]
|
||||||
|
val_str = '[{"x":[1,2], "y":[3,4]}]'
|
||||||
|
self.assertEquals(val, f.from_db_value(val_str))
|
||||||
|
|
||||||
|
def test_from_db_value_incorrect_value(self):
|
||||||
|
f = JSignatureField()
|
||||||
|
val = 'foo'
|
||||||
|
self.assertRaises(ValidationError, f.to_python, val)
|
||||||
|
|
||||||
def test_get_prep_value_empty(self):
|
def test_get_prep_value_empty(self):
|
||||||
f = JSignatureField()
|
f = JSignatureField()
|
||||||
for val in ['', [], '[]']:
|
for val in ['', [], '[]']:
|
||||||
|
|||||||
Reference in New Issue
Block a user