Removed FunctionAlreadyRegistered error, refs #526, #525

This commit is contained in:
Simon Willison 2023-05-08 14:58:28 -07:00
commit eebd1a26ae
2 changed files with 5 additions and 24 deletions

View file

@ -219,11 +219,6 @@ class AlterError(Exception):
pass pass
class FunctionAlreadyRegistered(Exception):
"A function with this name and arity was already registered"
pass
class NoObviousTable(Exception): class NoObviousTable(Exception):
"Could not tell which table this operation refers to" "Could not tell which table this operation refers to"
pass pass
@ -414,9 +409,7 @@ class Database:
fn_name = name or fn.__name__ fn_name = name or fn.__name__
arity = len(inspect.signature(fn).parameters) arity = len(inspect.signature(fn).parameters)
if not replace and (fn_name, arity) in self._registered_functions: if not replace and (fn_name, arity) in self._registered_functions:
raise FunctionAlreadyRegistered( return fn
f'Already registered function with name "{fn_name}" and identical arity'
)
kwargs = {} kwargs = {}
registered = False registered = False
if deterministic: if deterministic:

View file

@ -3,7 +3,6 @@ import pytest
import sys import sys
from unittest.mock import MagicMock, call from unittest.mock import MagicMock, call
from sqlite_utils.utils import sqlite3 from sqlite_utils.utils import sqlite3
from sqlite_utils.db import FunctionAlreadyRegistered
def test_register_function(fresh_db): def test_register_function(fresh_db):
@ -85,12 +84,10 @@ def test_register_function_replace(fresh_db):
assert "one" == fresh_db.execute("select one()").fetchone()[0] assert "one" == fresh_db.execute("select one()").fetchone()[0]
# This will fail to replace the function: # This will silently fail to replaec the function
with pytest.raises(FunctionAlreadyRegistered): @fresh_db.register_function()
def one(): # noqa
@fresh_db.register_function() return "two"
def one(): # noqa
return "two"
assert "one" == fresh_db.execute("select one()").fetchone()[0] assert "one" == fresh_db.execute("select one()").fetchone()[0]
@ -100,12 +97,3 @@ def test_register_function_replace(fresh_db):
return "two" return "two"
assert "two" == fresh_db.execute("select one()").fetchone()[0] assert "two" == fresh_db.execute("select one()").fetchone()[0]
def test_register_function_duplicate(fresh_db):
def to_lower(s):
return s.lower()
fresh_db.register_function(to_lower)
with pytest.raises(FunctionAlreadyRegistered):
fresh_db.register_function(to_lower)