Refactored run_sanity_checks to check_connection(conn), refs #674

This commit is contained in:
Simon Willison 2020-02-15 09:56:48 -08:00
commit d3f2fade88
4 changed files with 60 additions and 21 deletions

View file

@ -790,3 +790,28 @@ class RequestParameters(dict):
def getlist(self, name, default=None):
"Return full list"
return super().get(name, default)
class ConnectionProblem(Exception):
pass
class SpatialiteConnectionProblem(ConnectionProblem):
pass
def check_connection(conn):
tables = [
r[0]
for r in conn.execute(
"select name from sqlite_master where type='table'"
).fetchall()
]
for table in tables:
try:
conn.execute("PRAGMA table_info({});".format(escape_sqlite(table)),)
except sqlite3.OperationalError as e:
if e.args[0] == "no such module: VirtualSpatialIndex":
raise SpatialiteConnectionProblem(e)
else:
raise ConnectionProblem(e)