diff --git a/flask_restless/views/base.py b/flask_restless/views/base.py index bd9c0bdc..fff5c740 100644 --- a/flask_restless/views/base.py +++ b/flask_restless/views/base.py @@ -666,8 +666,10 @@ def extract_error_messages(exception): # 'errors' comes from sqlalchemy_elixir_validations if hasattr(exception, 'errors'): return exception.errors - # 'message' comes from savalidation - if hasattr(exception, 'message'): + # 'invalid_instances' indicates a ValidationError from savalidation. + # 'message' also comes from savalidation. + if hasattr(exception, 'invalid_instances') or \ + hasattr(exception, 'message'): # TODO this works only if there is one validation error try: left, right = str(exception).rsplit(':', 1) diff --git a/requirements-test.txt b/requirements-test.txt index b47f0e95..7c26655c 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -1,5 +1,5 @@ -r requirements.txt -savalidation +savalidation>=0.4.0 unittest2 # For testing PostgreSQL specific operations... diff --git a/tests/test_validation.py b/tests/test_validation.py index 9a3fa564..5c81546e 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -29,14 +29,14 @@ from sqlalchemy.orm import relationship from sqlalchemy.orm import validates -# for SAValidation package on pypi.python.org try: - import savalidation as _sav - import savalidation.validators as sav + from savalidation import ValidationError + from savalidation import ValidationMixin + from savalidation.validators import validates_presence_of + from savalidation.validators import validates_email except: has_savalidation = False else: - sav_version = tuple(int(n) for n in _sav.VERSION.split('.')) has_savalidation = True from .helpers import check_sole_error @@ -255,8 +255,7 @@ def test_updating_relationship_invalid(self): assert person.articles == [] -@skip_unless(has_savalidation and sav_version >= (0, 2) and - sys.version_info < (3, ), 'savalidation not found.') +@skip_unless(has_savalidation, 'savalidation not found.') class TestSAValidation(ManagerTestBase): """Tests for validation errors raised by the ``savalidation`` package. For more information about this package, see `its PyPI page @@ -268,17 +267,17 @@ def setUp(self): """Create APIs for the validated models.""" super(TestSAValidation, self).setUp() - class Person(self.Base, _sav.ValidationMixin): + class Person(self.Base, ValidationMixin): __tablename__ = 'person' id = Column(Integer, primary_key=True) email = Column(Unicode) - sav.validates_presence_of('email') - sav.validates_email('email') + validates_presence_of('email') + validates_email('email') self.Person = Person self.Base.metadata.create_all() - exceptions = [_sav.ValidationError] + exceptions = [ValidationError] self.manager.create_api(Person, methods=['POST', 'PATCH'], validation_exceptions=exceptions)