summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2021-10-10 12:52:10 -0400
committerNed Batchelder <ned@nedbatchelder.com>2021-10-10 12:52:10 -0400
commit982eca893a895db262ae56650bd05d9f7ab6a076 (patch)
treedd1fd4de239dc3c55c18d18328ce53da483fe7ee
parent4144f9595595f0aff458c3da5c70ff6fe8de570e (diff)
downloadpython-coveragepy-git-nedbat/sqldata-edge-tests.tar.gz
fix: raise CoverageException for SQLite connection errorsnedbat/sqldata-edge-tests
-rw-r--r--coverage/sqldata.py6
-rw-r--r--tests/test_data.py8
2 files changed, 13 insertions, 1 deletions
diff --git a/coverage/sqldata.py b/coverage/sqldata.py
index c4e950d3..2411fbca 100644
--- a/coverage/sqldata.py
+++ b/coverage/sqldata.py
@@ -1032,7 +1032,11 @@ class SqliteDb(SimpleReprMixin):
# is not a problem.
if self.debug:
self.debug.write(f"Connecting to {self.filename!r}")
- self.con = sqlite3.connect(self.filename, check_same_thread=False)
+ try:
+ self.con = sqlite3.connect(self.filename, check_same_thread=False)
+ except sqlite3.Error as exc:
+ raise CoverageException(f"Couldn't use data file {self.filename!r}: {exc}") from exc
+
self.con.create_function("REGEXP", 2, _regexp)
# This pragma makes writing faster. It disables rollbacks, but we never need them.
diff --git a/tests/test_data.py b/tests/test_data.py
index 0660591f..735a12b3 100644
--- a/tests/test_data.py
+++ b/tests/test_data.py
@@ -598,6 +598,14 @@ class CoverageDataInTempDirTest(CoverageTest):
covdata.read()
assert not covdata
+ def test_hard_read_error(self):
+ self.make_file("noperms.dat", "go away")
+ os.chmod("noperms.dat", 0)
+ msg = r"Couldn't .* '.*[/\\]{}': \S+"
+ with pytest.raises(CoverageException, match=msg.format("noperms.dat")):
+ covdata = DebugCoverageData("noperms.dat")
+ covdata.read()
+
def test_read_sql_errors(self):
with sqlite3.connect("wrong_schema.db") as con:
con.execute("create table coverage_schema (version integer)")