summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2021-05-02 18:35:41 -0400
committerNed Batchelder <ned@nedbatchelder.com>2021-05-02 18:35:41 -0400
commitbb73791b59f74b6621a87036c14a6be6a23e0e55 (patch)
treea99329d767e299b9e1ceb211cb74d7c4262311a3
parentb74461aef05559e17da555c20f4ce63c610e9307 (diff)
downloadpython-coveragepy-git-bb73791b59f74b6621a87036c14a6be6a23e0e55.tar.gz
refactor: convert more %-formatting to f-strings
-rw-r--r--coverage/cmdline.py26
-rw-r--r--coverage/collector.py4
-rw-r--r--coverage/config.py6
-rw-r--r--coverage/control.py4
-rw-r--r--tests/test_data.py7
5 files changed, 26 insertions, 21 deletions
diff --git a/coverage/cmdline.py b/coverage/cmdline.py
index cc7d8082..d1e8f283 100644
--- a/coverage/cmdline.py
+++ b/coverage/cmdline.py
@@ -46,8 +46,8 @@ class Opts:
choices=CONCURRENCY_CHOICES,
help=(
"Properly measure code using a concurrency library. "
- "Valid values are: %s."
- ) % ", ".join(CONCURRENCY_CHOICES),
+ "Valid values are: {}."
+ ).format(", ".join(CONCURRENCY_CHOICES)),
)
context = optparse.make_option(
'', '--context', action='store', metavar="LABEL",
@@ -299,7 +299,7 @@ class CmdOptionParser(CoverageOptionParser):
def __eq__(self, other):
# A convenience equality, so that I can put strings in unit test
# results, and they will compare equal to objects.
- return (other == "<CmdOptionParser:%s>" % self.cmd)
+ return (other == f"<CmdOptionParser:{self.cmd}>")
__hash__ = None # This object doesn't need to be hashed.
@@ -506,7 +506,7 @@ def show_help(error=None, topic=None, parser=None):
if help_msg:
print(help_msg.format(**help_params))
else:
- print("Don't know topic %r" % topic)
+ print(f"Don't know topic {topic!r}")
print("Full documentation is at {__url__}".format(**help_params))
@@ -541,7 +541,7 @@ class CoverageScript:
else:
parser = CMDS.get(argv[0])
if not parser:
- show_help("Unknown command: '%s'" % argv[0])
+ show_help(f"Unknown command: {argv[0]!r}")
return ERR
argv = argv[1:]
@@ -765,22 +765,22 @@ class CoverageScript:
sys_info = self.coverage.sys_info()
print(info_header("sys"))
for line in info_formatter(sys_info):
- print(" %s" % line)
+ print(f" {line}")
elif info == 'data':
self.coverage.load()
data = self.coverage.get_data()
print(info_header("data"))
- print("path: %s" % data.data_filename())
+ print(f"path: {data.data_filename()}")
if data:
- print("has_arcs: %r" % data.has_arcs())
+ print(f"has_arcs: {data.has_arcs()!r}")
summary = line_counts(data, fullpath=True)
filenames = sorted(summary.keys())
- print("\n%d files:" % len(filenames))
+ print(f"\n{len(filenames)} files:")
for f in filenames:
- line = "%s: %d lines" % (f, summary[f])
+ line = f"{f}: {summary[f]} lines"
plugin = data.file_tracer(f)
if plugin:
- line += " [%s]" % plugin
+ line += f" [{plugin}]"
print(line)
else:
print("No data collected")
@@ -788,12 +788,12 @@ class CoverageScript:
print(info_header("config"))
config_info = self.coverage.config.__dict__.items()
for line in info_formatter(config_info):
- print(" %s" % line)
+ print(f" {line}")
elif info == "premain":
print(info_header("premain"))
print(short_stack())
else:
- show_help("Don't know what you mean by %r" % info)
+ show_help(f"Don't know what you mean by {info!r}")
return ERR
return OK
diff --git a/coverage/collector.py b/coverage/collector.py
index e219c928..f9e9d14f 100644
--- a/coverage/collector.py
+++ b/coverage/collector.py
@@ -116,7 +116,7 @@ class Collector:
# We can handle a few concurrency options here, but only one at a time.
these_concurrencies = self.SUPPORTED_CONCURRENCIES.intersection(concurrency)
if len(these_concurrencies) > 1:
- raise CoverageException("Conflicting concurrency settings: %s" % concurrency)
+ raise CoverageException(f"Conflicting concurrency settings: {concurrency}")
self.concurrency = these_concurrencies.pop() if these_concurrencies else ''
try:
@@ -136,7 +136,7 @@ class Collector:
import threading
self.threading = threading
else:
- raise CoverageException("Don't understand concurrency=%s" % concurrency)
+ raise CoverageException(f"Don't understand concurrency={concurrency}")
except ImportError:
raise CoverageException(
"Couldn't trace with concurrency={}, the module isn't installed.".format(
diff --git a/coverage/config.py b/coverage/config.py
index 71f8fbd0..44bae957 100644
--- a/coverage/config.py
+++ b/coverage/config.py
@@ -443,7 +443,7 @@ class CoverageConfig:
return
# If we get here, we didn't find the option.
- raise CoverageException("No such option: %r" % option_name)
+ raise CoverageException(f"No such option: {option_name!r}")
def get_option(self, option_name):
"""Get an option from the configuration.
@@ -471,7 +471,7 @@ class CoverageConfig:
return self.plugin_options.get(plugin_name, {}).get(key)
# If we get here, we didn't find the option.
- raise CoverageException("No such option: %r" % option_name)
+ raise CoverageException(f"No such option: {option_name!r}")
def post_process_file(self, path):
"""Make final adjustments to a file path to make it usable."""
@@ -545,7 +545,7 @@ def read_coverage_config(config_file, **kwargs):
if config_read:
break
if specified_file:
- raise CoverageException("Couldn't read '%s' as a config file" % fname)
+ raise CoverageException(f"Couldn't read {fname!r} as a config file")
# $set_env.py: COVERAGE_DEBUG - Options for --debug.
# 3) from environment variables:
diff --git a/coverage/control.py b/coverage/control.py
index 95d22007..0ec9264c 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -361,8 +361,8 @@ class Coverage:
if slug:
msg = f"{msg} ({slug})"
if self._debug.should('pid'):
- msg = "[%d] %s" % (os.getpid(), msg)
- sys.stderr.write("Coverage.py warning: %s\n" % msg)
+ msg = f"[{os.getpid()}] {msg}"
+ sys.stderr.write(f"Coverage.py warning: {msg}\n")
if once:
self._no_warn_slugs.append(slug)
diff --git a/tests/test_data.py b/tests/test_data.py
index 4b385b7f..81409eac 100644
--- a/tests/test_data.py
+++ b/tests/test_data.py
@@ -486,10 +486,14 @@ class CoverageDataTest(DataTestHelpers, CoverageTest):
def test_thread_stress(self):
covdata = CoverageData()
+ exceptions = []
def thread_main():
"""Every thread will try to add the same data."""
- covdata.add_lines(LINES_1)
+ try:
+ covdata.add_lines(LINES_1)
+ except Exception as ex:
+ exceptions.append(ex)
threads = [threading.Thread(target=thread_main) for _ in range(10)]
for t in threads:
@@ -498,6 +502,7 @@ class CoverageDataTest(DataTestHelpers, CoverageTest):
t.join()
self.assert_lines1_data(covdata)
+ #assert exceptions == []
class CoverageDataInTempDirTest(DataTestHelpers, CoverageTest):