Hello community,

here is the log from the commit of package python-pytest-parallel for 
openSUSE:Factory checked in at 2020-05-03 22:47:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pytest-parallel (Old)
 and      /work/SRC/openSUSE:Factory/.python-pytest-parallel.new.2738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pytest-parallel"

Sun May  3 22:47:12 2020 rev:3 rq:799797 version:0.1.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-pytest-parallel/python-pytest-parallel.changes
    2020-03-22 14:17:46.434080059 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-pytest-parallel.new.2738/python-pytest-parallel.changes
  2020-05-03 22:47:12.915152336 +0200
@@ -1,0 +2,7 @@
+Sun May  3 07:34:08 UTC 2020 - Tomáš Chvátal <[email protected]>
+
+- Update to 0.1.0:
+  * No changelog
+- Remove no longer needed pytest-parallel-pr63-tblib-pickling.patch
+
+-------------------------------------------------------------------

Old:
----
  pytest-parallel-0.0.10.tar.gz
  pytest-parallel-pr63-tblib-pickling.patch

New:
----
  pytest-parallel-0.1.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-pytest-parallel.spec ++++++
--- /var/tmp/diff_new_pack.YF2EHi/_old  2020-05-03 22:47:14.471155501 +0200
+++ /var/tmp/diff_new_pack.YF2EHi/_new  2020-05-03 22:47:14.475155509 +0200
@@ -19,13 +19,13 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define skip_python2 1
 Name:           python-pytest-parallel
-Version:        0.0.10
+Version:        0.1.0
 Release:        0
 Summary:        Pytest plugin for parallel and concurrent testing
 License:        MIT
 URL:            https://github.com/browsertron/pytest-parallel
 Source:         
https://github.com/browsertron/pytest-parallel/archive/%{version}.tar.gz#/pytest-parallel-%{version}.tar.gz
-Patch0:         pytest-parallel-pr63-tblib-pickling.patch
+BuildRequires:  %{python_module base >= 3.6}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
@@ -44,7 +44,6 @@
 
 %prep
 %setup -q -n pytest-parallel-%{version}
-%patch0 -p1
 
 %build
 %python_build

++++++ pytest-parallel-0.0.10.tar.gz -> pytest-parallel-0.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-parallel-0.0.10/.ci/codecov.yml 
new/pytest-parallel-0.1.0/.ci/codecov.yml
--- old/pytest-parallel-0.0.10/.ci/codecov.yml  1970-01-01 01:00:00.000000000 
+0100
+++ new/pytest-parallel-0.1.0/.ci/codecov.yml   2020-04-30 20:19:07.000000000 
+0200
@@ -0,0 +1 @@
+comment: off
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-parallel-0.0.10/.ci/report-coverage.sh 
new/pytest-parallel-0.1.0/.ci/report-coverage.sh
--- old/pytest-parallel-0.0.10/.ci/report-coverage.sh   1970-01-01 
01:00:00.000000000 +0100
+++ new/pytest-parallel-0.1.0/.ci/report-coverage.sh    2020-04-30 
20:19:07.000000000 +0200
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# Submit/report coverage when run from Travis for "coverage" tox factors.
+
+coverage_xml="coverage-travis.xml"
+if ! [ -f "$coverage_xml" ]; then
+  exit
+fi
+
+set -ex
+
+codecov_bash=/tmp/codecov-bash.sh
+
+if ! [ -f "$codecov_bash" ]; then
+  curl -sSf --retry 5 -o "$codecov_bash" https://codecov.io/bash
+  chmod +x "$codecov_bash"
+fi
+
+"$codecov_bash" -Z -X fix -f "$coverage_xml" -n "${TOX_ENV_NAME%-coverage}" -F 
"$TRAVIS_OS_NAME,${TOX_ENV_NAME%-coverage}"
+rm "$coverage_xml"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-parallel-0.0.10/.coveragerc 
new/pytest-parallel-0.1.0/.coveragerc
--- old/pytest-parallel-0.0.10/.coveragerc      1970-01-01 01:00:00.000000000 
+0100
+++ new/pytest-parallel-0.1.0/.coveragerc       2020-04-30 20:19:07.000000000 
+0200
@@ -0,0 +1,20 @@
+[coverage:run]
+include =
+  pytest_parallel/*
+  tests/*
+  */lib/python*/site-packages/pytest_parallel/*
+  */pypy*/site-packages/pytest_parallel/*
+  *\Lib\site-packages\pytest_parallel\*
+branch = 1
+parallel = 1
+
+[coverage:paths]
+source = pytest_parallel/
+  */lib/python*/site-packages/pytest_parallel/
+  */pypy*/site-packages/pytest_parallel/
+  *\Lib\site-packages\pytest_parallel\
+
+[coverage:report]
+exclude_lines =
+    \#\s*pragma: no cover
+    ^\s*raise NotImplementedError\b
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-parallel-0.0.10/.gitignore 
new/pytest-parallel-0.1.0/.gitignore
--- old/pytest-parallel-0.0.10/.gitignore       2019-11-22 20:49:38.000000000 
+0100
+++ new/pytest-parallel-0.1.0/.gitignore        2020-04-30 20:19:07.000000000 
+0200
@@ -1,6 +1,7 @@
 .DS_Store
 .pytest_cache
 .vscode
+tmp
 
 # Byte-compiled / optimized / DLL files
 __pycache__/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-parallel-0.0.10/.travis.yml 
new/pytest-parallel-0.1.0/.travis.yml
--- old/pytest-parallel-0.0.10/.travis.yml      2019-11-22 20:49:38.000000000 
+0100
+++ new/pytest-parallel-0.1.0/.travis.yml       2020-04-30 20:19:07.000000000 
+0200
@@ -4,12 +4,9 @@
   only:
   - master
 cache: pip
-python:
-  - "3.6"
-  - "3.7"
 env:
   global:
-    - PYTEST_ADDOPTS=-vv
+    - PYTEST_ADDOPTS="-vv --cov-report=xml:coverage-travis.xml"
 install:
   - pip install pipenv
   - pipenv run pip install pip==18.0
@@ -18,5 +15,14 @@
   - pipenv run test
 jobs:
   include:
+    - name: py36
+      python: "3.6"
+      env: TOXENV=py36-coverage
+    - name: py37
+      python: "3.7"
+      env: TOXENV=py37-coverage
+    - name: py38
+      python: "3.8"
+      env: TOXENV=py38-coverage
     - name: lint
       script: pipenv run lint
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-parallel-0.0.10/Pipfile 
new/pytest-parallel-0.1.0/Pipfile
--- old/pytest-parallel-0.0.10/Pipfile  2019-11-22 20:49:38.000000000 +0100
+++ new/pytest-parallel-0.1.0/Pipfile   2020-04-30 20:19:07.000000000 +0200
@@ -17,6 +17,7 @@
 tox-pyenv = ">=1.1.0"
 invoke = ">=0.23.0"
 tox-travis = "*"
+importlib_resources = "*"
 
 [requires]
 python_version = "3.7"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-parallel-0.0.10/Pipfile.lock 
new/pytest-parallel-0.1.0/Pipfile.lock
--- old/pytest-parallel-0.0.10/Pipfile.lock     2019-11-22 20:49:38.000000000 
+0100
+++ new/pytest-parallel-0.1.0/Pipfile.lock      2020-04-30 20:19:07.000000000 
+0200
@@ -1,7 +1,7 @@
 {
     "_meta": {
         "hash": {
-            "sha256": 
"342ab5982614ef1dac50227d90cd8f3bdf2fd5488bb0b64d5fa0e9e829966578"
+            "sha256": 
"1f428adedd0b10ef5c329bc2ea80db577b9d451f05903ecb485592850f39b06b"
         },
         "pipfile-spec": 6,
         "requires": {
@@ -16,13 +16,6 @@
         ]
     },
     "default": {
-        "atomicwrites": {
-            "hashes": [
-                
"sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4",
-                
"sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"
-            ],
-            "version": "==1.3.0"
-        },
         "attrs": {
             "hashes": [
                 
"sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c",
@@ -32,18 +25,25 @@
         },
         "importlib-metadata": {
             "hashes": [
-                
"sha256:aa18d7378b00b40847790e7c27e11673d7fed219354109d0e7b9e5b25dc3ad26",
-                
"sha256:d5f18a79777f3aa179c145737780282e27b508fc8fd688cb17c7a813e8bd39af"
+                
"sha256:2a688cbaa90e0cc587f1df48bdc97a6eadccdcd9c35fb3f976a09e3b5016d90f",
+                
"sha256:34513a8a0c4962bc66d35b359558fd8a5e10cd472d37aec5f66858addef32c1e"
             ],
             "markers": "python_version < '3.8'",
-            "version": "==0.23"
+            "version": "==1.6.0"
         },
         "more-itertools": {
             "hashes": [
-                
"sha256:409cd48d4db7052af495b09dec721011634af3753ae1ef92d2b32f73a745f832",
-                
"sha256:92b8c4b06dac4f0611c0729b2f2ede52b2e1bac1ab48f089c7ddc12e26bb60c4"
+                
"sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c",
+                
"sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507"
+            ],
+            "version": "==8.2.0"
+        },
+        "packaging": {
+            "hashes": [
+                
"sha256:3c292b474fda1671ec57d46d739d072bfd495a4f51ad01a055121d81e952b7a3",
+                
"sha256:82f77b9bee21c1bafbf35a84905d604d5d1223801d639cf3ed140bd651c08752"
             ],
-            "version": "==7.2.0"
+            "version": "==20.3"
         },
         "pluggy": {
             "hashes": [
@@ -54,55 +54,84 @@
         },
         "py": {
             "hashes": [
-                
"sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa",
-                
"sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53"
+                
"sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa",
+                
"sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0"
             ],
-            "version": "==1.8.0"
+            "version": "==1.8.1"
+        },
+        "pyparsing": {
+            "hashes": [
+                
"sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1",
+                
"sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"
+            ],
+            "version": "==2.4.7"
         },
         "pytest": {
             "hashes": [
-                
"sha256:7e258ee50338f4e46957f9e09a0f10fb1c2d05493fa901d113a8dafd0790de4e",
-                
"sha256:9332147e9af2dcf46cd7ceb14d5acadb6564744ddff1fe8c17f0ce60ece7d9a2"
+                
"sha256:0e5b30f5cb04e887b91b1ee519fa3d89049595f428c1db76e73bd7f17b09b172",
+                
"sha256:84dde37075b8805f3d1f392cc47e38a0e59518fb46a431cfdaf7cf1ce805f970"
             ],
             "index": "pypi",
-            "version": "==3.8.2"
+            "version": "==5.4.1"
         },
         "six": {
             "hashes": [
-                
"sha256:1f1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd",
-                
"sha256:30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66"
+                
"sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a",
+                
"sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"
             ],
-            "version": "==1.13.0"
+            "version": "==1.14.0"
+        },
+        "tblib": {
+            "hashes": [
+                
"sha256:229bee3754cb5d98b4837dd5c4405e80cfab57cb9f93220410ad367f8b352344",
+                
"sha256:e222f44485d45ed13fada73b57775e2ff9bd8af62160120bbb6679f5ad80315b"
+            ],
+            "index": "pypi",
+            "version": "==1.6.0"
+        },
+        "wcwidth": {
+            "hashes": [
+                
"sha256:cafe2186b3c009a04067022ce1dcd79cb38d8d65ee4f4791b8888d6599d1bbe1",
+                
"sha256:ee73862862a156bf77ff92b09034fc4825dd3af9cf81bc5b360668d425f3c5f1"
+            ],
+            "version": "==0.1.9"
         },
         "zipp": {
             "hashes": [
-                
"sha256:3718b1cbcd963c7d4c5511a8240812904164b7f381b647143a89d3b98f9bcd8e",
-                
"sha256:f06903e9f1f43b12d371004b4ac7b06ab39a44adc747266928ae6debfa7b3335"
+                
"sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b",
+                
"sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"
             ],
-            "version": "==0.6.0"
+            "version": "==3.1.0"
         }
     },
     "develop": {
+        "appdirs": {
+            "hashes": [
+                
"sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92",
+                
"sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"
+            ],
+            "version": "==1.4.3"
+        },
         "astroid": {
             "hashes": [
-                
"sha256:71ea07f44df9568a75d0f354c49143a4575d90645e9fead6dfb52c26a85ed13a",
-                
"sha256:840947ebfa8b58f318d42301cf8c0a20fd794a33b61cc4638e28e9e61ba32f42"
+                
"sha256:29fa5d46a2404d01c834fcb802a3943685f1fc538eb2a02a161349f5505ac196",
+                
"sha256:2fecea42b20abb1922ed65c7b5be27edfba97211b04b2b6abc6a43549a024ea6"
             ],
-            "version": "==2.3.3"
+            "version": "==2.4.0"
         },
         "bleach": {
             "hashes": [
-                
"sha256:213336e49e102af26d9cde77dd2d0397afabc5a6bf2fed985dc35b5d1e285a16",
-                
"sha256:3fdf7f77adcf649c9911387df51254b813185e32b2c6619f690b593a617e19fa"
+                
"sha256:2bce3d8fab545a6528c8fa5d9f9ae8ebc85a56da365c7f85180bfe96a35ef22f",
+                
"sha256:3c4c520fdb9db59ef139915a5db79f8b51bc2a7257ea0389f30c846883430a4b"
             ],
-            "version": "==3.1.0"
+            "version": "==3.1.5"
         },
         "certifi": {
             "hashes": [
-                
"sha256:e4f3620cfea4f83eedc95b24abd9cd56f3c4b146dd0177e83a21b4eb49e21e50",
-                
"sha256:fd7c7c74727ddcf00e9acd26bba8da604ffec95bf1c2144e67aff7a8b50e6cef"
+                
"sha256:1d987a998c75633c40847cc966fcf5904906c920a7f17ef374f5aa4282abd304",
+                
"sha256:51fcb31174be6e6664c5f69e3e1691a2d72a1a12e90f872cbdb1567eb47b6519"
             ],
-            "version": "==2019.9.11"
+            "version": "==2020.4.5.1"
         },
         "chardet": {
             "hashes": [
@@ -111,13 +140,25 @@
             ],
             "version": "==3.0.4"
         },
+        "distlib": {
+            "hashes": [
+                
"sha256:2e166e231a26b36d6dfe35a48c4464346620f8645ed0ace01ee31822b288de21"
+            ],
+            "version": "==0.3.0"
+        },
         "docutils": {
             "hashes": [
-                
"sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0",
-                
"sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827",
-                
"sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99"
+                
"sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af",
+                
"sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"
+            ],
+            "version": "==0.16"
+        },
+        "entrypoints": {
+            "hashes": [
+                
"sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19",
+                
"sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"
             ],
-            "version": "==0.15.2"
+            "version": "==0.3"
         },
         "filelock": {
             "hashes": [
@@ -128,35 +169,43 @@
         },
         "flake8": {
             "hashes": [
-                
"sha256:7253265f7abd8b313e3892944044a365e3f4ac3fcdcfb4298f55ee9ddf188ba0",
-                
"sha256:c7841163e2b576d435799169b78703ad6ac1bbb0f199994fc05f700b2a90ea37"
+                
"sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb",
+                
"sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca"
             ],
             "index": "pypi",
-            "version": "==3.5.0"
+            "version": "==3.7.9"
         },
         "idna": {
             "hashes": [
-                
"sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
-                
"sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
+                
"sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb",
+                
"sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"
             ],
-            "version": "==2.8"
+            "version": "==2.9"
         },
         "importlib-metadata": {
             "hashes": [
-                
"sha256:aa18d7378b00b40847790e7c27e11673d7fed219354109d0e7b9e5b25dc3ad26",
-                
"sha256:d5f18a79777f3aa179c145737780282e27b508fc8fd688cb17c7a813e8bd39af"
+                
"sha256:2a688cbaa90e0cc587f1df48bdc97a6eadccdcd9c35fb3f976a09e3b5016d90f",
+                
"sha256:34513a8a0c4962bc66d35b359558fd8a5e10cd472d37aec5f66858addef32c1e"
             ],
             "markers": "python_version < '3.8'",
-            "version": "==0.23"
+            "version": "==1.6.0"
+        },
+        "importlib-resources": {
+            "hashes": [
+                
"sha256:6f87df66833e1942667108628ec48900e02a4ab4ad850e25fbf07cb17cf734ca",
+                
"sha256:85dc0b9b325ff78c8bef2e4ff42616094e16b98ebd5e3b50fe7e2f0bbcdcde49"
+            ],
+            "index": "pypi",
+            "version": "==1.5.0"
         },
         "invoke": {
             "hashes": [
-                
"sha256:4f4de934b15c2276caa4fbc5a3b8a61c0eb0b234f2be1780d2b793321995c2d6",
-                
"sha256:dc492f8f17a0746e92081aec3f86ae0b4750bf41607ea2ad87e5a7b5705121b7",
-                
"sha256:eb6f9262d4d25b40330fb21d1e99bf0f85011ccc3526980f8a3eaedd4b43892e"
+                
"sha256:87b3ef9d72a1667e104f89b159eaf8a514dbf2f3576885b2bbdefe74c3fb2132",
+                
"sha256:93e12876d88130c8e0d7fd6618dd5387d6b36da55ad541481dfa5e001656f134",
+                
"sha256:de3f23bfe669e3db1085789fd859eb8ca8e0c5d9c20811e2407fa042e8a5e15d"
             ],
             "index": "pypi",
-            "version": "==1.2.0"
+            "version": "==1.4.1"
         },
         "isort": {
             "hashes": [
@@ -165,6 +214,13 @@
             ],
             "version": "==4.3.21"
         },
+        "keyring": {
+            "hashes": [
+                
"sha256:197fd5903901030ef7b82fe247f43cfed2c157a28e7747d1cfcf4bc5e699dd03",
+                
"sha256:8179b1cdcdcbc221456b5b74e6b7cfa06f8dd9f239eb81892166d9223d82c5ba"
+            ],
+            "version": "==21.2.0"
+        },
         "lazy-object-proxy": {
             "hashes": [
                 
"sha256:0c4b206227a8097f05c4dbdd323c50edf81f15db3b8dc064d08c62d37e1a504d",
@@ -198,12 +254,12 @@
             ],
             "version": "==0.6.1"
         },
-        "more-itertools": {
+        "packaging": {
             "hashes": [
-                
"sha256:409cd48d4db7052af495b09dec721011634af3753ae1ef92d2b32f73a745f832",
-                
"sha256:92b8c4b06dac4f0611c0729b2f2ede52b2e1bac1ab48f089c7ddc12e26bb60c4"
+                
"sha256:3c292b474fda1671ec57d46d739d072bfd495a4f51ad01a055121d81e952b7a3",
+                
"sha256:82f77b9bee21c1bafbf35a84905d604d5d1223801d639cf3ed140bd651c08752"
             ],
-            "version": "==7.2.0"
+            "version": "==20.3"
         },
         "pkginfo": {
             "hashes": [
@@ -221,53 +277,60 @@
         },
         "py": {
             "hashes": [
-                
"sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa",
-                
"sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53"
+                
"sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa",
+                
"sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0"
             ],
-            "version": "==1.8.0"
+            "version": "==1.8.1"
         },
         "pycodestyle": {
             "hashes": [
-                
"sha256:682256a5b318149ca0d2a9185d365d8864a768a28db66a84a2ea946bcc426766",
-                
"sha256:6c4245ade1edfad79c3446fadfc96b0de2759662dc29d07d80a6f27ad1ca6ba9"
+                
"sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56",
+                
"sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c"
             ],
-            "version": "==2.3.1"
+            "version": "==2.5.0"
         },
         "pyflakes": {
             "hashes": [
-                
"sha256:08bd6a50edf8cffa9fa09a463063c425ecaaf10d1eb0335a7e8b1401aef89e6f",
-                
"sha256:8d616a382f243dbf19b54743f280b80198be0bca3a5396f1d2e1fca6223e8805"
+                
"sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0",
+                
"sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"
             ],
-            "version": "==1.6.0"
+            "version": "==2.1.1"
         },
         "pygments": {
             "hashes": [
-                
"sha256:71e430bc85c88a430f000ac1d9b331d2407f681d6f6aec95e8bcfbc3df5b0127",
-                
"sha256:881c4c157e45f30af185c1ffe8d549d48ac9127433f2c380c24b84572ad66297"
+                
"sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44",
+                
"sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324"
             ],
-            "version": "==2.4.2"
+            "version": "==2.6.1"
         },
         "pylint": {
             "hashes": [
-                
"sha256:1d6d3622c94b4887115fe5204982eee66fdd8a951cf98635ee5caee6ec98c3ec",
-                
"sha256:31142f764d2a7cd41df5196f9933b12b7ee55e73ef12204b648ad7e556c119fb"
+                
"sha256:588e114e3f9a1630428c35b7dd1c82c1c93e1b0e78ee312ae4724c5e1a1e0245",
+                
"sha256:bd556ba95a4cf55a1fc0004c00cf4560b1e70598a54a74c6904d933c8f3bd5a8"
             ],
             "index": "pypi",
-            "version": "==2.1.1"
+            "version": "==2.5.0"
+        },
+        "pyparsing": {
+            "hashes": [
+                
"sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1",
+                
"sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"
+            ],
+            "version": "==2.4.7"
         },
         "readme-renderer": {
             "hashes": [
-                
"sha256:bb16f55b259f27f75f640acf5e00cf897845a8b3e4731b5c1a436e4b8529202f",
-                
"sha256:c8532b79afc0375a85f10433eca157d6b50f7d6990f337fa498c96cd4bfc203d"
+                
"sha256:cbe9db71defedd2428a1589cdc545f9bd98e59297449f69d721ef8f1cfced68d",
+                
"sha256:cc4957a803106e820d05d14f71033092537a22daa4f406dfbdd61177e0936376"
             ],
-            "version": "==24.0"
+            "version": "==26.0"
         },
         "requests": {
             "hashes": [
-                
"sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4",
-                
"sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"
+                
"sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee",
+                
"sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6"
             ],
-            "version": "==2.22.0"
+            "version": "==2.23.0"
         },
         "requests-toolbelt": {
             "hashes": [
@@ -278,10 +341,10 @@
         },
         "six": {
             "hashes": [
-                
"sha256:1f1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd",
-                
"sha256:30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66"
+                
"sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a",
+                
"sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"
             ],
-            "version": "==1.13.0"
+            "version": "==1.14.0"
         },
         "toml": {
             "hashes": [
@@ -292,11 +355,11 @@
         },
         "tox": {
             "hashes": [
-                
"sha256:217fb84aecf9792a98f93f07cfcaf014205a76c64e52bd7c2b4135458e6ad2a1",
-                
"sha256:4baeb3d8ebdcd9f43afce38aa67d06f1165a87d221d5bb21e8b39a0d4880c134"
+                
"sha256:a4a6689045d93c208d77230853b28058b7513f5123647b67bf012f82fa168303",
+                
"sha256:b2c4b91c975ea5c11463d9ca00bebf82654439c5df0f614807b9bdec62cc9471"
             ],
             "index": "pypi",
-            "version": "==3.5.2"
+            "version": "==3.14.6"
         },
         "tox-pyenv": {
             "hashes": [
@@ -308,66 +371,67 @@
         },
         "tox-travis": {
             "hashes": [
-                
"sha256:7e2f0b9db1ff9521da6a32a34aa4bfe292ea1c90ff8eb26001bf52f44ca0dc47"
+                
"sha256:442c96b078333c94e272d0e90e4582e35e0529ea98bcd2f7f96053d690c4e7a4",
+                
"sha256:465cd8f71ad878962a3fce0e9e2e213994e0ae4e0c30f87fe6af1b04ea282dc4"
             ],
             "index": "pypi",
-            "version": "==0.11"
+            "version": "==0.12"
         },
         "tqdm": {
             "hashes": [
-                
"sha256:5a1f3d58f3eb53264387394387fe23df469d2a3fab98c9e7f99d5c146c119873",
-                
"sha256:f1a1613fee07cc30a253051617f2a219a785c58877f9f6bfa129446cbaf8b4c1"
+                
"sha256:00339634a22c10a7a22476ee946bbde2dbe48d042ded784e4d88e0236eca5d81",
+                
"sha256:ea9e3fd6bd9a37e8783d75bfc4c1faf3c6813da6bd1c3e776488b41ec683af94"
             ],
-            "version": "==4.39.0"
+            "version": "==4.45.0"
         },
         "twine": {
             "hashes": [
-                
"sha256:7d89bc6acafb31d124e6e5b295ef26ac77030bf098960c2a4c4e058335827c5c",
-                
"sha256:fad6f1251195f7ddd1460cb76d6ea106c93adb4e56c41e0da79658e56e547d2c"
+                
"sha256:c1af8ca391e43b0a06bbc155f7f67db0bf0d19d284bfc88d1675da497a946124",
+                
"sha256:d561a5e511f70275e5a485a6275ff61851c16ffcb3a95a602189161112d9f160"
             ],
             "index": "pypi",
-            "version": "==1.12.1"
+            "version": "==3.1.1"
         },
         "typed-ast": {
             "hashes": [
-                
"sha256:1170afa46a3799e18b4c977777ce137bb53c7485379d9706af8a59f2ea1aa161",
-                
"sha256:18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e",
-                
"sha256:262c247a82d005e43b5b7f69aff746370538e176131c32dda9cb0f324d27141e",
-                
"sha256:2b907eb046d049bcd9892e3076c7a6456c93a25bebfe554e931620c90e6a25b0",
-                
"sha256:354c16e5babd09f5cb0ee000d54cfa38401d8b8891eefa878ac772f827181a3c",
-                
"sha256:48e5b1e71f25cfdef98b013263a88d7145879fbb2d5185f2a0c79fa7ebbeae47",
-                
"sha256:4e0b70c6fc4d010f8107726af5fd37921b666f5b31d9331f0bd24ad9a088e631",
-                
"sha256:630968c5cdee51a11c05a30453f8cd65e0cc1d2ad0d9192819df9978984529f4",
-                
"sha256:66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34",
-                
"sha256:71211d26ffd12d63a83e079ff258ac9d56a1376a25bc80b1cdcdf601b855b90b",
-                
"sha256:7954560051331d003b4e2b3eb822d9dd2e376fa4f6d98fee32f452f52dd6ebb2",
-                
"sha256:838997f4310012cf2e1ad3803bce2f3402e9ffb71ded61b5ee22617b3a7f6b6e",
-                
"sha256:95bd11af7eafc16e829af2d3df510cecfd4387f6453355188342c3e79a2ec87a",
-                
"sha256:bc6c7d3fa1325a0c6613512a093bc2a2a15aeec350451cbdf9e1d4bffe3e3233",
-                
"sha256:cc34a6f5b426748a507dd5d1de4c1978f2eb5626d51326e43280941206c209e1",
-                
"sha256:d755f03c1e4a51e9b24d899561fec4ccaf51f210d52abdf8c07ee2849b212a36",
-                
"sha256:d7c45933b1bdfaf9f36c579671fec15d25b06c8398f113dab64c18ed1adda01d",
-                
"sha256:d896919306dd0aa22d0132f62a1b78d11aaf4c9fc5b3410d3c666b818191630a",
-                
"sha256:fdc1c9bbf79510b76408840e009ed65958feba92a88833cdceecff93ae8fff66",
-                
"sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12"
+                
"sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355",
+                
"sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919",
+                
"sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa",
+                
"sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652",
+                
"sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75",
+                
"sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01",
+                
"sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d",
+                
"sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1",
+                
"sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907",
+                
"sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c",
+                
"sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3",
+                
"sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b",
+                
"sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614",
+                
"sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb",
+                
"sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b",
+                
"sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41",
+                
"sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6",
+                
"sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34",
+                
"sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe",
+                
"sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4",
+                
"sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7"
             ],
             "markers": "implementation_name == 'cpython' and python_version < 
'3.8'",
-            "version": "==1.4.0"
+            "version": "==1.4.1"
         },
         "urllib3": {
             "hashes": [
-                
"sha256:a8a318824cc77d1fd4b2bec2ded92646630d7fe8619497b142c84a9e6f5a7293",
-                
"sha256:f3c5fd51747d450d4dcf6f923c81f78f811aab8205fda64b0aba34a4e48b0745"
+                
"sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527",
+                
"sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115"
             ],
-            "index": "pypi",
-            "version": "==1.25.7"
+            "version": "==1.25.9"
         },
         "virtualenv": {
             "hashes": [
-                
"sha256:11cb4608930d5fd3afb545ecf8db83fa50e1f96fc4fca80c94b07d2c83146589",
-                
"sha256:d257bb3773e48cac60e475a19b608996c73f4d333b3ba2e4e57d5ac6134e0136"
+                
"sha256:5021396e8f03d0d002a770da90e31e61159684db2859d0ba4850fbea752aa675",
+                
"sha256:ac53ade75ca189bc97b6c1d9ec0f1a50efe33cbf178ae09452dcd9fd309013c1"
             ],
-            "version": "==16.7.7"
+            "version": "==20.0.18"
         },
         "webencodings": {
             "hashes": [
@@ -378,24 +442,24 @@
         },
         "wheel": {
             "hashes": [
-                
"sha256:9fa1f772f1a2df2bd00ddb4fa57e1cc349301e1facb98fbe62329803a9ff1196",
-                
"sha256:d215f4520a1ba1851a3c00ba2b4122665cd3d6b0834d2ba2816198b1e3024a0e"
+                
"sha256:8788e9155fe14f54164c1b9eb0a319d98ef02c160725587ad60f14ddc57b6f96",
+                
"sha256:df277cb51e61359aba502208d680f90c0493adec6f0e848af94948778aed386e"
             ],
             "index": "pypi",
-            "version": "==0.32.1"
+            "version": "==0.34.2"
         },
         "wrapt": {
             "hashes": [
-                
"sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1"
+                
"sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"
             ],
-            "version": "==1.11.2"
+            "version": "==1.12.1"
         },
         "zipp": {
             "hashes": [
-                
"sha256:3718b1cbcd963c7d4c5511a8240812904164b7f381b647143a89d3b98f9bcd8e",
-                
"sha256:f06903e9f1f43b12d371004b4ac7b06ab39a44adc747266928ae6debfa7b3335"
+                
"sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b",
+                
"sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"
             ],
-            "version": "==0.6.0"
+            "version": "==3.1.0"
         }
     }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-parallel-0.0.10/README.md 
new/pytest-parallel-0.1.0/README.md
--- old/pytest-parallel-0.0.10/README.md        2019-11-22 20:49:38.000000000 
+0100
+++ new/pytest-parallel-0.1.0/README.md 2020-04-30 20:19:07.000000000 +0200
@@ -53,6 +53,14 @@
 pytest --workers 2 --tests-per-worker auto
 ```
 
+## Notice
+
+Beginning with Python 3.8, forking behavior is forced on macOS at the expense 
of safety.
+
+    Changed in version 3.8: On macOS, the spawn start method is now the 
default. The fork start method should be considered unsafe as it can lead to 
crashes of the subprocess. See bpo-33725.
+
+[Source](https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods)
+
 ## License
 
 MIT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-parallel-0.0.10/pytest_parallel/__init__.py 
new/pytest-parallel-0.1.0/pytest_parallel/__init__.py
--- old/pytest-parallel-0.0.10/pytest_parallel/__init__.py      2019-11-22 
20:49:38.000000000 +0100
+++ new/pytest-parallel-0.1.0/pytest_parallel/__init__.py       2020-04-30 
20:19:07.000000000 +0200
@@ -1,30 +1,33 @@
 import os
+import py
+import sys
 import time
 import math
 import pytest
 import _pytest
 import platform
 import threading
-import queue as Queue
-from py._xmlgen import raw
+import multiprocessing
+from tblib import pickling_support
 from multiprocessing import Manager, Process
 
-__version__ = '0.0.10'
+# In Python 3.8 and later, the default on macOS is spawn.
+# We force forking behavior at the expense of safety.
+#
+# "On macOS, the spawn start method is now the default. The fork start method 
should be
+#  considered unsafe as it can lead to crashes of the subprocess. See 
bpo-33725."
+#
+# 
https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods
+if sys.platform.startswith('darwin'):
+    multiprocessing.set_start_method('fork')
+
+__version__ = '0.1.0'
 
 
 def parse_config(config, name):
     return getattr(config.option, name, config.getini(name))
 
 
-def force(fn):
-    while True:
-        try:
-            return fn()
-        except ConnectionRefusedError:
-            time.sleep(.1)
-            continue
-
-
 def pytest_addoption(parser):
     workers_help = ('Set the max num of workers (aka processes) to start '
                     '(int or "auto" - one per core)')
@@ -53,7 +56,12 @@
         raise session.Interrupted(session.shouldstop)
 
 
-def process_with_threads(queue, session, tests_per_worker, errors):
+def process_with_threads(config, queue, session, tests_per_worker, errors):
+    # This function will be called from subprocesses, forked from the main
+    # pytest process. First thing we need to do is to change config's value
+    # so we know we are running as a worker.
+    config.parallel_worker = True
+
     threads = []
     for _ in range(tests_per_worker):
         thread = ThreadWorker(queue, session, errors)
@@ -70,14 +78,13 @@
         self.errors = errors
 
     def run(self):
-        from tblib import pickling_support
-
         pickling_support.install()
         while True:
             try:
-                index = self.queue.get_nowait()
-            except Queue.Empty:
-                break
+                index = self.queue.get()
+                if index == 'stop':
+                    self.queue.task_done()
+                    break
             except ConnectionRefusedError:
                 time.sleep(.1)
                 continue
@@ -171,87 +178,13 @@
         super(ThreadLocalFixtureDef, self).__init__(*args, **kwargs)
 
 
-class SafeNumber(object):
-    def __init__(self, manager):
-        self._val = manager.Value('i', 0)
-        self._lock = manager.RLock()
-
-    def __add__(self, i):
-        with self._lock:
-            return self._val.value + i
-
-    def __radd__(self, i):
-        with self._lock:
-            return self._val.value + i
-
-    def __iadd__(self, i):
-        with self._lock:
-            self._val.value += i
-            return self
-
-    def __ge__(self, i):
-        with self._lock:
-            return int(self._val.value) >= i
-
-    def __gt__(self, i):
-        with self._lock:
-            return int(self._val.value) > i
-
-    def __le__(self, i):
-        with self._lock:
-            return int(self._val.value) <= i
-
-    def __lt__(self, i):
-        with self._lock:
-            return int(self._val.value) < i
-
-    def __eq__(self, i):
-        with self._lock:
-            return int(self._val.value) == i
-
-    def __bool__(self):
-        return not self.__eq__(0)
-
-    def __int__(self):
-        with self._lock:
-            return int(self._val.value)
-
-    def __str__(self):
-        with self._lock:
-            return str(self._val.value)
-
-    def __repr__(self):
-        with self._lock:
-            return repr(self._val.value)
-
-    @property
-    def value(self):
-        return int(self._val.value)
-
-
-class SafeHtmlTestLogs(raw):
-    def __init__(self, manager):
-        self._val = manager.list()
-        self._lock = manager.RLock()
-
-    def insert(self, index, tbody):
-        # FIXME: sort by this order
-        # ['Error', 'Failed', 'Rerun', 'XFailed',
-        #  'XPassed', 'Skipped', 'Passed']
-        # 
https://github.com/pytest-dev/pytest-html/blob/cf21aed3635e5bd4baa24e8ea16ffe9dfda1845e/pytest_html/plugin.py#L141-L144
-        log_entry = tbody.unicode(indent=2)
-        self._val.append(log_entry)
-
-    @property
-    def uniobj(self):
-        return ''.join(self._val)
-
-
 class ParallelRunner(object):
     def __init__(self, config):
+        self._config = config
         self._manager = Manager()
+        self._log = py.log.Producer('pytest-parallel')
+
         reporter = config.pluginmanager.getplugin('terminalreporter')
-        html = config.pluginmanager.getplugin('html')
 
         # prevent mangling the output
         reporter.showfspath = False
@@ -274,38 +207,6 @@
 
         self.workers = workers
 
-        if self.workers > 1:
-            # ensure stats are process-safe
-            reporter.stats = self._manager.dict()
-            setdefault = reporter.stats.setdefault
-
-            def setdefault_proxy(key, default=None):
-                if isinstance(default, list) and len(default) == 0:
-                    default = force(lambda: self._manager.list())
-                    if key == "deselected":
-                        # "deselected" on stats can safely ignore list values
-                        res = force(lambda: setdefault(key, default))
-                        res.extend = lambda iter: [
-                            default.append(1) for i in range(len(iter))
-                        ]
-                        return res
-                    return force(lambda: setdefault(key, default))
-            reporter.stats.setdefault = setdefault_proxy
-
-            # ensure pytest-html is process safe
-            if html and hasattr(config, '_html'):
-                htmlplugin = config._html
-                htmlplugin.test_logs = SafeHtmlTestLogs(self._manager)
-                htmlplugin.errors = SafeNumber(self._manager)
-                htmlplugin.failed = SafeNumber(self._manager)
-                htmlplugin.passed = SafeNumber(self._manager)
-                htmlplugin.skipped = SafeNumber(self._manager)
-                htmlplugin.xfailed = SafeNumber(self._manager)
-                htmlplugin.xpassed = SafeNumber(self._manager)
-                has_rerun = config.pluginmanager.hasplugin('rerunfailures')
-                htmlplugin.rerun = SafeNumber(self._manager) \
-                    if has_rerun else None
-
     @pytest.mark.tryfirst
     def pytest_sessionstart(self, session):
         # make the session threadsafe
@@ -359,27 +260,52 @@
               .format(self.workers, worker_noun, process_noun,
                       tests_per_worker, test_noun, thread_noun))
 
-        queue = Queue.Queue() if self.workers == 1 else self._manager.Queue()
-        errors = Queue.Queue() if self.workers == 1 else self._manager.Queue()
+        queue_cls = self._manager.Queue
+        queue = queue_cls()
+        errors = queue_cls()
+
+        # Reports about tests will be gathered from workerss
+        # using this queue. Workers will push reports to the queue,
+        # and a separate thread will rerun pytest_runtest_logreport
+        # for them.
+        # This way, report generators like JUnitXML will work as expected.
+        self.responses_queue = queue_cls()
 
         for i in range(len(session.items)):
             queue.put(i)
 
-        if self.workers == 1:
-            process_with_threads(queue, session, tests_per_worker, errors)
-            return True
+        # Now we need to put stopping sentinels, so that worker
+        # processes will know, there is time to finish the work.
+        for i in range(self.workers * tests_per_worker):
+            queue.put('stop')
+
+        responses_processor = threading.Thread(
+            target=self.process_responses,
+            args=(self.responses_queue,),
+        )
+        responses_processor.daemon = True
+        responses_processor.start()
 
-        # Ensure testsfailed is process-safe
-        session.testsfailed = SafeNumber(self._manager)
+        def wait_for_responses_processor():
+            self.responses_queue.put(('quit', {}))
+            responses_processor.join()
 
         processes = []
+
+        # Current process is not a worker.
+        # This flag will be changed after the worker's fork.
+        self._config.parallel_worker = False
+
+        args = (self._config, queue, session, tests_per_worker, errors)
         for _ in range(self.workers):
-            process = Process(target=process_with_threads,
-                              args=(queue, session, tests_per_worker, errors))
+            process = Process(target=process_with_threads, args=args)
             process.start()
             processes.append(process)
+
         [p.join() for p in processes]
+
         queue.join()
+        wait_for_responses_processor()
 
         if not errors.empty():
             import six
@@ -397,3 +323,43 @@
             six.raise_from(exc, err[1])
 
         return True
+
+    def send_response(self, event_name, **arguments):
+        self.responses_queue.put((event_name, arguments))
+
+    def pytest_runtest_logreport(self, report):
+        # We want workers to report to it's master.
+        # Without this "if", master will try to report to itself.
+        if self._config.parallel_worker:
+            data = self._config.hook.pytest_report_to_serializable(
+                config=self._config, report=report
+            )
+            self.send_response('testreport', report=data)
+
+    def on_testreport(self, report):
+        report = self._config.hook.pytest_report_from_serializable(
+            config=self._config, data=report
+        )
+        self._config.hook.pytest_runtest_logreport(report=report)
+
+    def process_responses(self, queue):
+        while True:
+            try:
+                event_name, kwargs = queue.get()
+                if event_name == 'quit':
+                    break
+            except ConnectionRefusedError:
+                time.sleep(.1)
+                continue
+
+            callback_name = 'on_' + event_name
+            try:
+                callback = getattr(self, callback_name)
+                callback(**kwargs)
+            except BaseException:
+                self._log('Exception during calling callback', callback_name)
+            finally:
+                try:
+                    queue.task_done()
+                except ConnectionRefusedError:
+                    pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-parallel-0.0.10/tests/test_concurrent.py 
new/pytest-parallel-0.1.0/tests/test_concurrent.py
--- old/pytest-parallel-0.0.10/tests/test_concurrent.py 2019-11-22 
20:49:38.000000000 +0100
+++ new/pytest-parallel-0.1.0/tests/test_concurrent.py  2020-04-30 
20:19:07.000000000 +0200
@@ -23,7 +23,7 @@
         def test_1(driver):
             print_('inside test_1')
     """)
-    result = testdir.runpytest(
+    result = testdir.runpytest_subprocess(
       '-s',
       '--tests-per-worker=2'
     )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-parallel-0.0.10/tests/test_safenumber.py 
new/pytest-parallel-0.1.0/tests/test_safenumber.py
--- old/pytest-parallel-0.0.10/tests/test_safenumber.py 2019-11-22 
20:49:38.000000000 +0100
+++ new/pytest-parallel-0.1.0/tests/test_safenumber.py  1970-01-01 
01:00:00.000000000 +0100
@@ -1,22 +0,0 @@
-import multiprocessing as mp
-
-from pytest_parallel import SafeNumber
-
-
-def test_SafeNumber():
-    manager = mp.Manager()
-
-    nr = SafeNumber(manager)
-    assert isinstance(nr, SafeNumber)
-    assert not nr
-    assert nr == 0
-
-    assert nr + 1 == 1
-    nr += 1
-    assert isinstance(nr, SafeNumber)
-    assert nr == 1
-    assert nr >= 1
-    assert nr <= 1
-    assert nr
-    assert repr(nr) == '1'
-    assert str(nr) == '1'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-parallel-0.0.10/tox.ini 
new/pytest-parallel-0.1.0/tox.ini
--- old/pytest-parallel-0.0.10/tox.ini  2019-11-22 20:49:38.000000000 +0100
+++ new/pytest-parallel-0.1.0/tox.ini   2020-04-30 20:19:07.000000000 +0200
@@ -3,6 +3,7 @@
   flake8
   py36
   py37
+  py38
 
 [testenv]
 deps =
@@ -10,7 +11,17 @@
   pytest-html>=1.19.0
   six>=1.11.0
   tblib
+  importlib_resources
+  coverage: pytest-cov
+passenv =
+  CI
+  PYTEST_ADDOPTS
+  TERM
+  coverage: TRAVIS TRAVIS_*
+setenv =
+  coverage: PYTEST_ADDOPTS=--cov --cov-report=term-missing 
{env:PYTEST_ADDOPTS:}
 commands = pytest {posargs:tests}
+  coverage: {toxinidir}/.ci/report-coverage.sh
 
 [testenv:flake8]
 skip_install = true


Reply via email to