diff --git a/.gitignore b/.gitignore index be648b3..4c70c18 100644 --- a/.gitignore +++ b/.gitignore @@ -72,3 +72,5 @@ target/ pyvenv.cfg pip-selfcheck.json +# Editors +*.swp diff --git a/setup.py b/setup.py index 4f72f56..1d07b9c 100644 --- a/setup.py +++ b/setup.py @@ -18,10 +18,18 @@ requirements = ['SQLAlchemy', 'inflection'] if sys.version_info[0] != 3 or sys.version_info[1] < 4: - requirements.append('enum34') + requirements.append('enum34') + +# XXX: deryck (2016 April 6) __version__ is defined twice. +# __version__ is defined here and in sqlalchemy_jsonapi.__version__ +# but we can't import it since __init__ imports literally everything. +# The constants and serializer files depend on enum34 which has to be +# conditionally installed. Once we stop supporting Python 2.7, +# this version string can also be imported as sqlalchemy_jsonapi.__version__. +__version__ = '4.0.9' setup(name='SQLAlchemy-JSONAPI', - version='4.0.9', + version=__version__, url='http://github.com/coltonprovias/sqlalchemy-jsonapi', license='MIT', author='Colton J. Provias', diff --git a/sqlalchemy_jsonapi/__init__.py b/sqlalchemy_jsonapi/__init__.py index 3545260..4181484 100644 --- a/sqlalchemy_jsonapi/__init__.py +++ b/sqlalchemy_jsonapi/__init__.py @@ -3,6 +3,7 @@ ALL_PERMISSIONS, INTERACTIVE_PERMISSIONS, JSONAPI, AttributeActions, Permissions, RelationshipActions, attr_descriptor, permission_test, relationship_descriptor) +from ._version import __version__ # NOQA try: from .flaskext import FlaskJSONAPI diff --git a/sqlalchemy_jsonapi/_version.py b/sqlalchemy_jsonapi/_version.py new file mode 100644 index 0000000..f07962f --- /dev/null +++ b/sqlalchemy_jsonapi/_version.py @@ -0,0 +1 @@ +__version__ = '4.0.9' diff --git a/sqlalchemy_jsonapi/errors.py b/sqlalchemy_jsonapi/errors.py index f06db1d..a2cbcb5 100644 --- a/sqlalchemy_jsonapi/errors.py +++ b/sqlalchemy_jsonapi/errors.py @@ -1,6 +1,9 @@ import json from uuid import uuid4 +# Relative import here is to avoid circular import in setup.py. +from ._version import __version__ + class BaseError(Exception): @property @@ -160,7 +163,7 @@ def user_error(status_code, title, detail, pointer): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } return json.dumps(response), status_code diff --git a/sqlalchemy_jsonapi/serializer.py b/sqlalchemy_jsonapi/serializer.py index 01014ef..fd33e64 100644 --- a/sqlalchemy_jsonapi/serializer.py +++ b/sqlalchemy_jsonapi/serializer.py @@ -4,7 +4,11 @@ Colton J. Provias MIT License """ -from enum import Enum + +try: + from enum import Enum +except ImportError: + from enum34 import Enum from inflection import dasherize, tableize, underscore from sqlalchemy.exc import IntegrityError @@ -16,6 +20,7 @@ RelationshipNotFoundError, ResourceNotFoundError, ResourceTypeNotFoundError, ToManyExpectedError, ValidationError) +from ._version import __version__ class AttributeActions(Enum): @@ -139,7 +144,7 @@ def __init__(self): self.status_code = 200 self.data = { 'jsonapi': {'version': '1.0'}, - 'meta': {'sqlalchemy_jsonapi_version': '4.0.9'} + 'meta': {'sqlalchemy_jsonapi_version': __version__} } diff --git a/sqlalchemy_jsonapi/unittests/test_errors_user_error.py b/sqlalchemy_jsonapi/unittests/test_errors_user_error.py index 04fea4c..f68d905 100644 --- a/sqlalchemy_jsonapi/unittests/test_errors_user_error.py +++ b/sqlalchemy_jsonapi/unittests/test_errors_user_error.py @@ -4,6 +4,7 @@ import unittest from sqlalchemy_jsonapi import errors +from sqlalchemy_jsonapi import __version__ class TestUserError(unittest.TestCase): @@ -30,7 +31,7 @@ def test_user_error(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } expected = json.dumps(data), status_code diff --git a/sqlalchemy_jsonapi/unittests/test_serializer_delete_resource.py b/sqlalchemy_jsonapi/unittests/test_serializer_delete_resource.py index 25cfe8f..99718f2 100644 --- a/sqlalchemy_jsonapi/unittests/test_serializer_delete_resource.py +++ b/sqlalchemy_jsonapi/unittests/test_serializer_delete_resource.py @@ -4,6 +4,7 @@ from sqlalchemy_jsonapi.unittests.utils import testcases from sqlalchemy_jsonapi.unittests import models +from sqlalchemy_jsonapi import __version__ class DeleteResource(testcases.SqlalchemyJsonapiTestCase): @@ -22,7 +23,7 @@ def test_delete_resource_successs_response(self): expected = { 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ }, 'jsonapi': { 'version': '1.0' diff --git a/sqlalchemy_jsonapi/unittests/test_serializer_get_collection.py b/sqlalchemy_jsonapi/unittests/test_serializer_get_collection.py index d1a3d34..de655d7 100644 --- a/sqlalchemy_jsonapi/unittests/test_serializer_get_collection.py +++ b/sqlalchemy_jsonapi/unittests/test_serializer_get_collection.py @@ -4,6 +4,7 @@ from sqlalchemy_jsonapi.unittests.utils import testcases from sqlalchemy_jsonapi.unittests import models +from sqlalchemy_jsonapi import __version__ class GetCollection(testcases.SqlalchemyJsonapiTestCase): @@ -54,7 +55,7 @@ def test_get_collection_response_with_no_query_args(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ }, 'included': [] } @@ -141,7 +142,7 @@ def test_get_collection_response_with_single_include_model(self): } }], 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ }, 'jsonapi': { 'version': '1.0' @@ -217,7 +218,7 @@ def test_get_collection_asc_sorted_response(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ }, 'included': [] } @@ -291,7 +292,7 @@ def test_get_collection_desc_sorted_response(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ }, 'included': [] } @@ -360,7 +361,7 @@ def test_get_collection_access_denied(self): 'data': [], 'included': [], 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ }, 'jsonapi': { 'version': '1.0' @@ -435,7 +436,7 @@ def test_get_collection_paginated_response_by_page(self): }], 'included': [], 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ }, 'jsonapi': { 'version': '1.0' @@ -475,7 +476,7 @@ def test_get_collection_with_single_field(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } actual = response.data @@ -558,7 +559,7 @@ def test_get_collection_when_including_model_and_its_attribute(self): } }], 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ }, 'data': [{ 'id': 1, @@ -636,7 +637,7 @@ def test_get_collection_given_an_included_model_that_is_null(self): } }], 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ }, 'included': [] } @@ -748,7 +749,7 @@ def test_get_collection_with_multiple_included_models(self): } }], 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } actual = response.data @@ -781,7 +782,7 @@ def test_get_collection_given_pagination_with_offset(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ }, 'included': [], 'data': [{ @@ -913,7 +914,7 @@ def test_get_collection_when_pagnation_is_out_of_range(self): 'data': [], 'included': [], 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ }, 'jsonapi': { 'version': '1.0' diff --git a/sqlalchemy_jsonapi/unittests/test_serializer_get_related.py b/sqlalchemy_jsonapi/unittests/test_serializer_get_related.py index 22e5e46..2598e65 100644 --- a/sqlalchemy_jsonapi/unittests/test_serializer_get_related.py +++ b/sqlalchemy_jsonapi/unittests/test_serializer_get_related.py @@ -4,6 +4,7 @@ from sqlalchemy_jsonapi.unittests.utils import testcases from sqlalchemy_jsonapi.unittests import models +from sqlalchemy_jsonapi import __version__ class GetRelated(testcases.SqlalchemyJsonapiTestCase): @@ -67,7 +68,7 @@ def test_get_related_of_to_one(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } actual = response.data @@ -142,7 +143,7 @@ def test_get_related_of_to_many(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } actual = response.data @@ -195,7 +196,7 @@ def test_get_related_when_related_object_is_null(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } actual = response.data diff --git a/sqlalchemy_jsonapi/unittests/test_serializer_get_relationship.py b/sqlalchemy_jsonapi/unittests/test_serializer_get_relationship.py index bf18ce9..74f89b1 100644 --- a/sqlalchemy_jsonapi/unittests/test_serializer_get_relationship.py +++ b/sqlalchemy_jsonapi/unittests/test_serializer_get_relationship.py @@ -4,6 +4,7 @@ from sqlalchemy_jsonapi.unittests.utils import testcases from sqlalchemy_jsonapi.unittests import models +from sqlalchemy_jsonapi import __version__ class GetRelationship(testcases.SqlalchemyJsonapiTestCase): @@ -41,7 +42,7 @@ def test_get_relationship_on_to_many(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } @@ -73,7 +74,7 @@ def test_get_relationship_on_to_one(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } actual = response.data diff --git a/sqlalchemy_jsonapi/unittests/test_serializer_patch_relationship.py b/sqlalchemy_jsonapi/unittests/test_serializer_patch_relationship.py index f618a78..62399e8 100644 --- a/sqlalchemy_jsonapi/unittests/test_serializer_patch_relationship.py +++ b/sqlalchemy_jsonapi/unittests/test_serializer_patch_relationship.py @@ -4,6 +4,7 @@ from sqlalchemy_jsonapi.unittests.utils import testcases from sqlalchemy_jsonapi.unittests import models +from sqlalchemy_jsonapi import __version__ class GPatchRelationship(testcases.SqlalchemyJsonapiTestCase): @@ -43,7 +44,7 @@ def test_patch_relationship_on_to_one_set_to_resource_response(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } actual = response.data @@ -102,7 +103,7 @@ def test_patch_relationship_on_to_one_set_resource_to_null_response(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } actual = response.data @@ -167,7 +168,7 @@ def test_patch_relationship_on_to_many_set_resources_response(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } actual = response.data @@ -234,7 +235,7 @@ def test_patch_relationship_on_to_many_set_to_empty_response(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } actual = response.data diff --git a/sqlalchemy_jsonapi/unittests/test_serializer_patch_resource.py b/sqlalchemy_jsonapi/unittests/test_serializer_patch_resource.py index 3281e5a..66e4682 100644 --- a/sqlalchemy_jsonapi/unittests/test_serializer_patch_resource.py +++ b/sqlalchemy_jsonapi/unittests/test_serializer_patch_resource.py @@ -4,6 +4,7 @@ from sqlalchemy_jsonapi.unittests.utils import testcases from sqlalchemy_jsonapi.unittests import models +from sqlalchemy_jsonapi import __version__ class PatchResource(testcases.SqlalchemyJsonapiTestCase): @@ -103,7 +104,7 @@ def test_patch_resource_response(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } actual = response.data diff --git a/sqlalchemy_jsonapi/unittests/test_serializer_post_collection.py b/sqlalchemy_jsonapi/unittests/test_serializer_post_collection.py index bd529f4..ca0fcfa 100644 --- a/sqlalchemy_jsonapi/unittests/test_serializer_post_collection.py +++ b/sqlalchemy_jsonapi/unittests/test_serializer_post_collection.py @@ -4,6 +4,7 @@ from sqlalchemy_jsonapi.unittests.utils import testcases from sqlalchemy_jsonapi.unittests import models +from sqlalchemy_jsonapi import __version__ class PostCollection(testcases.SqlalchemyJsonapiTestCase): @@ -88,7 +89,7 @@ def test_add_resource_response(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } @@ -190,7 +191,7 @@ def test_add_resource_with_many_to_one_relationship_response(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } actual = response.data @@ -567,7 +568,7 @@ def test_add_resource_with_a_null_relationship(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ }, 'included': [] } diff --git a/sqlalchemy_jsonapi/unittests/test_serializer_post_relationship.py b/sqlalchemy_jsonapi/unittests/test_serializer_post_relationship.py index 2ee0756..29ab870 100644 --- a/sqlalchemy_jsonapi/unittests/test_serializer_post_relationship.py +++ b/sqlalchemy_jsonapi/unittests/test_serializer_post_relationship.py @@ -4,6 +4,7 @@ from sqlalchemy_jsonapi.unittests.utils import testcases from sqlalchemy_jsonapi.unittests import models +from sqlalchemy_jsonapi import __version__ class PostRelationship(testcases.SqlalchemyJsonapiTestCase): @@ -90,7 +91,7 @@ def test_post_relationship_on_to_many_response(self): 'version': '1.0' }, 'meta': { - 'sqlalchemy_jsonapi_version': '4.0.9' + 'sqlalchemy_jsonapi_version': __version__ } } actual = response.data