From 455c35b512895c19bf922c2b804d750d27cb8dbd Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Mon, 8 May 2023 13:52:21 -0700 Subject: [PATCH] .convert(skip_false) option, refs #527 --- sqlite_utils/db.py | 3 ++- tests/test_convert.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index 44d59da..3c5d91a 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -2618,6 +2618,7 @@ class Table(Queryable): where: Optional[str] = None, where_args: Optional[Union[Iterable, dict]] = None, show_progress: bool = False, + skip_false: bool = True, ): """ Apply conversion function ``fn`` to every value in the specified columns. @@ -2660,7 +2661,7 @@ class Table(Queryable): def convert_value(v): bar.update(1) - if not v: + if skip_false and not v: return v return jsonify_if_needed(fn(v)) diff --git a/tests/test_convert.py b/tests/test_convert.py index 31a9d28..9fd29c3 100644 --- a/tests/test_convert.py +++ b/tests/test_convert.py @@ -50,6 +50,16 @@ def test_convert_where(fresh_db, where, where_args): assert list(table.rows) == [{"id": 1, "title": "One"}, {"id": 2, "title": "TWO"}] +def test_convert_skip_false(fresh_db): + table = fresh_db["table"] + table.insert_all([{"x": 0}, {"x": 1}]) + assert table.get(1)["x"] == 0 + assert table.get(2)["x"] == 1 + table.convert("x", lambda x: x + 1, skip_false=False) + assert table.get(1)["x"] == 1 + assert table.get(2)["x"] == 2 + + @pytest.mark.parametrize( "drop,expected", (