From de10b1d45b642539a9bf45c1b986f8b53d375ffb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ionel=20Cristian=20M=C4=83rie=C8=99?= Date: Mon, 25 Feb 2019 15:30:30 +0200 Subject: [PATCH] Monkeypatch iter_entry_points to yield pytest-cov plugin before other plugins. For now this change doesn't really solve anything, see: https://github.com/pytest-dev/pytest/issues/935#issuecomment-466798841 --- src/pytest-cov.embed | 22 ++++++++++++++++++++++ src/pytest-cov.pth | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/pytest-cov.embed b/src/pytest-cov.embed index 630a2a72..9b9dffb3 100644 --- a/src/pytest-cov.embed +++ b/src/pytest-cov.embed @@ -1,3 +1,25 @@ +try: + import pkg_resources +except ImportError: + pass +else: + def reordered_iter_entry_points(group, name=None, __original=pkg_resources.iter_entry_points): + if group == 'pytest11' and name is None: + delayed_entrypoints = [] + for ep in __original(group): + if ep.name == 'pytest_cov': + yield ep + for delayed_ep in delayed_entrypoints: + yield delayed_ep + delayed_entrypoints = None + elif delayed_entrypoints is None: + yield ep + else: + delayed_entrypoints.append(ep) + else: + for ep in __original(group, name): + yield ep + pkg_resources.iter_entry_points = reordered_iter_entry_points if 'COV_CORE_SOURCE' in os.environ: try: from pytest_cov.embed import init diff --git a/src/pytest-cov.pth b/src/pytest-cov.pth index 91f2b7c7..58f29d02 100644 --- a/src/pytest-cov.pth +++ b/src/pytest-cov.pth @@ -1 +1 @@ -import os, sys;exec('if \'COV_CORE_SOURCE\' in os.environ:\n try:\n from pytest_cov.embed import init\n init()\n except Exception as exc:\n sys.stderr.write(\n "pytest-cov: Failed to setup subprocess coverage. "\n "Environ: {0!r} "\n "Exception: {1!r}\\n".format(\n dict((k, v) for k, v in os.environ.items() if k.startswith(\'COV_CORE\')),\n exc\n )\n )\n') \ No newline at end of file +import os, sys;exec('try:\n import pkg_resources\nexcept ImportError:\n pass\nelse:\n def reordered_iter_entry_points(group, name=None, __original=pkg_resources.iter_entry_points):\n if group == \'pytest11\' and name is None:\n delayed_entrypoints = []\n for ep in __original(group):\n if ep.name == \'pytest_cov\':\n yield ep\n for delayed_ep in delayed_entrypoints:\n yield delayed_ep\n delayed_entrypoints = None\n elif delayed_entrypoints is None:\n yield ep\n else:\n delayed_entrypoints.append(ep)\n else:\n for ep in __original(group, name):\n yield ep\n pkg_resources.iter_entry_points = reordered_iter_entry_points\nif \'COV_CORE_SOURCE\' in os.environ:\n try:\n from pytest_cov.embed import init\n init()\n except Exception as exc:\n sys.stderr.write(\n "pytest-cov: Failed to setup subprocess coverage. "\n "Environ: {0!r} "\n "Exception: {1!r}\\n".format(\n dict((k, v) for k, v in os.environ.items() if k.startswith(\'COV_CORE\')),\n exc\n )\n )\n') \ No newline at end of file