Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-execnet for openSUSE:Factory checked in at 2021-02-04 20:23:27 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-execnet (Old) and /work/SRC/openSUSE:Factory/.python-execnet.new.28504 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-execnet" Thu Feb 4 20:23:27 2021 rev:12 rq:868773 version:1.8.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-execnet/python-execnet.changes 2019-09-04 08:57:06.947082788 +0200 +++ /work/SRC/openSUSE:Factory/.python-execnet.new.28504/python-execnet.changes 2021-02-04 20:24:09.754834336 +0100 @@ -1,0 +2,8 @@ +Tue Feb 2 09:57:10 UTC 2021 - Dirk M??ller <dmuel...@suse.com> + +- update to 1.8.0: + * Dropped support for Python 3.4. + * Fixed internal leak that should make ``execnet`` execute remote code in the main thread more often + * Current working directory is now restored when calling ``script/socketserver.py``. + +------------------------------------------------------------------- Old: ---- execnet-1.7.1.tar.gz New: ---- execnet-1.8.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-execnet.spec ++++++ --- /var/tmp/diff_new_pack.7r0ZmY/_old 2021-02-04 20:24:10.378835287 +0100 +++ /var/tmp/diff_new_pack.7r0ZmY/_new 2021-02-04 20:24:10.382835292 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-execnet # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-execnet -Version: 1.7.1 +Version: 1.8.0 Release: 0 Summary: Rapid multi-Python deployment License: MIT ++++++ execnet-1.7.1.tar.gz -> execnet-1.8.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/.github/workflows/main.yml new/execnet-1.8.0/.github/workflows/main.yml --- old/execnet-1.7.1/.github/workflows/main.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/execnet-1.8.0/.github/workflows/main.yml 2021-01-27 12:18:46.000000000 +0100 @@ -0,0 +1,130 @@ +name: build + +on: [push, pull_request] + +jobs: + build: + + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + name: [ + "windows-py27", + "windows-py35", + "windows-py36", + "windows-py37", + "windows-py38", + "windows-py39", + + "linux-py27", + "linux-py35", + "linux-py36", + "linux-py37", + "linux-py38", + "linux-py39", + + "linux-pypy2", + "linux-pypy3", + ] + include: + - name: "windows-py27" + python: "2.7" + tox_env: "py27" + os: "windows-latest" + - name: "windows-py35" + python: "3.5" + tox_env: "py35" + os: "windows-latest" + - name: "windows-py36" + python: "3.6" + tox_env: "py36" + os: "windows-latest" + - name: "windows-py37" + python: "3.7" + tox_env: "py37" + os: "windows-latest" + - name: "windows-py38" + python: "3.8" + tox_env: "py38" + os: "windows-latest" + - name: "windows-py39" + python: "3.9" + tox_env: "py39" + os: "windows-latest" + + - name: "linux-py27" + python: "2.7" + tox_env: "py27" + os: "ubuntu-latest" + - name: "linux-py35" + python: "3.5" + tox_env: "py35" + os: "ubuntu-latest" + - name: "linux-py36" + python: "3.6" + tox_env: "py36" + os: "ubuntu-latest" + - name: "linux-py37" + python: "3.7" + tox_env: "py37" + os: "ubuntu-latest" + - name: "linux-py38" + python: "3.8" + tox_env: "py38" + os: "ubuntu-latest" + - name: "linux-py39" + python: "3.9" + tox_env: "py39" + os: "ubuntu-latest" + + - name: "linux-pypy2" + python: "pypy-2.7" + tox_env: "pypy2" + os: "ubuntu-latest" + - name: "linux-pypy3" + python: "pypy-3.7" + tox_env: "pypy3" + os: "ubuntu-latest" + + steps: + - uses: actions/checkout@v1 + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python }} + - name: Install tox + run: | + python -m pip install --upgrade pip + pip install tox + - name: Test + run: | + tox -e ${{ matrix.tox_env }} + + deploy: + + if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') + + runs-on: ubuntu-latest + + needs: build + + steps: + - uses: actions/checkout@v1 + - name: Set up Python + uses: actions/setup-python@v1 + with: + python-version: "3.7" + - name: Install wheel + run: | + python -m pip install --upgrade pip + pip install wheel + - name: Build package + run: | + python setup.py sdist bdist_wheel + - name: Publish package to PyPI + uses: pypa/gh-action-pypi-publish@master + with: + user: __token__ + password: ${{ secrets.pypi_token }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/.pre-commit-config.yaml new/execnet-1.8.0/.pre-commit-config.yaml --- old/execnet-1.7.1/.pre-commit-config.yaml 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/.pre-commit-config.yaml 2021-01-27 12:18:46.000000000 +0100 @@ -1,24 +1,24 @@ exclude: doc/en/example/py2py3/test_py2.py repos: - repo: https://github.com/python/black - rev: 19.3b0 + rev: 20.8b1 hooks: - id: black args: [--safe, --quiet] - repo: https://github.com/asottile/blacken-docs - rev: v1.0.0 + rev: v1.9.2 hooks: - id: blacken-docs additional_dependencies: [black==19.3b0] - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v2.2.3 + rev: v3.4.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: fix-encoding-pragma - id: check-yaml - repo: https://github.com/asottile/reorder_python_imports - rev: v1.4.0 + rev: v2.3.6 hooks: - id: reorder-python-imports args: ['--application-directories=execnet'] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/.travis.yml new/execnet-1.8.0/.travis.yml --- old/execnet-1.7.1/.travis.yml 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/.travis.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,79 +0,0 @@ -language: python -dist: xenial - -stages: -- baseline -- name: test - if: repo = pytest-dev/execnet AND tag IS NOT present -- name: deploy - if: repo = pytest-dev/execnet AND tag IS present - -python: - - '3.7' - -jobs: - include: - - stage: baseline - env: TOXENV=docs - python: '3.6' - - env: TOXENV=linting - python: '3.6' - - env: TOXENV=py27 - python: '2.7' - - env: TOXENV=py37 - python: '3.7' - - - stage: test - env: TOXENV=py34 - python: '3.4' - - env: TOXENV=py35 - python: '3.5' - - env: TOXENV=py36 - python: '3.6' - - env: TOXENV=pypy - python: 'pypy2.7-6.0' - - env: TOXENV=pypy3 - python: 'pypy3.5-6.0' - - - stage: deploy - python: '3.7' - install: pip install -U setuptools setuptools_scm - script: skip - deploy: - provider: pypi - user: __token__ - distributions: sdist bdist_wheel - skip_upload_docs: true - password: - secure: "RE9SLQM4iivAg6DoSZWEfLovHby96QwgIzGBnGWAF8PucP7TlQcE7wvVRY3pY+n/CuEEnDN9KfIBfNVPK6UTbuobJhA3WTg9YkcnfM0K1RfQdNeHgILsG15iHWlMtvoFVkjPKgg/UuRyppL25+142GoqcIzImuN3yjUKkmsjMq0o1WPXJhLrebyq3MF2JRdyraEkYAG3gnHC6mJqUYyiGOH+5koO9F7OvznGAvp7q/HQJ2oxR87DknyWFHGhmiR0yi5hQ7u2SHUuW/6pzOv+qV7ZB54pSEWON3DkoLfbNocu5RHitojydbYdkXGfxuWHFRDU8c6v+f32cEAATbO2rGY1L+SFeJsWiOx4giFtgRNSvfz/7RVHlrrIBEPXZ8jEEUi+wmU5PgYAitPpdeL37BBSJWaiwdlSgE3jw6YwUmu5QUJ2uuY5rv9HZp9yiQbhiDXhD8U2jc5MK5RNQolhKqcC3JZSyfF+/HSJ1aQ6CboXfhNTkcqikEjAhgJ9ne/PDZKokT4VK5odwPFlZDu5E47X4dBmS+QsSAtxD3/lzaZL+qHA5HF9B6wwsZDQ0aJ11MeIT9WAtiBFNrkTz3wpNj7igb32gOmsZQqhlURBJr8YK0yEDGuzSd6ftqAaFvgE1LtSEhQ5SNTKXm6a0EpqbeRSQKhgpqIkYmS/AjGSYvo=" - on: - tags: true - repo: pytest-dev/execnet - allow_failures: - - env: TOXENV=pypy - python: 'pypy2.7-6.0' - - env: TOXENV=pypy3 - python: 'pypy3.5-6.0' - - -matrix: - include: - - env: TOXENV=docs - python: '3.6' - allow_failures: - - python: 'pypy' - -install: - - pip install -U pip - - pip install -U setuptools setuptools_scm tox - -script: - - tox - -notifications: - irc: - channels: - - "chat.freenode.net#pylib" - on_success: change - on_failure: change - skip_join: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/CHANGELOG.rst new/execnet-1.8.0/CHANGELOG.rst --- old/execnet-1.7.1/CHANGELOG.rst 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/CHANGELOG.rst 2021-01-27 12:18:46.000000000 +0100 @@ -1,3 +1,20 @@ +1.8.0 (2020-01-27) +------------------ + +* Dropped support for Python 3.4. + +* `#118 <https://github.com/pytest-dev/execnet/pull/118>`__: Fixed internal leak that should make + ``execnet`` execute remote code in the main thread more often; previously it would sometimes + spawn a thread to execute a ``remote_exec`` call, even when the caller + didn't issue multiple ``remote_exec`` calls at the same time. Some frameworks require code + to execute in the main thread, so the previous behavior would break them on occasion (see + `pytest-dev/pytest-xdist#620 <https://github.com/pytest-dev/pytest-xdist/issues/620>`__ + for an example). + +* `#115 <https://github.com/pytest-dev/execnet/pull/115>`__: Current working directory is now + restored when calling ``script/socketserver.py``. The script now also loops by default + when called from the command-line. + 1.7.1 (2019-08-28) ------------------ @@ -343,7 +360,7 @@ to let KeyboardInterrupts pass through. - EXECNET_DEBUG=2 will cause tracing to go to stderr, - which with popen slave gateways will relay back + which with popen worker gateways will relay back tracing to the instantiator process. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/HOWTORELEASE.rst new/execnet-1.8.0/HOWTORELEASE.rst --- old/execnet-1.7.1/HOWTORELEASE.rst 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/HOWTORELEASE.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,37 +0,0 @@ -================= -Releasing execnet -================= - -This document describes the steps to make a new ``execnet`` release. - -Version -------- - -``master`` should always be green and a potential release candidate. ``execnet`` follows -semantic versioning, so given that the current version is ``X.Y.Z``, to find the next version number -one needs to look at the ``CHANGELOG.rst`` file: - -- If there any new feature, then we must make a new **minor** release: next - release will be ``X.Y+1.0``. - -- Otherwise it is just a **bug fix** release: ``X.Y.Z+1``. - - -Steps ------ - -To publish a new release ``X.Y.Z``, the steps are as follows: - -#. Create a new branch named ``release-X.Y.Z`` from the latest ``master``. - -#. Update the ``CHANGELOG.rst`` file with the new release information. - -#. Commit and push the branch for review. - -#. Once PR is **green** and **approved**, create and push a tag:: - - $ export VERSION=X.Y.Z - $ git tag v$VERSION release-$VERSION - $ git push g...@github.com:pytest-dev/execnet.git v$VERSION - -That will build the package and publish it on ``PyPI`` automatically. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/PKG-INFO new/execnet-1.8.0/PKG-INFO --- old/execnet-1.7.1/PKG-INFO 2019-08-30 03:04:03.000000000 +0200 +++ new/execnet-1.8.0/PKG-INFO 2021-01-27 12:18:52.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: execnet -Version: 1.7.1 +Version: 1.8.0 Summary: execnet: rapid multi-Python deployment Home-page: https://execnet.readthedocs.io/en/latest/ Author: holger krekel and others @@ -23,11 +23,8 @@ .. image:: https://img.shields.io/pypi/pyversions/execnet.svg :target: https://pypi.org/project/execnet/ - .. image:: https://travis-ci.org/pytest-dev/execnet.svg?branch=master - :target: https://travis-ci.org/pytest-dev/execnet - - .. image:: https://ci.appveyor.com/api/projects/status/n9qy8df16my4gds9/branch/master?svg=true - :target: https://ci.appveyor.com/project/pytestbot/execnet + .. image:: https://github.com/pytest-dev/execnet/workflows/build/badge.svg + :target: https://github.com/pytest-dev/execnet/actions?query=workflow%3Abuild .. image:: https://img.shields.io/badge/code%20style-black-000000.svg :target: https://github.com/python/black @@ -54,9 +51,6 @@ * grouped creation and robust termination of processes - * well tested between CPython 2.7, 3.4+, Jython 2.5.1 and PyPy 2.2 - interpreters. - * interoperable between Windows and Unix-ish systems. * integrates with different threading models, including standard @@ -79,11 +73,12 @@ Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy -Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* +Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.* Provides-Extra: testing diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/README.rst new/execnet-1.8.0/README.rst --- old/execnet-1.7.1/README.rst 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/README.rst 2021-01-27 12:18:46.000000000 +0100 @@ -16,11 +16,8 @@ .. image:: https://img.shields.io/pypi/pyversions/execnet.svg :target: https://pypi.org/project/execnet/ -.. image:: https://travis-ci.org/pytest-dev/execnet.svg?branch=master - :target: https://travis-ci.org/pytest-dev/execnet - -.. image:: https://ci.appveyor.com/api/projects/status/n9qy8df16my4gds9/branch/master?svg=true - :target: https://ci.appveyor.com/project/pytestbot/execnet +.. image:: https://github.com/pytest-dev/execnet/workflows/build/badge.svg + :target: https://github.com/pytest-dev/execnet/actions?query=workflow%3Abuild .. image:: https://img.shields.io/badge/code%20style-black-000000.svg :target: https://github.com/python/black @@ -47,9 +44,6 @@ * grouped creation and robust termination of processes -* well tested between CPython 2.7, 3.4+, Jython 2.5.1 and PyPy 2.2 - interpreters. - * interoperable between Windows and Unix-ish systems. * integrates with different threading models, including standard diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/RELEASING.rst new/execnet-1.8.0/RELEASING.rst --- old/execnet-1.7.1/RELEASING.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/execnet-1.8.0/RELEASING.rst 2021-01-27 12:18:46.000000000 +0100 @@ -0,0 +1,37 @@ +================= +Releasing execnet +================= + +This document describes the steps to make a new ``execnet`` release. + +Version +------- + +``master`` should always be green and a potential release candidate. ``execnet`` follows +semantic versioning, so given that the current version is ``X.Y.Z``, to find the next version number +one needs to look at the ``CHANGELOG.rst`` file: + +- If there any new feature, then we must make a new **minor** release: next + release will be ``X.Y+1.0``. + +- Otherwise it is just a **bug fix** release: ``X.Y.Z+1``. + + +Steps +----- + +To publish a new release ``X.Y.Z``, the steps are as follows: + +#. Create a new branch named ``release-X.Y.Z`` from the latest ``master``. + +#. Update the ``CHANGELOG.rst`` file with the new release information. + +#. Commit and push the branch for review. + +#. Once PR is **green** and **approved**, create and push a tag:: + + $ export VERSION=X.Y.Z + $ git tag v$VERSION release-$VERSION + $ git push g...@github.com:pytest-dev/execnet.git v$VERSION + +That will build the package and publish it on ``PyPI`` automatically. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/appveyor.yml new/execnet-1.8.0/appveyor.yml --- old/execnet-1.7.1/appveyor.yml 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/appveyor.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,27 +0,0 @@ -build: false -environment: - matrix: - - TOXENV: "py27" - - TOXENV: "py34" - - TOXENV: "py35" - - TOXENV: "py36" - - TOXENV: "py37" - - TOXENV: "pypy" - - TOXENV: "docs" - -matrix: - allow_failures: - - TOXENV: "pypy" - -install: - - echo Installed Pythons - - dir c:\Python* - - - if "%TOXENV%" == "pypy" call scripts\install-pypy.bat - - - C:\Python37\python -m pip install tox - -test_script: - - C:\Python37\python -m tox - -skip_tags: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/doc/basics.rst new/execnet-1.8.0/doc/basics.rst --- old/execnet-1.7.1/doc/basics.rst 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/doc/basics.rst 2021-01-27 12:18:46.000000000 +0100 @@ -221,7 +221,7 @@ configure a tracing mechanism: :EXECNET_DEBUG=1: write per-process trace-files to ``execnet-debug-PID`` -:EXECNET_DEBUG=2: perform tracing to stderr (popen-gateway slaves will send this to their instantiator) +:EXECNET_DEBUG=2: perform tracing to stderr (popen-gateway workers will send this to their instantiator) .. _`dumps/loads`: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/doc/example/sysinfo.py new/execnet-1.8.0/doc/example/sysinfo.py --- old/execnet-1.7.1/doc/example/sysinfo.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/doc/example/sysinfo.py 2021-01-27 12:18:46.000000000 +0100 @@ -41,7 +41,7 @@ for line in path.readlines(): m = rex.match(line) if m is not None: - sshname, = m.groups() + (sshname,) = m.groups() l.append(sshname) return l diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/doc/example/test_debug.rst new/execnet-1.8.0/doc/example/test_debug.rst --- old/execnet-1.7.1/doc/example/test_debug.rst 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/doc/example/test_debug.rst 2021-01-27 12:18:46.000000000 +0100 @@ -6,7 +6,7 @@ configure the execnet tracing mechanism: :EXECNET_DEBUG=1: write per-process trace-files to ``${TEMPROOT}/execnet-debug-PID`` -:EXECNET_DEBUG=2: perform tracing to stderr (popen-gateway slaves will send this to their instantiator) +:EXECNET_DEBUG=2: perform tracing to stderr (popen-gateway workers will send this to their instantiator) Here is a simple example to see what goes on with a simple execution:: @@ -18,13 +18,13 @@ [2326] gw0 starting to receive [2326] gw0 sent <Message.CHANNEL_EXEC channelid=1 '42'> - [2327] creating slavegateway on <execnet.gateway_base.Popen2IO instance at 0x9f1c20c> - [2327] gw0-slave starting to receive - [2327] gw0-slave received <Message.CHANNEL_EXEC channelid=1 '42'> - [2327] gw0-slave execution starts[1]: '42' - [2327] gw0-slave execution finished - [2327] gw0-slave sent <Message.CHANNEL_CLOSE channelid=1 ''> - [2327] gw0-slave 1 sent channel close message + [2327] creating workergateway on <execnet.gateway_base.Popen2IO instance at 0x9f1c20c> + [2327] gw0-worker starting to receive + [2327] gw0-worker received <Message.CHANNEL_EXEC channelid=1 '42'> + [2327] gw0-worker execution starts[1]: '42' + [2327] gw0-worker execution finished + [2327] gw0-worker sent <Message.CHANNEL_CLOSE channelid=1 ''> + [2327] gw0-worker 1 sent channel close message [2326] gw0 received <Message.CHANNEL_CLOSE channelid=1 ''> [2326] gw0 1 channel.__del__ [2326] === atexit cleanup <Group ['gw0']> === @@ -32,12 +32,12 @@ [2326] gw0 --> sending GATEWAY_TERMINATE [2326] gw0 sent <Message.GATEWAY_TERMINATE channelid=0 ''> [2326] gw0 joining receiver thread - [2327] gw0-slave received <Message.GATEWAY_TERMINATE channelid=0 ''> - [2327] gw0-slave putting None to execqueue - [2327] gw0-slave io.close_read() - [2327] gw0-slave leaving <Thread(receiver, started daemon -1220277392)> - [2327] gw0-slave 1 channel.__del__ - [2327] gw0-slave io.close_write() - [2327] gw0-slave slavegateway.serve finished - [2327] gw0-slave gateway.join() called while receiverthread already finished + [2327] gw0-worker received <Message.GATEWAY_TERMINATE channelid=0 ''> + [2327] gw0-worker putting None to execqueue + [2327] gw0-worker io.close_read() + [2327] gw0-worker leaving <Thread(receiver, started daemon -1220277392)> + [2327] gw0-worker 1 channel.__del__ + [2327] gw0-worker io.close_write() + [2327] gw0-worker workergateway.serve finished + [2327] gw0-worker gateway.join() called while receiverthread already finished [2326] gw0 leaving <Thread(receiver, started daemon -1221223568)> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/doc/example/test_proxy.rst new/execnet-1.8.0/doc/example/test_proxy.rst --- old/execnet-1.7.1/doc/example/test_proxy.rst 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/doc/example/test_proxy.rst 2021-01-27 12:18:46.000000000 +0100 @@ -1,15 +1,14 @@ -Managing Proxyed gateways +Managing Proxied gateways ========================== Simple Proxying ---------------- Using the via arg of specs we can create a gateway -whose io os created on a remote gateway and -proxyed to the master. +whose io is created on a remote gateway and proxied to the master. The simlest use case, is where one creates one master process -and uses it to controll new slaves and their environment +and uses it to control new workers and their environment :: @@ -19,8 +18,8 @@ >>> master = group.makegateway('popen//id=master') >>> master <Gateway id='master' receive-live, thread model, 0 active channels> - >>> slave = group.makegateway() - >>> slave + >>> worker = group.makegateway() + >>> worker <Gateway id='gw0' receive-live, thread model, 0 active channels> >>> group <Group ['master', 'gw0']> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/execnet/_version.py new/execnet-1.8.0/execnet/_version.py --- old/execnet-1.7.1/execnet/_version.py 2019-08-30 03:04:03.000000000 +0200 +++ new/execnet-1.8.0/execnet/_version.py 2021-01-27 12:18:52.000000000 +0100 @@ -1,4 +1,5 @@ # coding: utf-8 # file generated by setuptools_scm # don't change, don't track in version control -version = '1.7.1' +version = '1.8.0' +version_tuple = (1, 8, 0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/execnet/deprecated.py new/execnet-1.8.0/execnet/deprecated.py --- old/execnet-1.7.1/execnet/deprecated.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/execnet/deprecated.py 2021-01-27 12:18:46.000000000 +0100 @@ -8,8 +8,8 @@ def PopenGateway(python=None): - """ instantiate a gateway to a subprocess - started with the given 'python' executable. + """instantiate a gateway to a subprocess + started with the given 'python' executable. """ APIWARN("1.0.0b4", "use makegateway('popen')") spec = execnet.XSpec("popen") @@ -18,12 +18,12 @@ def SocketGateway(host, port): - """ This Gateway provides interaction with a remote process - by connecting to a specified socket. On the remote - side you need to manually start a small script - (py/execnet/script/socketserver.py) that accepts - SocketGateway connections or use the experimental - new_remote() method on existing gateways. + """This Gateway provides interaction with a remote process + by connecting to a specified socket. On the remote + side you need to manually start a small script + (py/execnet/script/socketserver.py) that accepts + SocketGateway connections or use the experimental + new_remote() method on existing gateways. """ APIWARN("1.0.0b4", "use makegateway('socket=host:port')") spec = execnet.XSpec("socket={}:{}".format(host, port)) @@ -31,9 +31,9 @@ def SshGateway(sshaddress, remotepython=None, ssh_config=None): - """ instantiate a remote ssh process with the - given 'sshaddress' and remotepython version. - you may specify an ssh_config file. + """instantiate a remote ssh process with the + given 'sshaddress' and remotepython version. + you may specify an ssh_config file. """ APIWARN("1.0.0b4", "use makegateway('ssh=host')") spec = execnet.XSpec("ssh=%s" % sshaddress) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/execnet/gateway.py new/execnet-1.8.0/execnet/gateway.py --- old/execnet-1.7.1/execnet/gateway.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/execnet/gateway.py 2021-01-27 12:18:46.000000000 +0100 @@ -42,7 +42,7 @@ ) def exit(self): - """ trigger gateway exit. Defer waiting for finishing + """trigger gateway exit. Defer waiting for finishing of receiver-thread and subprocess activity to when group.terminate() is called. """ @@ -75,7 +75,10 @@ """ return some sys/env information from remote. """ if update or not hasattr(self, "_cache_rinfo"): ch = self.remote_exec(rinfo_source) - self._cache_rinfo = RInfo(ch.receive()) + try: + self._cache_rinfo = RInfo(ch.receive()) + finally: + ch.waitclose() return self._cache_rinfo def hasreceiver(self): @@ -93,20 +96,20 @@ return RemoteStatus(statusdict) def remote_exec(self, source, **kwargs): - """ return channel object and connect it to a remote - execution thread where the given ``source`` executes. + """return channel object and connect it to a remote + execution thread where the given ``source`` executes. - * ``source`` is a string: execute source string remotely - with a ``channel`` put into the global namespace. - * ``source`` is a pure function: serialize source and - call function with ``**kwargs``, adding a - ``channel`` object to the keyword arguments. - * ``source`` is a pure module: execute source of module - with a ``channel`` in its global namespace - - In all cases the binding ``__name__='__channelexec__'`` - will be available in the global namespace of the remotely - executing code. + * ``source`` is a string: execute source string remotely + with a ``channel`` put into the global namespace. + * ``source`` is a pure function: serialize source and + call function with ``**kwargs``, adding a + ``channel`` object to the keyword arguments. + * ``source`` is a pure module: execute source of module + with a ``channel`` in its global namespace + + In all cases the binding ``__name__='__channelexec__'`` + will be available in the global namespace of the remotely + executing code. """ call_name = None file_name = None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/execnet/gateway_base.py new/execnet-1.8.0/execnet/gateway_base.py --- old/execnet-1.7.1/execnet/gateway_base.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/execnet/gateway_base.py 2021-01-27 12:18:46.000000000 +0100 @@ -187,9 +187,9 @@ class Reply(object): - """ reply instances provide access to the result - of a function execution that got dispatched - through WorkerPool.spawn() + """reply instances provide access to the result + of a function execution that got dispatched + through WorkerPool.spawn() """ def __init__(self, task, threadmodel): @@ -198,10 +198,10 @@ self.running = True def get(self, timeout=None): - """ get the result object from an asynchronous function execution. - if the function execution raised an exception, - then calling get() will reraise that exception - including its traceback. + """get the result object from an asynchronous function execution. + if the function execution raised an exception, + then calling get() will reraise that exception + including its traceback. """ self.waitfinish(timeout) try: @@ -228,14 +228,14 @@ class WorkerPool(object): - """ A WorkerPool allows to spawn function executions - to threads, returning a reply object on which you - can ask for the result (and get exceptions reraised). - - This implementation allows the main thread to integrate - itself into performing function execution through - calling integrate_as_primary_thread() which will return - when the pool received a trigger_shutdown(). + """A WorkerPool allows to spawn function executions + to threads, returning a reply object on which you + can ask for the result (and get exceptions reraised). + + This implementation allows the main thread to integrate + itself into performing function execution through + calling integrate_as_primary_thread() which will return + when the pool received a trigger_shutdown(). """ def __init__(self, execmodel, hasprimary=False): @@ -253,7 +253,7 @@ self._primary_thread_task_ready = None def integrate_as_primary_thread(self): - """ integrate the thread with which we are called as a primary + """integrate the thread with which we are called as a primary thread for executing functions triggered with spawn(). """ assert self.execmodel.backend == "thread", self.execmodel @@ -303,8 +303,8 @@ return False def spawn(self, func, *args, **kwargs): - """ return Reply object for the asynchronous dispatch - of the given func(*args, **kwargs). + """return Reply object for the asynchronous dispatch + of the given func(*args, **kwargs). """ reply = Reply((func, args, kwargs), self.execmodel) with self._running_lock: @@ -572,14 +572,14 @@ self.gateway._trace(self.id, *msg) def setcallback(self, callback, endmarker=NO_ENDMARKER_WANTED): - """ set a callback function for receiving items. + """set a callback function for receiving items. - All already queued items will immediately trigger the callback. - Afterwards the callback will execute in the receiver thread - for each received data item and calls to ``receive()`` will - raise an error. - If an endmarker is specified the callback will eventually - be called with the endmarker when the channel closes. + All already queued items will immediately trigger the callback. + Afterwards the callback will execute in the receiver thread + for each received data item and calls to ``receive()`` will + raise an error. + If an endmarker is specified the callback will eventually + be called with the endmarker when the channel closes. """ _callbacks = self.gateway._channelfactory._callbacks with self.gateway._receivelock: @@ -650,15 +650,15 @@ # public API for channel objects # def isclosed(self): - """ return True if the channel is closed. A closed - channel may still hold items. + """return True if the channel is closed. A closed + channel may still hold items. """ return self._closed def makefile(self, mode="w", proxyclose=False): - """ return a file-like object. - mode can be 'w' or 'r' for writeable/readable files. - if proxyclose is true file.close() will also close the channel. + """return a file-like object. + mode can be 'w' or 'r' for writeable/readable files. + if proxyclose is true file.close() will also close the channel. """ if mode == "w": return ChannelFileWrite(channel=self, proxyclose=proxyclose) @@ -667,10 +667,10 @@ raise ValueError("mode {!r} not availabe".format(mode)) def close(self, error=None): - """ close down this channel with an optional error message. - Note that closing of a channel tied to remote_exec happens - automatically at the end of execution and cannot - be done explicitely. + """close down this channel with an optional error message. + Note that closing of a channel tied to remote_exec happens + automatically at the end of execution and cannot + be done explicitely. """ if self._executing: raise IOError("cannot explicitly close channel within remote_exec") @@ -699,7 +699,7 @@ self.gateway._channelfactory._no_longer_opened(self.id) def waitclose(self, timeout=None): - """ wait until this channel is closed (or the remote side + """wait until this channel is closed (or the remote side otherwise signalled that no more data was being sent). The channel may still hold receiveable items, but not receive any more after waitclose() has returned. Exceptions from executing @@ -936,7 +936,7 @@ class BaseGateway(object): exc_info = sys.exc_info _sysex = sysex - id = "<slave>" + id = "<worker>" def __init__(self, io, id, _startcount=2): self.execmodel = io.execmodel @@ -1020,7 +1020,7 @@ self._receivepool.waitall() -class SlaveGateway(BaseGateway): +class WorkerGateway(BaseGateway): def _local_schedulexec(self, channel, sourcetask): sourcetask = loads_internal(sourcetask) self._execpool.spawn(self.executetask, (channel, sourcetask)) @@ -1061,7 +1061,7 @@ trace("joining receiver thread") self.join() except KeyboardInterrupt: - # in the slave we can't really do anything sensible + # in the worker we can't really do anything sensible trace("swallowing keyboardinterrupt, serve finished") def executetask(self, item): @@ -1319,7 +1319,7 @@ def dumps(obj): - """ return a serialized bytestring of the given obj. + """return a serialized bytestring of the given obj. The obj and all contained objects must be of a builtin python type (so nested dicts, sets, etc. are all ok but @@ -1334,7 +1334,7 @@ def loads(bytestring, py2str_as_py3str=False, py3str_as_py2str=False): - """ return the object as deserialized from the given bytestring. + """return the object as deserialized from the given bytestring. py2str_as_py3str: if true then string (str) objects previously dumped on Python2 will be loaded as Python3 @@ -1354,7 +1354,7 @@ def load(io, py2str_as_py3str=False, py3str_as_py2str=False): - """ derserialize an object form the specified stream. + """derserialize an object form the specified stream. Behaviour and parameters are otherwise the same as with ``loads`` """ @@ -1550,5 +1550,5 @@ def serve(io, id): - trace("creating slavegateway on {!r}".format(io)) - SlaveGateway(io=io, id=id, _startcount=2).serve() + trace("creating workergateway on {!r}".format(io)) + WorkerGateway(io=io, id=id, _startcount=2).serve() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/execnet/gateway_bootstrap.py new/execnet-1.8.0/execnet/gateway_bootstrap.py --- old/execnet-1.7.1/execnet/gateway_bootstrap.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/execnet/gateway_bootstrap.py 2021-01-27 12:18:46.000000000 +0100 @@ -29,7 +29,7 @@ "sys.stdout.write('1')", "sys.stdout.flush()", "execmodel = get_execmodel(%r)" % spec.execmodel, - "serve(init_popen_io(execmodel), id='%s-slave')" % spec.id, + "serve(init_popen_io(execmodel), id='%s-worker')" % spec.id, ) s = io.read(1) assert s == "1".encode("ascii"), repr(s) @@ -43,7 +43,7 @@ "execmodel = get_execmodel(%r)" % spec.execmodel, "io = init_popen_io(execmodel)", "io.write('1'.encode('ascii'))", - "serve(io, id='%s-slave')" % spec.id, + "serve(io, id='%s-worker')" % spec.id, ) s = io.read(1) assert s == "1".encode("ascii") @@ -67,7 +67,7 @@ " execmodel = get_execmodel('thread')", "io = SocketIO(clientsock, execmodel)", "io.write('1'.encode('ascii'))", - "serve(io, id='%s-slave')" % id, + "serve(io, id='%s-worker')" % id, ) s = io.read(1) assert s == "1".encode("ascii") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/execnet/gateway_io.py new/execnet-1.8.0/execnet/gateway_io.py --- old/execnet-1.7.1/execnet/gateway_io.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/execnet/gateway_io.py 2021-01-27 12:18:46.000000000 +0100 @@ -142,7 +142,7 @@ class ProxyIO(object): - """ A Proxy IO object allows to instantiate a Gateway + """A Proxy IO object allows to instantiate a Gateway through another "via" gateway. A master:ProxyIO object provides an IO object effectively connected to the sub via the forwarder. To achieve this, master:ProxyIO interacts diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/execnet/gateway_socket.py new/execnet-1.8.0/execnet/gateway_socket.py --- old/execnet-1.7.1/execnet/gateway_socket.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/execnet/gateway_socket.py 2021-01-27 12:18:46.000000000 +0100 @@ -54,8 +54,8 @@ def start_via(gateway, hostport=None): - """ return a host, port tuple, - after instanciating a socketserver on the given gateway + """return a host, port tuple, + after instanciating a socketserver on the given gateway """ if hostport is None: host, port = ("localhost", 0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/execnet/multi.py new/execnet-1.8.0/execnet/multi.py --- old/execnet-1.7.1/execnet/multi.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/execnet/multi.py 2021-01-27 12:18:46.000000000 +0100 @@ -25,7 +25,7 @@ defaultspec = "popen" def __init__(self, xspecs=(), execmodel="thread"): - """ initialize group and make gateways as specified. + """initialize group and make gateways as specified. execmodel can be 'thread' or 'eventlet'. """ self._gateways = [] @@ -51,7 +51,7 @@ return self._remote_execmodel def set_execmodel(self, execmodel, remote_execmodel=None): - """ Set the execution model for local and remote site. + """Set the execution model for local and remote site. execmodel can be one of "thread" or "eventlet" (XXX gevent). It determines the execution model for any newly created gateway. @@ -188,7 +188,7 @@ self.terminate(timeout=1.0) def terminate(self, timeout=None): - """ trigger exit of member gateways and wait for termination + """trigger exit of member gateways and wait for termination of member gateways and associated subprocesses. After waiting timeout seconds try to to kill local sub processes of popen- and ssh-gateways. Timeout defaults to None meaning @@ -223,8 +223,8 @@ self._gateways_to_join[:] = [] def remote_exec(self, source, **kwargs): - """ remote_exec source on all member gateways and return - MultiChannel connecting to all sub processes. + """remote_exec source on all member gateways and return + MultiChannel connecting to all sub processes. """ channels = [] for gw in self: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/execnet/rsync.py new/execnet-1.8.0/execnet/rsync.py --- old/execnet-1.7.1/execnet/rsync.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/execnet/rsync.py 2021-01-27 12:18:46.000000000 +0100 @@ -17,13 +17,13 @@ class RSync(object): - """ This class allows to send a directory structure (recursively) - to one or multiple remote filesystems. + """This class allows to send a directory structure (recursively) + to one or multiple remote filesystems. - There is limited support for symlinks, which means that symlinks - pointing to the sourcetree will be send "as is" while external - symlinks will be just copied (regardless of existance of such - a path on remote side). + There is limited support for symlinks, which means that symlinks + pointing to the sourcetree will be send "as is" while external + symlinks will be just copied (regardless of existance of such + a path on remote side). """ def __init__(self, sourcedir, callback=None, verbose=True): @@ -52,8 +52,7 @@ channel.send(42) def _done(self, channel): - """ Call all callbacks - """ + """Call all callbacks""" finishedcallback = self._channels.pop(channel) if finishedcallback: finishedcallback() @@ -66,8 +65,7 @@ self._callback("list", s, channel) def _send_item(self, channel, data): - """ Send one item - """ + """Send one item""" modified_rel_path, checksum = data modifiedpath = os.path.join(self._sourcedir, *modified_rel_path) try: @@ -100,7 +98,7 @@ print("{} <= {}".format(gateway, modified_rel_path)) def send(self, raises=True): - """ Sends a sourcedir to all added targets. Flag indicates + """Sends a sourcedir to all added targets. Flag indicates whether to raise an error or return in case of lack of targets """ @@ -143,8 +141,8 @@ assert "Unknown command %s" % command def add_target(self, gateway, destdir, finishedcallback=None, **options): - """ Adds a remote target specified via a gateway - and a remote destination directory. + """Adds a remote target specified via a gateway + and a remote destination directory. """ for name in options: assert name in ("delete",) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/execnet/script/socketserver.py new/execnet-1.8.0/execnet/script/socketserver.py --- old/execnet-1.7.1/execnet/script/socketserver.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/execnet/script/socketserver.py 2021-01-27 12:18:46.000000000 +0100 @@ -94,6 +94,7 @@ def startserver(serversock, loop=False): + execute_path = os.getcwd() try: while 1: try: @@ -108,6 +109,7 @@ else: excinfo = sys.exc_info() print_("got exception", excinfo[1]) + os.chdir(execute_path) if not loop: break finally: @@ -126,7 +128,8 @@ execmodel = get_execmodel("thread") serversock = bind_and_listen(hostport, execmodel) - startserver(serversock, loop=False) + startserver(serversock, loop=True) + elif __name__ == "__channelexec__": chan = globals()["channel"] execmodel = chan.gateway.execmodel diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/execnet/xspec.py new/execnet-1.8.0/execnet/xspec.py --- old/execnet-1.7.1/execnet/xspec.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/execnet/xspec.py 2021-01-27 12:18:46.000000000 +0100 @@ -5,12 +5,12 @@ class XSpec: - """ Execution Specification: key1=value1//key2=value2 ... - * keys need to be unique within the specification scope - * neither key nor value are allowed to contain "//" - * keys are not allowed to contain "=" - * keys are not allowed to start with underscore - * if no "=value" is given, assume a boolean True value + """Execution Specification: key1=value1//key2=value2 ... + * keys need to be unique within the specification scope + * neither key nor value are allowed to contain "//" + * keys are not allowed to contain "=" + * keys are not allowed to start with underscore + * if no "=value" is given, assume a boolean True value """ # XXX allow customization, for only allow specific key names diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/execnet.egg-info/PKG-INFO new/execnet-1.8.0/execnet.egg-info/PKG-INFO --- old/execnet-1.7.1/execnet.egg-info/PKG-INFO 2019-08-30 03:04:03.000000000 +0200 +++ new/execnet-1.8.0/execnet.egg-info/PKG-INFO 2021-01-27 12:18:52.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: execnet -Version: 1.7.1 +Version: 1.8.0 Summary: execnet: rapid multi-Python deployment Home-page: https://execnet.readthedocs.io/en/latest/ Author: holger krekel and others @@ -23,11 +23,8 @@ .. image:: https://img.shields.io/pypi/pyversions/execnet.svg :target: https://pypi.org/project/execnet/ - .. image:: https://travis-ci.org/pytest-dev/execnet.svg?branch=master - :target: https://travis-ci.org/pytest-dev/execnet - - .. image:: https://ci.appveyor.com/api/projects/status/n9qy8df16my4gds9/branch/master?svg=true - :target: https://ci.appveyor.com/project/pytestbot/execnet + .. image:: https://github.com/pytest-dev/execnet/workflows/build/badge.svg + :target: https://github.com/pytest-dev/execnet/actions?query=workflow%3Abuild .. image:: https://img.shields.io/badge/code%20style-black-000000.svg :target: https://github.com/python/black @@ -54,9 +51,6 @@ * grouped creation and robust termination of processes - * well tested between CPython 2.7, 3.4+, Jython 2.5.1 and PyPy 2.2 - interpreters. - * interoperable between Windows and Unix-ish systems. * integrates with different threading models, including standard @@ -79,11 +73,12 @@ Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy -Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* +Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.* Provides-Extra: testing diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/execnet.egg-info/SOURCES.txt new/execnet-1.8.0/execnet.egg-info/SOURCES.txt --- old/execnet-1.7.1/execnet.egg-info/SOURCES.txt 2019-08-30 03:04:03.000000000 +0200 +++ new/execnet-1.8.0/execnet.egg-info/SOURCES.txt 2021-01-27 12:18:52.000000000 +0100 @@ -1,15 +1,14 @@ .gitignore .pre-commit-config.yaml -.travis.yml CHANGELOG.rst -HOWTORELEASE.rst ISSUES.txt LICENSE README.rst -appveyor.yml +RELEASING.rst setup.cfg setup.py tox.ini +.github/workflows/main.yml doc/Makefile doc/__init__.py doc/basics.rst @@ -74,7 +73,6 @@ testing/test_basics.py testing/test_channel.py testing/test_compatibility_regressions.py -testing/test_fixes.py testing/test_gateway.py testing/test_multi.py testing/test_rsync.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/setup.py new/execnet-1.8.0/setup.py --- old/execnet-1.7.1/setup.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/setup.py 2021-01-27 12:18:46.000000000 +0100 @@ -26,15 +26,16 @@ "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", ], packages=["execnet", "execnet.script"], - python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", + python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*", install_requires=["apipkg>=1.4"], extras_require={"testing": ["pre-commit"]}, setup_requires=["setuptools_scm"], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/testing/test_basics.py new/execnet-1.8.0/testing/test_basics.py --- old/execnet-1.7.1/testing/test_basics.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/testing/test_basics.py 2021-01-27 12:18:46.000000000 +0100 @@ -282,7 +282,7 @@ def test_exectask(execmodel): io = py.io.BytesIO() io.execmodel = execmodel - gw = gateway_base.SlaveGateway(io, id="something") + gw = gateway_base.WorkerGateway(io, id="something") ch = PseudoChannel() gw.executetask((ch, ("raise ValueError()", None, {}))) assert "ValueError" in str(ch._closed[0]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/testing/test_fixes.py new/execnet-1.8.0/testing/test_fixes.py --- old/execnet-1.7.1/testing/test_fixes.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/testing/test_fixes.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- -import sys - -import pytest -from execnet import Group -from execnet.gateway_bootstrap import fix_pid_for_jython_popen - - -def test_jython_bootstrap_not_on_remote(): - group = Group() - try: - group.makegateway("popen//id=via") - group.makegateway("popen//via=via") - finally: - group.terminate(timeout=1.0) - - -@pytest.mark.xfail( - condition=hasattr(sys, "pypy_version_info") and sys.platform.startswith("win"), - reason="failing on Windows on PyPy (#63)", -) -def test_jython_bootstrap_fix(): - group = Group() - gw = group.makegateway("popen") - popen = gw._io.popen - real_pid = popen.pid - try: - # nothing happens when calling it on a normal seyup - fix_pid_for_jython_popen(gw) - assert popen.pid == real_pid - - # if there is no pid for a popen gw, restore - popen.pid = None - fix_pid_for_jython_popen(gw) - assert popen.pid == real_pid - - # if there is no pid for other gw, ignore - they are remote - gw.spec.popen = False - popen.pid = None - fix_pid_for_jython_popen(gw) - assert popen.pid is None - - finally: - popen.pid = real_pid - group.terminate(timeout=1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/testing/test_gateway.py new/execnet-1.8.0/testing/test_gateway.py --- old/execnet-1.7.1/testing/test_gateway.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/testing/test_gateway.py 2021-01-27 12:18:46.000000000 +0100 @@ -470,14 +470,14 @@ fn = gw.remote_exec( "import execnet;channel.send(execnet.gateway_base.fn)" ).receive() - slavefile = py.path.local(fn) - assert slavefile.check() - slave_line = "creating slavegateway" - for line in slavefile.readlines(): - if slave_line in line: + workerfile = py.path.local(fn) + assert workerfile.check() + worker_line = "creating workergateway" + for line in workerfile.readlines(): + if worker_line in line: break else: - py.test.fail("did not find {!r} in tracefile".format(slave_line)) + py.test.fail("did not find {!r} in tracefile".format(worker_line)) gw.exit() @skip_win_pypy @@ -487,8 +487,8 @@ gw = makegateway("popen") pid = gw.remote_exec("import os ; channel.send(os.getpid())").receive() out, err = capfd.readouterr() - slave_line = "[%s] creating slavegateway" % pid - assert slave_line in err + worker_line = "[%s] creating workergateway" % pid + assert worker_line in err gw.exit() def test_no_tracing_by_default(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/testing/test_multi.py new/execnet-1.8.0/testing/test_multi.py --- old/execnet-1.7.1/testing/test_multi.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/testing/test_multi.py 2021-01-27 12:18:46.000000000 +0100 @@ -221,7 +221,7 @@ def test_terminate_with_proxying(self): group = Group() group.makegateway("popen//id=master") - group.makegateway("popen//via=master//id=slave") + group.makegateway("popen//via=master//id=worker") group.terminate(1.0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/testing/test_serializer.py new/execnet-1.8.0/testing/test_serializer.py --- old/execnet-1.7.1/testing/test_serializer.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/testing/test_serializer.py 2021-01-27 12:18:46.000000000 +0100 @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import os import subprocess import sys import tempfile @@ -148,6 +149,14 @@ @py.test.mark.parametrize(["tp_name", "repr"], simple_tests) def test_simple(tp_name, repr, dump, load): + if ( + sys.platform.startswith("win") + and os.environ.get("GITHUB_ACTIONS", "") == "true" + ): + pytest.skip( + "GitHub Actions on Windows doesn't support Python 2 and 3 at the same time." + ) + p = dump(repr) tp, v = load(p) assert tp == tp_name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/testing/test_termination.py new/execnet-1.8.0/testing/test_termination.py --- old/execnet-1.7.1/testing/test_termination.py 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/testing/test_termination.py 2021-01-27 12:18:46.000000000 +0100 @@ -15,7 +15,7 @@ ) -def test_exit_blocked_slave_execution_gateway(anypython, makegateway, pool): +def test_exit_blocked_worker_execution_gateway(anypython, makegateway, pool): gateway = makegateway("popen//python=%s" % anypython) gateway.remote_exec( """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/execnet-1.7.1/tox.ini new/execnet-1.8.0/tox.ini --- old/execnet-1.7.1/tox.ini 2019-08-30 03:03:48.000000000 +0200 +++ new/execnet-1.8.0/tox.ini 2021-01-27 12:18:46.000000000 +0100 @@ -5,6 +5,7 @@ deps= pytest pytest-timeout +passenv = GITHUB_ACTIONS commands= pytest {posargs:testing}