diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..2531301 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,94 @@ +on: + push: + branches: + - "**" + tags: + - "v*" + pull_request: + branches: + - master + + workflow_dispatch: + +jobs: + static: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: setup python + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: install test dependencies + run: | + python -m pip install --upgrade pip + pip install tox + + - name: run tox + run: tox + env: + TOXENV: static + + test: + runs-on: ubuntu-20.04 + strategy: + matrix: + python-version: + - 3.6 + - 3.7 + - 3.8 + - 3.9 + - 3.10.0 + + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: setup python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: start rabbitmq + run: | + docker run -d --hostname rabbitmq --name rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest rabbitmq:3.8-management + + - name: install test dependencies + run: | + python -m pip install --upgrade pip + pip install tox + + - name: run tox + run: tox + env: + TOXENV: py${{ matrix.python-version }}-test + + distribute: + runs-on: ubuntu-latest + needs: + - static + - test + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') + + steps: + - name: checkout + uses: actions/checkout@v3 + + - name: setup python + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: generate distributables + run: | + pip install wheel + python setup.py sdist bdist_wheel + + - name: publish to pypi + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.travis.yml b/.travis.yml index 317cad4..d0c2f6a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,6 +13,8 @@ stages: jobs: include: + - python: 3.10.0 + env: DEPS="nameko==3.0.0-rc11" - python: 3.6 env: DEPS="--pre nameko" - python: 3.6 diff --git a/Makefile b/Makefile index f9e5c62..69cbc7a 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,8 @@ flake8: pylint: pylint nameko_tracer -E +static: flake8 pylint + pytest: - coverage run --concurrency=eventlet --source nameko_tracer --branch -m pytest tests + coverage run --concurrency=eventlet --source nameko_tracer --branch -m nameko test coverage report --show-missing --fail-under=100 diff --git a/nameko_tracer/utils.py b/nameko_tracer/utils.py index 2d2a96b..05973d6 100644 --- a/nameko_tracer/utils.py +++ b/nameko_tracer/utils.py @@ -1,7 +1,12 @@ -import collections from importlib import import_module import json import logging +import sys + +if sys.version_info >= (3, 3): # pragma: no cover + from collections.abc import Iterable # pylint: disable=E0611,E0401 +else: # pragma: no cover + from collections import Iterable # pylint: disable=E0611,E0401 import six @@ -31,7 +36,7 @@ def safe_for_serialisation(value): return { safe_for_serialisation(key): safe_for_serialisation(val) for key, val in six.iteritems(value)} - if isinstance(value, collections.Iterable): + if isinstance(value, Iterable): return list(map(safe_for_serialisation, value)) try: return six.text_type(value) diff --git a/setup.py b/setup.py index 5e4b4d0..9002ee7 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ setup( name='nameko-tracer', - version='1.3.0', + version='1.4.0', description='Nameko extension logging entrypoint processing metrics', author='student.com', author_email='wearehiring@student.com', diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..196a3df --- /dev/null +++ b/tox.ini @@ -0,0 +1,13 @@ +[tox] +envlist = static, {py3.6,py3.7,py3.8,py3.9,py3.10}-test +skipsdist = True + +[testenv] +allowlist_externals = make + +commands = + static: pip install --editable .[dev] + static: make static + + test: pip install --editable .[dev] + test: make pytest