Test for with db.tracer() contextmanager

This commit is contained in:
Simon Willison 2020-09-07 14:39:33 -07:00
commit 31bea2ac61
2 changed files with 29 additions and 1 deletions

View file

@ -130,7 +130,7 @@ class Database:
@contextlib.contextmanager
def tracer(self, tracer=None):
prev_tracer = self.tracer
prev_tracer = self._tracer
self._tracer = tracer or print
try:
yield self

View file

@ -31,3 +31,31 @@ def test_tracer():
("Cleopaws",),
),
]
def test_with_tracer():
collected = []
tracer = lambda sql, params: collected.append((sql, params))
db = Database(memory=True)
db["dogs"].insert({"name": "Cleopaws"})
db["dogs"].enable_fts(["name"])
assert len(collected) == 0
with db.tracer(tracer):
db["dogs"].search("Cleopaws")
assert len(collected) == 2
assert collected == [
("select name from sqlite_master where type = 'view'", None),
(
'select * from "dogs" where rowid in (\n select rowid from [dogs_fts]\n where [dogs_fts] match :search\n)\norder by rowid',
("Cleopaws",),
),
]
# Outside the with block collected should not be appended to
db["dogs"].insert({"name": "Cleopaws"})
assert len(collected) == 2