Fix type errors in tests and plugins

- Add type: ignore for monkey-patching Database.__init__ in conftest
- Fix CLI test to pass string "2" instead of integer to Click invoke
- Add type: ignore for optional sqlean import
- Fix add_geometry_column test to use "XY" instead of integer 2
- Add type: ignore for click.Context as context manager
- Add type: ignore for enable_fts test that intentionally omits argument
- Add type: ignore for sys._called_from_test dynamic attribute
- Fix rows_from_file test type error for intentional wrong argument
- Handle None from pm.get_hookcallers in plugins.py

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Simon Willison 2025-12-16 16:40:40 -08:00
commit 792157d120
7 changed files with 12 additions and 11 deletions

View file

@ -14,9 +14,10 @@ def get_plugins():
plugins = [] plugins = []
plugin_to_distinfo = dict(pm.list_plugin_distinfo()) plugin_to_distinfo = dict(pm.list_plugin_distinfo())
for plugin in pm.get_plugins(): for plugin in pm.get_plugins():
hookcallers = pm.get_hookcallers(plugin) or []
plugin_info = { plugin_info = {
"name": plugin.__name__, "name": plugin.__name__,
"hooks": [h.name for h in pm.get_hookcallers(plugin)], "hooks": [h.name for h in hookcallers],
} }
distinfo = plugin_to_distinfo.get(plugin) distinfo = plugin_to_distinfo.get(plugin)
if distinfo: if distinfo:

View file

@ -11,7 +11,7 @@ create table Gosh2 (c1 text, c2 text, c3 text);
def pytest_configure(config): def pytest_configure(config):
import sys import sys
sys._called_from_test = True sys._called_from_test = True # type: ignore[attr-defined]
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
@ -24,9 +24,9 @@ def close_all_databases():
original_init(self, *args, **kwargs) original_init(self, *args, **kwargs)
databases.append(self) databases.append(self)
Database.__init__ = tracking_init Database.__init__ = tracking_init # type: ignore[method-assign]
yield yield
Database.__init__ = original_init Database.__init__ = original_init # type: ignore[method-assign]
for db in databases: for db in databases:
try: try:
db.close() db.close()

View file

@ -535,7 +535,7 @@ def test_convert_where(test_db_and_path):
"id = :id", "id = :id",
"-p", "-p",
"id", "id",
2, "2",
], ],
) )
assert result.exit_code == 0, result.output assert result.exit_code == 0, result.output
@ -564,7 +564,7 @@ def test_convert_where_multi(fresh_db_and_path):
"id = :id", "id = :id",
"-p", "-p",
"id", "id",
2, "2",
"--multi", "--multi",
], ],
) )

View file

@ -331,7 +331,7 @@ def test_memory_return_db(tmpdir):
with open(path, "w") as f: with open(path, "w") as f:
f.write("id,name\n1,Cleo") f.write("id,name\n1,Cleo")
with click.Context(cli) as ctx: with click.Context(cli) as ctx: # type: ignore[attr-defined]
db = ctx.invoke(cli.commands["memory"], paths=(path,), return_db=True) db = ctx.invoke(cli.commands["memory"], paths=(path,), return_db=True)
assert db.table_names() == ["dogs"] assert db.table_names() == ["dogs"]

View file

@ -424,7 +424,7 @@ def test_enable_fts_error_message_on_views():
db = Database(memory=True) db = Database(memory=True)
db.create_view("hello", "select 1 + 1") db.create_view("hello", "select 1 + 1")
with pytest.raises(NotImplementedError) as e: with pytest.raises(NotImplementedError) as e:
db["hello"].enable_fts() db["hello"].enable_fts() # type: ignore[call-arg]
assert e.value.args[0] == "enable_fts() is supported on tables but not on views" assert e.value.args[0] == "enable_fts() is supported on tables but not on views"

View file

@ -7,7 +7,7 @@ from sqlite_utils.db import Database
from sqlite_utils.utils import find_spatialite, sqlite3 from sqlite_utils.utils import find_spatialite, sqlite3
try: try:
import sqlean import sqlean # type: ignore[import-not-found]
except ImportError: except ImportError:
sqlean = None sqlean = None
@ -50,7 +50,7 @@ def test_add_geometry_column():
column_name="geometry", column_name="geometry",
geometry_type="Point", geometry_type="Point",
srid=4326, srid=4326,
coord_dimension=2, coord_dimension="XY",
) )
assert db["geometry_columns"].get(["locations", "geometry"]) == { assert db["geometry_columns"].get(["locations", "geometry"]) == {

View file

@ -48,7 +48,7 @@ def test_rows_from_file_extra_fields_strategies(ignore_extras, extras_key, expec
def test_rows_from_file_error_on_string_io(): def test_rows_from_file_error_on_string_io():
with pytest.raises(TypeError) as ex: with pytest.raises(TypeError) as ex:
rows_from_file(StringIO("id,name\r\n1,Cleo")) rows_from_file(StringIO("id,name\r\n1,Cleo")) # type: ignore[arg-type]
assert ex.value.args == ( assert ex.value.args == (
"rows_from_file() requires a file-like object that supports peek(), such as io.BytesIO", "rows_from_file() requires a file-like object that supports peek(), such as io.BytesIO",
) )