From f04deebec4f3842f7bd610cd5859de529f77d50e Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Thu, 25 Jul 2019 16:07:44 +0300 Subject: [PATCH] Refactored connection logic to database.connect() --- datasette/app.py | 15 +-------------- datasette/database.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/datasette/app.py b/datasette/app.py index 1a41c1c6..501d1467 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -470,20 +470,7 @@ class Datasette: def in_thread(): conn = getattr(connections, db_name, None) if not conn: - db = self.databases[db_name] - if db.is_memory: - conn = sqlite3.connect(":memory:") - else: - # mode=ro or immutable=1? - if db.is_mutable: - qs = "mode=ro" - else: - qs = "immutable=1" - conn = sqlite3.connect( - "file:{}?{}".format(db.path, qs), - uri=True, - check_same_thread=False, - ) + conn = self.databases[db_name].connect() self.prepare_connection(conn) setattr(connections, db_name, conn) return fn(conn) diff --git a/datasette/database.py b/datasette/database.py index e4915770..7e6f7245 100644 --- a/datasette/database.py +++ b/datasette/database.py @@ -33,6 +33,18 @@ class Database: for key, value in self.ds.inspect_data[self.name]["tables"].items() } + def connect(self): + if self.is_memory: + return sqlite3.connect(":memory:") + # mode=ro or immutable=1? + if self.is_mutable: + qs = "mode=ro" + else: + qs = "immutable=1" + return sqlite3.connect( + "file:{}?{}".format(self.path, qs), uri=True, check_same_thread=False + ) + @property def size(self): if self.is_memory: