From 5a303146ffe9289fccaf3411fd0a9ec4e807244c Mon Sep 17 00:00:00 2001 From: jason Date: Tue, 22 Oct 2019 11:47:54 -0600 Subject: Fix CircleCI tests - updates circleci config to better support multiple python versions - remove unused dateutil library - remove unused nose library for testing - fixes unicode() function for py3 - remove metadata claiming support for py26 and py34 - remove unfinished test (causes problems with py2's unittest discovery) - fix reload() function for py3 support --- .circleci/config.yml | 43 ++++++++++++++++++++++ circle.yml | 88 --------------------------------------------- eventmq/tests/test_utils.py | 5 --- eventmq/utils/classes.py | 3 +- eventmq/utils/functions.py | 6 +++- setup.py | 18 +++++----- 6 files changed, 58 insertions(+), 105 deletions(-) create mode 100644 .circleci/config.yml delete mode 100644 circle.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..46dab22 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,43 @@ +version: 2.1 + +executors: + python: + parameters: + version: + type: string + default: "3.8" + docker: + - image: circleci/python:<< parameters.version >> + +commands: + setup: + description: install dependencies + steps: + - run: sudo apt-get update && sudo apt-get -y dist-upgrade + - run: sudo pip install -e .[testing] + +jobs: + test: + parameters: + version: + type: string + default: "2.7" + executor: + name: python + version: << parameters.version >> + steps: + - checkout + - setup + - run: python --version + - run: python -m unittest discover + - run: find . -name \*.py -print | xargs flake8 --show-source --statistics + +workflows: + test: + jobs: + - test: + name: "python 2.7" + version: "2.7" + - test: + name: "python 3.5" + version: "3.5" diff --git a/circle.yml b/circle.yml deleted file mode 100644 index fade121..0000000 --- a/circle.yml +++ /dev/null @@ -1,88 +0,0 @@ -version: 2 -jobs: - build: - working_directory: ~/eventmq/eventmq - parallelism: 1 - shell: /bin/bash --login - # CircleCI 2.0 does not support environment variables that refer to each other the same way as 1.0 did. - # If any of these refer to each other, rewrite them so that they don't or see https://circleci.com/docs/2.0/env-vars/#interpolating-environment-variables-to-set-other-environment-variables . - environment: - CIRCLE_ARTIFACTS: /tmp/circleci-artifacts - CIRCLE_TEST_REPORTS: /tmp/circleci-test-results - # In CircleCI 1.0 we used a pre-configured image with a large number of languages and other packages. - # In CircleCI 2.0 you can now specify your own image, or use one of our pre-configured images. - # The following configuration line tells CircleCI to use the specified docker image as the runtime environment for you job. - # We have selected a pre-built image that mirrors the build environment we use on - # the 1.0 platform, but we recommend you choose an image more tailored to the needs - # of each job. For more information on choosing an image (or alternatively using a - # VM instead of a container) see https://circleci.com/docs/2.0/executor-types/ - # To see the list of pre-built images that CircleCI provides for most common languages see - # https://circleci.com/docs/2.0/circleci-images/ - docker: - - image: circleci/build-image:ubuntu-14.04-XXL-upstart-1189-5614f37 - command: /sbin/init - steps: - # Machine Setup - # If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each - # The following `checkout` command checks out your code to your working directory. In 1.0 we did this implicitly. In 2.0 you can choose where in the course of a job your code should be checked out. - - checkout - # Prepare for artifact and test results collection equivalent to how it was done on 1.0. - # In many cases you can simplify this from what is generated here. - # 'See docs on artifact collection here https://circleci.com/docs/2.0/artifacts/' - - run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS - # This is based on your 1.0 configuration file or project settings - - run: - working_directory: ~/eventmq/eventmq - command: 'sudo redis-cli ping >/dev/null 2>&1 || sudo service redis-server - start; ' - # This is based on your 1.0 configuration file or project settings - - run: - working_directory: ~/eventmq/eventmq - command: pyenv global 2.7.11 3.5.2 - # Dependencies - # This would typically go in either a build or a build-and-test job when using workflows - # Restore the dependency cache - - restore_cache: - keys: - # This branch if available - - v1-dep-{{ .Branch }}- - # Default branch if not - - v1-dep-master- - # Any branch if there are none on the default branch - this should be unnecessary if you have your default branch configured correctly - - v1-dep- - # This is based on your 1.0 configuration file or project settings - - run: pip install -e .[testing] - - run: pip install python-coveralls - - run: pip3.5 install -e .[testing] - # Save dependency cache - - save_cache: - key: v1-dep-{{ .Branch }}-{{ epoch }} - paths: - # This is a broad list of cache paths to include many possible development environments - # You can probably delete some of these entries - - vendor/bundle - - ~/virtualenvs - - ~/.m2 - - ~/.ivy2 - - ~/.bundle - - ~/.go_workspace - - ~/.gradle - - ~/.cache/bower - # Test - # This would typically be a build job when using workflows, possibly combined with build - # This is based on your 1.0 configuration file or project settings - - run: nosetests-2.7 --with-coverage --cover-inclusive --cover-package=eventmq --cover-tests - - run: /opt/circleci/python/3.5.2/bin/nosetests-3.4 - # This is based on your 1.0 configuration file or project settings - - run: find . -name \*.py -print | xargs flake8 --show-source --statistics - - run: coveralls - # Teardown - # If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each - # Save test results - - store_test_results: - path: /tmp/circleci-test-results - # Save artifacts - - store_artifacts: - path: /tmp/circleci-artifacts - - store_artifacts: - path: /tmp/circleci-test-results \ No newline at end of file diff --git a/eventmq/tests/test_utils.py b/eventmq/tests/test_utils.py index 501b081..5173832 100644 --- a/eventmq/tests/test_utils.py +++ b/eventmq/tests/test_utils.py @@ -296,11 +296,6 @@ class TestCase(unittest.TestCase): with self.assertRaises(exceptions.InvalidMessageError): messages.parse_router_message(broken_message) - @unittest.skip - def test_parse_router_message(self): - ['aef451a0-5cef-4f03-818a-221061c8ab68', '', 'eMQP/1.0', 'INFORM', - '5caeb5fd-15d4-4b08-89e8-4e536672eef3', 'default', 'worker'] - def test_emqDeque(self): full = random.randint(1, 100) diff --git a/eventmq/utils/classes.py b/eventmq/utils/classes.py index eb431bd..5788e94 100644 --- a/eventmq/utils/classes.py +++ b/eventmq/utils/classes.py @@ -22,6 +22,7 @@ import json import logging import sys +import six import zmq.error from .. import conf, constants, exceptions, poller, utils @@ -468,7 +469,7 @@ class EMQdeque(object): return "{}".format(str(self._queue)) def __unicode__(self): - return "{}".format(unicode(self._queue)) + return "{}".format(six.u(self._queue)) def __repr__(self): return "{}".format(repr(self._queue)) diff --git a/eventmq/utils/functions.py b/eventmq/utils/functions.py index 0d64725..f47526b 100644 --- a/eventmq/utils/functions.py +++ b/eventmq/utils/functions.py @@ -2,6 +2,7 @@ import hashlib import importlib import inspect import json +import sys from .. import log from ..exceptions import CallableFromPathError @@ -188,7 +189,10 @@ def callable_from_name(callable_name, *args, **kwargs): try: package = importlib.import_module(s_package) - reload(package) + if sys.version[0] == '2': + reload(package) # noqa - flake8 fails here on py3 + else: + importlib.reload(package) except Exception as e: raise CallableFromPathError(str(e)) diff --git a/setup.py b/setup.py index dceac7f..61af985 100644 --- a/setup.py +++ b/setup.py @@ -18,20 +18,20 @@ setup( version=version, description='EventMQ job execution and messaging system based on ZeroMQ', packages=find_packages(), - install_requires=['pyzmq==15.4.0', - 'six==1.10.0', - 'monotonic==0.4', - 'croniter==0.3.10', - 'future==0.15.2', - 'psutil==5.0.0', - 'python-dateutil>=2.1,<3.0.0'], + install_requires=[ + 'pyzmq==15.4.0', + 'six==1.10.0', + 'monotonic==0.4', + 'croniter==0.3.10', + 'future==0.15.2', + 'psutil==5.0.0', + ], extras_require={ 'docs': ['Sphinx==1.5.2', ], 'testing': [ 'flake8==3.2.1', 'flake8-import-order==0.11', 'flake8-print==2.0.2', - 'nose', 'coverage==4.0.3', 'testfixtures==4.7.0', 'freezegun==0.3.7', @@ -58,9 +58,7 @@ setup( 'Operating System :: OS Independent', # Specify the Python versions you support here. In particular, ensure # that you indicate whether you support Python 2, Python 3 or both. - 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', ], scripts=[ -- cgit v1.2.1