From defa2974c6d3abc19be28d6b319649b8028dc966 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Tue, 25 Oct 2022 14:23:24 -0700 Subject: [PATCH] jsonify_if_needed output of convert() functions, closes #495 --- sqlite_utils/db.py | 2 +- tests/test_convert.py | 26 ++++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index b8e8d4b..a06f4b7 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -2662,7 +2662,7 @@ class Table(Queryable): bar.update(1) if not v: return v - return fn(v) + return jsonify_if_needed(fn(v)) self.db.register_function(convert_value) sql = "update [{table}] set {sets}{where};".format( diff --git a/tests/test_convert.py b/tests/test_convert.py index 796a08f..31a9d28 100644 --- a/tests/test_convert.py +++ b/tests/test_convert.py @@ -15,6 +15,14 @@ import pytest lambda value: value.upper(), {"title": "MIXED CASE", "abstract": "ABSTRACT"}, ), + ( + "title", + lambda value: {"upper": value.upper(), "lower": value.lower()}, + { + "title": '{"upper": "MIXED CASE", "lower": "mixed case"}', + "abstract": "Abstract", + }, + ), ), ) def test_convert(fresh_db, columns, fn, expected): @@ -81,10 +89,24 @@ def test_convert_multi(fresh_db): table = fresh_db["table"] table.insert({"title": "Mixed Case"}) table.convert( - "title", lambda v: {"upper": v.upper(), "lower": v.lower()}, multi=True + "title", + lambda v: { + "upper": v.upper(), + "lower": v.lower(), + "both": { + "upper": v.upper(), + "lower": v.lower(), + }, + }, + multi=True, ) assert list(table.rows) == [ - {"title": "Mixed Case", "upper": "MIXED CASE", "lower": "mixed case"} + { + "title": "Mixed Case", + "upper": "MIXED CASE", + "lower": "mixed case", + "both": '{"upper": "MIXED CASE", "lower": "mixed case"}', + } ]