diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index e819d17..1f85338 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -2660,8 +2660,6 @@ class Table(Queryable): def convert_value(v): bar.update(1) - if not v: - return v return jsonify_if_needed(fn(v)) self.db.register_function(convert_value) diff --git a/sqlite_utils/recipes.py b/sqlite_utils/recipes.py index ac41954..cf31ee8 100644 --- a/sqlite_utils/recipes.py +++ b/sqlite_utils/recipes.py @@ -14,6 +14,8 @@ def parsedate(value, dayfirst=False, yearfirst=False, errors=None): - errors=r.IGNORE to ignore values that cannot be parsed - errors=r.SET_NULL to set values that cannot be parsed to null """ + if not value: + return value try: return ( parser.parse(value, dayfirst=dayfirst, yearfirst=yearfirst) @@ -38,6 +40,8 @@ def parsedatetime(value, dayfirst=False, yearfirst=False, errors=None): - errors=r.IGNORE to ignore values that cannot be parsed - errors=r.SET_NULL to set values that cannot be parsed to null """ + if not value: + return value try: return parser.parse(value, dayfirst=dayfirst, yearfirst=yearfirst).isoformat() except parser.ParserError: @@ -53,4 +57,6 @@ def jsonsplit(value, delimiter=",", type=str): """ Convert a string like a,b,c into a JSON array ["a", "b", "c"] """ + if not value: + return value return json.dumps([type(s.strip()) for s in value.split(delimiter)]) diff --git a/tests/test_cli_convert.py b/tests/test_cli_convert.py index d26ab8c..49627df 100644 --- a/tests/test_cli_convert.py +++ b/tests/test_cli_convert.py @@ -80,7 +80,8 @@ def test_convert_import(test_db_and_path): db_path, "example", "dt", - "return re.sub('O..', 'OXX', value)", + #"return re.sub('O..', 'OXX', value)", + "return None if value is None else re.sub('O..', 'OXX', value)", "--import", "re", ], @@ -223,7 +224,7 @@ def test_convert_output_column(test_db_and_path, drop): db_path, "example", "dt", - "value.replace('October', 'Spooktober')", + "None if value is None else value.replace('October', 'Spooktober')", "--output", "newcol", ]