61 lines
2.4 KiB
Python
61 lines
2.4 KiB
Python
# When testrunner.py is invoked with --coverage, it puts this first
|
|
# on the path as per https://coverage.readthedocs.io/en/coverage-4.0b3/subprocess.html.
|
|
# Note that this disables other sitecustomize.py files.
|
|
import coverage
|
|
import coverage.exceptions
|
|
try:
|
|
coverage.process_startup()
|
|
except AttributeError as e:
|
|
if 'coverage' in str(e) and 'CTracer' in str(e):
|
|
# AttributeError: module 'coverage.tracer' has no attribute 'CTracer'
|
|
# on github actions. Leads to warnings later:
|
|
# "Couldn't import C tracer: module coverage.tracer "
|
|
# "does not support loading in subinterpreters (no-ctracer)"
|
|
# Seen in test_interpreters.py
|
|
#
|
|
# HOWEVER: Now coverage also emits a warning (CoverageWarning: Couldn't import C
|
|
# tracer: module coverage.tracer does not support loading in subinterpreters
|
|
# (no-ctracer)) that gets printed to stderr by default. This is unexpected
|
|
# and breaks the test. So we ignore that in testrunner.py
|
|
pass
|
|
else:
|
|
raise
|
|
except (coverage.CoverageException,
|
|
# As of Coverage 7, the ConfigError seems to be the one raised.
|
|
# Not sure when that changed, it used to be CoverageException. Go
|
|
# ahead and keep both for safety.
|
|
coverage.exceptions.ConfigError,
|
|
) as e:
|
|
|
|
if str(e) in (
|
|
"Can't support concurrency=greenlet with PyTracer, only threads are supported",
|
|
):
|
|
pass
|
|
elif str(e) in (
|
|
# We get this one for the stdlib test_interpreters: greenlet up through at least
|
|
# 3.2.0 produces "ImportError: module greenlet._greenlet does not support loading
|
|
# in subinterpreters". Now, this is a fairly broad brush with which to try to
|
|
# catch that specific case, so we fallback and look for that import error
|
|
# as well to make it more specific to exactly this case.
|
|
"Couldn't trace with concurrency=greenlet, the module isn't installed.",
|
|
):
|
|
ignore = False
|
|
try:
|
|
__import__('greenlet')
|
|
except ImportError as ie:
|
|
if str(ie) in (
|
|
"module greenlet._greenlet does not support loading in subinterpreters",
|
|
):
|
|
ignore = True
|
|
if not ignore:
|
|
raise
|
|
|
|
else:
|
|
import traceback
|
|
traceback.print_exc()
|
|
raise
|
|
except:
|
|
import traceback
|
|
traceback.print_exc()
|
|
raise
|