From 6bdd5448695c5186e7dbdf7ced9c6e5bdfb2098c Mon Sep 17 00:00:00 2001 From: Yannis Mantzouratos Date: Tue, 28 Jul 2015 16:35:37 -0700 Subject: [PATCH 01/10] Use dot in relative import to avoid conflicts in Py3.4 --- cqlsl/statements/__init__.py | 8 ++++---- cqlsl/statements/delete.py | 2 +- cqlsl/statements/insert.py | 2 +- cqlsl/statements/select.py | 2 +- cqlsl/statements/update.py | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cqlsl/statements/__init__.py b/cqlsl/statements/__init__.py index eabe7cb..7c80840 100644 --- a/cqlsl/statements/__init__.py +++ b/cqlsl/statements/__init__.py @@ -1,4 +1,4 @@ -from insert import * -from select import * -from delete import * -from update import * +from .insert import * +from .select import * +from .delete import * +from .update import * diff --git a/cqlsl/statements/delete.py b/cqlsl/statements/delete.py index 8f5ac9c..5710dbe 100644 --- a/cqlsl/statements/delete.py +++ b/cqlsl/statements/delete.py @@ -1,6 +1,6 @@ from itertools import chain from cqlsl.utils import sorted_kwargs -from base import BaseStatement, WhereClauseMixin +from .base import BaseStatement, WhereClauseMixin __all__ = ['delete'] diff --git a/cqlsl/statements/insert.py b/cqlsl/statements/insert.py index 144e5ef..63a6a23 100644 --- a/cqlsl/statements/insert.py +++ b/cqlsl/statements/insert.py @@ -1,6 +1,6 @@ from itertools import repeat from cqlsl.utils import sorted_kwargs -from base import BaseStatement +from .base import BaseStatement __all__ = ['insert'] diff --git a/cqlsl/statements/select.py b/cqlsl/statements/select.py index e528cfe..0a32143 100644 --- a/cqlsl/statements/select.py +++ b/cqlsl/statements/select.py @@ -1,4 +1,4 @@ -from base import BaseStatement, WhereClauseMixin +from .base import BaseStatement, WhereClauseMixin __all__ = ['select'] diff --git a/cqlsl/statements/update.py b/cqlsl/statements/update.py index 749f8df..f1ccda1 100644 --- a/cqlsl/statements/update.py +++ b/cqlsl/statements/update.py @@ -1,6 +1,6 @@ from itertools import chain from cqlsl.utils import sorted_kwargs -from base import BaseStatement, WhereClauseMixin +from .base import BaseStatement, WhereClauseMixin __all__ = ['update'] From c775f79a276d48f64dbd1ffe0fdadaa0ab5f9f6a Mon Sep 17 00:00:00 2001 From: Yannis Mantzouratos Date: Wed, 29 Jul 2015 13:23:30 -0700 Subject: [PATCH 02/10] basestring to str --- cqlsl/statements/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cqlsl/statements/base.py b/cqlsl/statements/base.py index 6bb6d3b..1123e42 100644 --- a/cqlsl/statements/base.py +++ b/cqlsl/statements/base.py @@ -53,7 +53,7 @@ def _get_where_context(self): context = [] for value in self._where_conditions.values(): - if isinstance(value, collections.Iterable) and not isinstance(value, basestring): + if isinstance(value, collections.Iterable) and not isinstance(value, str): value = ValueSequence(value) context.append(value) From e485a8b984f55f4716d4419d16366e645d3213f1 Mon Sep 17 00:00:00 2001 From: Yannis Mantzouratos Date: Thu, 30 Jul 2015 14:34:01 -0700 Subject: [PATCH 03/10] X-compatibility --- cqlsl/statements/base.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cqlsl/statements/base.py b/cqlsl/statements/base.py index 1123e42..4b1c58e 100644 --- a/cqlsl/statements/base.py +++ b/cqlsl/statements/base.py @@ -2,6 +2,10 @@ from cqlsl.utils import sorted_kwargs from cassandra.query import ValueSequence +try: + basestring +except NameError: + basestring = str class BaseStatement(object): def __init__(self, table_name): @@ -53,7 +57,7 @@ def _get_where_context(self): context = [] for value in self._where_conditions.values(): - if isinstance(value, collections.Iterable) and not isinstance(value, str): + if isinstance(value, collections.Iterable) and not isinstance(value, basestring): value = ValueSequence(value) context.append(value) From c589000c5db97e35e2792004f39e58edfc8f0134 Mon Sep 17 00:00:00 2001 From: Yannis Mantzouratos Date: Thu, 30 Jul 2015 14:34:01 -0700 Subject: [PATCH 04/10] X-compatibility --- cqlsl/statements/base.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cqlsl/statements/base.py b/cqlsl/statements/base.py index 1123e42..f04ba52 100644 --- a/cqlsl/statements/base.py +++ b/cqlsl/statements/base.py @@ -2,6 +2,11 @@ from cqlsl.utils import sorted_kwargs from cassandra.query import ValueSequence +try: + basestring +except NameError: + basestring = str + class BaseStatement(object): def __init__(self, table_name): @@ -53,7 +58,7 @@ def _get_where_context(self): context = [] for value in self._where_conditions.values(): - if isinstance(value, collections.Iterable) and not isinstance(value, str): + if isinstance(value, collections.Iterable) and not isinstance(value, basestring): value = ValueSequence(value) context.append(value) From 82f4d5d19b80c56eb42ea286cc3fb05393f3ff4c Mon Sep 17 00:00:00 2001 From: Dmytro Popovych Date: Tue, 4 Aug 2015 23:31:31 +0300 Subject: [PATCH 05/10] Run testing via setup.py --- Makefile | 6 +++++- setup.py | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index af36f53..0ea90f9 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,6 @@ test: - python -m unittest discover ./tests + python setup.py test + +release: + python setup.py register -r pypi + python setup.py sdist upload -r pypi diff --git a/setup.py b/setup.py index ebc9d11..69c6f0d 100644 --- a/setup.py +++ b/setup.py @@ -35,4 +35,5 @@ packages=['cqlsl'], include_package_data=True, install_requires=['cassandra-driver >= 2.1.1'], + test_suite='tests', ) From a00c146be7b58f5b03c8bfdc61bd87185413dc1c Mon Sep 17 00:00:00 2001 From: Dmytro Popovych Date: Tue, 4 Aug 2015 23:51:55 +0300 Subject: [PATCH 06/10] Add testing for python 3.4.x --- requirements.txt | 1 - tests/integrations/base.py | 2 +- tests/integrations/test_inserts.py | 2 +- tests/integrations/test_selects.py | 2 +- tests/integrations/test_updates.py | 8 ++++---- tests/units/test_statements.py | 5 ++++- tox.ini | 5 +++++ 7 files changed, 16 insertions(+), 9 deletions(-) delete mode 100644 requirements.txt create mode 100644 tox.ini diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 123b5ac..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -cassandra-driver==2.1.1 diff --git a/tests/integrations/base.py b/tests/integrations/base.py index 6be64ff..715ab6f 100644 --- a/tests/integrations/base.py +++ b/tests/integrations/base.py @@ -9,7 +9,7 @@ class BaseIntegrationTestCase(BaseTestCase): session = Session( - Cluster([os.environ.get('CQLSL_TEST_CLUSTER', 'localhost')]) + Cluster([os.environ.get('CQLSL_TEST_CLUSTER', 'localhost')], protocol_version=2) ) @classmethod diff --git a/tests/integrations/test_inserts.py b/tests/integrations/test_inserts.py index 6496e9f..330960d 100644 --- a/tests/integrations/test_inserts.py +++ b/tests/integrations/test_inserts.py @@ -62,4 +62,4 @@ def test_insert_list(self): self.assertTypeRestored('test_list', ['a', 'b', 'c']) def test_insert_set(self): - self.assertTypeRestored('test_set', {1, 2, 3}) + self.assertTypeRestored('test_set', {1, 2, 3}, self.assertItemsEqual) diff --git a/tests/integrations/test_selects.py b/tests/integrations/test_selects.py index 740849a..a8d6535 100644 --- a/tests/integrations/test_selects.py +++ b/tests/integrations/test_selects.py @@ -57,7 +57,7 @@ def test_select_list(self): self.assertTypeRestored('test_list', ['a', 'b', 'c']) def test_select_set(self): - self.assertTypeRestored('test_set', {1, 2, 3}) + self.assertTypeRestored('test_set', {1, 2, 3}, self.assertItemsEqual) def test_select_all(self): self.session.execute("INSERT INTO select_stmt_test (test_id, test_text, test_int) VALUES (1, 'some text', 5)") diff --git a/tests/integrations/test_updates.py b/tests/integrations/test_updates.py index cb129bb..a3cd0c7 100644 --- a/tests/integrations/test_updates.py +++ b/tests/integrations/test_updates.py @@ -54,18 +54,18 @@ def test_update_with_where(self): def test_update_set_add(self): self.session.execute("INSERT INTO update_stmt_test (test_id, test_set) VALUES (1, {'a'})") - self.assertEqual({'a'}, self.session.execute('SELECT test_set FROM update_stmt_test')[0].get('test_set')) + self.assertItemsEqual({'a'}, self.session.execute('SELECT test_set FROM update_stmt_test')[0].get('test_set')) self.session.execute(update('update_stmt_test').set(test_set__add={'b'}).where(test_id=1)) - self.assertEqual( + self.assertItemsEqual( {'a', 'b'}, self.session.execute('SELECT test_set FROM update_stmt_test')[0].get('test_set') ) def test_update_set_remove(self): self.session.execute("INSERT INTO update_stmt_test (test_id, test_set) VALUES (1, {'a', 'b'})") - self.assertEqual({'a', 'b'}, self.session.execute('SELECT test_set FROM update_stmt_test')[0].get('test_set')) + self.assertItemsEqual({'a', 'b'}, self.session.execute('SELECT test_set FROM update_stmt_test')[0].get('test_set')) self.session.execute(update('update_stmt_test').set(test_set__remove={'a'}).where(test_id=1)) - self.assertEqual({'b'}, self.session.execute('SELECT test_set FROM update_stmt_test')[0].get('test_set')) + self.assertItemsEqual({'b'}, self.session.execute('SELECT test_set FROM update_stmt_test')[0].get('test_set')) def test_update_dict_update(self): self.session.execute( diff --git a/tests/units/test_statements.py b/tests/units/test_statements.py index 677150f..de693ca 100644 --- a/tests/units/test_statements.py +++ b/tests/units/test_statements.py @@ -140,7 +140,10 @@ def test_update_dict_update(self): stmt = update('test_table').set(some_dict__update={'a': 1, 'b': 2}).where(some_id=1) self.assertEqual('UPDATE test_table SET some_dict[%s] = %s, some_dict[%s] = %s WHERE some_id = %s', stmt.query) - self.assertEqual(('a', 1, 'b', 2, 1), stmt.context) + try: + self.assertEqual(('a', 1, 'b', 2, 1), stmt.context) + except AssertionError: + self.assertEqual(('b', 2, 'a', 1, 1), stmt.context) def test_update_list_prepend(self): stmt = update('test_table').set(some_list__prepend=['a']).where(some_id=1) diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..a5b4d4c --- /dev/null +++ b/tox.ini @@ -0,0 +1,5 @@ +[tox] +envlist=py{27,34} + +[testenv] +commands=python setup.py test From ea805d89ac7bb4d8e569ee45fa444c80e007ced1 Mon Sep 17 00:00:00 2001 From: Dmytro Popovych Date: Wed, 5 Aug 2015 00:02:11 +0300 Subject: [PATCH 07/10] Fix tests to support Python 3.4.x --- tests/base.py | 6 ++++++ tests/integrations/base.py | 2 +- tests/integrations/test_deletes.py | 2 +- tests/integrations/test_inserts.py | 2 +- tests/integrations/test_selects.py | 4 ++-- tests/integrations/test_updates.py | 2 +- tests/units/test_statements.py | 2 +- 7 files changed, 13 insertions(+), 7 deletions(-) diff --git a/tests/base.py b/tests/base.py index 2fb8b32..a9bd25f 100644 --- a/tests/base.py +++ b/tests/base.py @@ -12,3 +12,9 @@ def setUpClass(cls): logger = logging.getLogger('cqlsl') logger.setLevel(logging.DEBUG) logger.addHandler(logging.StreamHandler(sys.stdout)) + + def assertItemsEqual(self, *args, **kwargs): + if sys.version_info >= (3, 2): + return super(BaseTestCase, self).assertCountEqual(*args, **kwargs) + else: + return super(BaseTestCase, self).assertItemsEqual(*args, **kwargs) diff --git a/tests/integrations/base.py b/tests/integrations/base.py index 715ab6f..c62a8d8 100644 --- a/tests/integrations/base.py +++ b/tests/integrations/base.py @@ -1,7 +1,7 @@ import os from cassandra.cluster import Cluster from cqlsl.sessions import Session -from tests.base import BaseTestCase +from ..base import BaseTestCase __all__ = ['BaseIntegrationTestCase'] diff --git a/tests/integrations/test_deletes.py b/tests/integrations/test_deletes.py index 3438de4..dd63eba 100644 --- a/tests/integrations/test_deletes.py +++ b/tests/integrations/test_deletes.py @@ -1,5 +1,5 @@ from cqlsl.statements import delete -from base import BaseIntegrationTestCase +from .base import BaseIntegrationTestCase __all__ = ['DeletesTest'] diff --git a/tests/integrations/test_inserts.py b/tests/integrations/test_inserts.py index 330960d..d10b11b 100644 --- a/tests/integrations/test_inserts.py +++ b/tests/integrations/test_inserts.py @@ -1,7 +1,7 @@ # coding=utf-8 from uuid import uuid4 from cqlsl.statements import insert -from base import BaseIntegrationTestCase +from .base import BaseIntegrationTestCase __all__ = ['InsertsTest'] diff --git a/tests/integrations/test_selects.py b/tests/integrations/test_selects.py index a8d6535..9fe5bb5 100644 --- a/tests/integrations/test_selects.py +++ b/tests/integrations/test_selects.py @@ -1,5 +1,5 @@ from cqlsl.statements import select -from base import BaseIntegrationTestCase +from .base import BaseIntegrationTestCase __all__ = ['SelectsTest'] @@ -33,7 +33,7 @@ def assertTypeRestored(self, column, expected_value, special_assert=None): self.assertEqual(1, len(rows)) self.assertEqual(1, len(rows[0].keys())) - restored_value = rows[0].values()[0] + restored_value = list(rows[0].values())[0] if special_assert: special_assert(expected_value, restored_value) diff --git a/tests/integrations/test_updates.py b/tests/integrations/test_updates.py index a3cd0c7..5a475cd 100644 --- a/tests/integrations/test_updates.py +++ b/tests/integrations/test_updates.py @@ -1,5 +1,5 @@ from cqlsl.statements import update -from base import BaseIntegrationTestCase +from .base import BaseIntegrationTestCase __all__ = ['UpdatesTest'] diff --git a/tests/units/test_statements.py b/tests/units/test_statements.py index de693ca..b012326 100644 --- a/tests/units/test_statements.py +++ b/tests/units/test_statements.py @@ -1,6 +1,6 @@ from cassandra.encoder import ValueSequence from cqlsl.statements import insert, delete, update, select -from tests.base import BaseTestCase +from ..base import BaseTestCase __all__ = ['StatementsTest'] From b0b19da9850a8d257839ff0e145b63fac5ff2cfc Mon Sep 17 00:00:00 2001 From: Dmytro Popovych Date: Wed, 5 Aug 2015 00:03:38 +0300 Subject: [PATCH 08/10] Emphasize that we support Python 3.4.x --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 69c6f0d..fa2c028 100644 --- a/setup.py +++ b/setup.py @@ -29,6 +29,7 @@ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3.4", "Topic :: Database :: Front-Ends", "Operating System :: OS Independent", ], From 09e84565d5c3457867fa36d5c46d745d57955b41 Mon Sep 17 00:00:00 2001 From: Dmytro Popovych Date: Wed, 5 Aug 2015 00:06:01 +0300 Subject: [PATCH 09/10] Configure travis to run test for Python 3.4.x --- .travis.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index d942fa0..9b7a597 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,8 @@ language: python env: - - CASSANDRA_VERSION=21 + - CASSANDRA_VERSION=21 TOX_ENV=py27 + - CASSANDRA_VERSION=21 TOX_ENV=py34 python: - 2.7 @@ -26,7 +27,7 @@ before_install: before_script: sleep 10 install: - - pip install -r requirements.txt --use-mirrors + - pip install tox script: - - make test + - tox -e $TOX_ENV From cf73ed6c3fcf495cac9f8111bf40a7da2cc89abd Mon Sep 17 00:00:00 2001 From: Dmytro Popovych Date: Wed, 5 Aug 2015 00:09:55 +0300 Subject: [PATCH 10/10] Don't specify python version in travis --- .travis.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9b7a597..f5c2460 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,9 +4,6 @@ env: - CASSANDRA_VERSION=21 TOX_ENV=py27 - CASSANDRA_VERSION=21 TOX_ENV=py34 -python: - - 2.7 - before_install: - sudo echo "deb http://www.apache.org/dist/cassandra/debian ${CASSANDRA_VERSION}x main" | sudo tee -a /etc/apt/sources.list - sudo echo "deb-src http://www.apache.org/dist/cassandra/debian ${CASSANDRA_VERSION}x main" | sudo tee -a /etc/apt/sources.list