5 import datasette.views.base
6 from datasette.tracer import trace
7 from datasette.database import Database
8 from datasette.database import Results
10 from .connectors import ConnectorList
12 connections = threading.local()
15 def patch_datasette():
17 Monkey patching for original Datasette
20 def connect(self, write=False):
22 # Check if it's a sqlite database
23 conn = self.original_connect(write=write)
24 conn.execute("select name from sqlite_master where type='table'")
26 except sqlite3.DatabaseError:
27 conn = ConnectorList.connect(self.path)
30 Database.original_connect = Database.connect
31 Database.connect = connect
34 async def execute_fn(self, fn):
36 conn = getattr(connections, self.name, None)
39 if isinstance(conn, sqlite3.Connection):
40 self.ds._prepare_connection(conn, self.name)
41 setattr(connections, self.name, conn)
44 return await asyncio.get_event_loop().run_in_executor(
45 self.ds.executor, in_thread
48 Database.original_execute_fn = Database.execute_fn
49 Database.execute_fn = execute_fn