Skip to content

Commit 9b1daa3

Browse files
simonwclaude
andcommitted
Fix type errors caught by ty check
- Add type: ignore comments for external library type stub limitations (csv.reader, click.progressbar, IOBase.name, Callable.__name__) - Change Iterable to Sequence for SQL where_args parameters - Use db.table() instead of db[name] for proper Table return type - Fix rebuild_fts return type from None to Table - Update test_tracer to expect fewer queries (optimization side effect) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
1 parent d833a5c commit 9b1daa3

File tree

4 files changed

+19
-20
lines changed

4 files changed

+19
-20
lines changed

sqlite_utils/cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1051,7 +1051,7 @@ def insert_upsert_implementation(
10511051
csv_reader_args["delimiter"] = delimiter
10521052
if quotechar:
10531053
csv_reader_args["quotechar"] = quotechar
1054-
reader = csv_std.reader(decoded, **csv_reader_args)
1054+
reader = csv_std.reader(decoded, **csv_reader_args) # type: ignore
10551055
first_row = next(reader)
10561056
if no_headers:
10571057
headers = ["untitled_{}".format(i + 1) for i in range(len(first_row))]

sqlite_utils/db.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ def upper(value):
489489
"""
490490

491491
def register(fn: Callable) -> Callable:
492-
fn_name = name or fn.__name__
492+
fn_name = name or fn.__name__ # type: ignore
493493
arity = len(inspect.signature(fn).parameters)
494494
if not replace and (fn_name, arity) in self._registered_functions:
495495
return fn
@@ -1450,11 +1450,11 @@ def rows_where(
14501450
def pks_and_rows_where(
14511451
self,
14521452
where: Optional[str] = None,
1453-
where_args: Optional[Union[Iterable, dict]] = None,
1453+
where_args: Optional[Union[Sequence, Dict[str, Any]]] = None,
14541454
order_by: Optional[str] = None,
14551455
limit: Optional[int] = None,
14561456
offset: Optional[int] = None,
1457-
) -> Generator[Tuple[Any, Dict], None, None]:
1457+
) -> Generator[Tuple[Any, Dict[str, Any]], None, None]:
14581458
"""
14591459
Like ``.rows_where()`` but returns ``(pk, row)`` pairs - ``pk`` can be a single value or tuple.
14601460
@@ -1848,7 +1848,7 @@ def duplicate(self, new_name: str) -> "Table":
18481848
quote_identifier(self.name),
18491849
)
18501850
self.db.execute(sql)
1851-
return self.db[new_name]
1851+
return self.db.table(new_name)
18521852

18531853
def transform(
18541854
self,
@@ -2153,7 +2153,7 @@ def extract(
21532153
)
21542154
)
21552155
table = table or "_".join(columns)
2156-
lookup_table = self.db[table]
2156+
lookup_table = self.db.table(table)
21572157
fk_column = fk_column or "{}_id".format(table)
21582158
magic_lookup_column = "{}_{}".format(fk_column, os.urandom(6).hex())
21592159

@@ -2680,7 +2680,7 @@ def disable_fts(self) -> "Table":
26802680
)
26812681
return self
26822682

2683-
def rebuild_fts(self) -> None:
2683+
def rebuild_fts(self) -> "Table":
26842684
"Run the ``rebuild`` operation against the associated full-text search index table."
26852685
fts_table = self.detect_fts()
26862686
if fts_table is None:
@@ -2767,7 +2767,7 @@ def search_sql(
27672767
self.name
27682768
)
27692769
fts_table_quoted = quote_identifier(fts_table)
2770-
virtual_table_using = self.db[fts_table].virtual_table_using
2770+
virtual_table_using = self.db.table(fts_table).virtual_table_using
27712771
sql = textwrap.dedent(
27722772
"""
27732773
with {original} as (
@@ -2887,7 +2887,7 @@ def delete(self, pk_values: Union[list, tuple, str, int, float]) -> "Table":
28872887
def delete_where(
28882888
self,
28892889
where: Optional[str] = None,
2890-
where_args: Optional[Union[Iterable, dict]] = None,
2890+
where_args: Optional[Union[Sequence, Dict[str, Any]]] = None,
28912891
analyze: bool = False,
28922892
) -> "Table":
28932893
"""
@@ -2978,9 +2978,9 @@ def convert(
29782978
drop: bool = False,
29792979
multi: bool = False,
29802980
where: Optional[str] = None,
2981-
where_args: Optional[Union[Iterable, dict]] = None,
2981+
where_args: Optional[Union[Sequence, Dict[str, Any]]] = None,
29822982
show_progress: bool = False,
2983-
):
2983+
) -> "Table":
29842984
"""
29852985
Apply conversion function ``fn`` to every value in the specified columns.
29862986
@@ -3143,7 +3143,7 @@ def build_insert_queries_and_params(
31433143
if has_extracts:
31443144
for i, key in enumerate(all_columns):
31453145
if key in extracts:
3146-
record_values[i] = self.db[extracts[key]].lookup(
3146+
record_values[i] = self.db.table(extracts[key]).lookup(
31473147
{"value": record_values[i]}
31483148
)
31493149
values.append(record_values)
@@ -3164,7 +3164,7 @@ def build_insert_queries_and_params(
31643164
)
31653165
if key in extracts:
31663166
extract_table = extracts[key]
3167-
value = self.db[extract_table].lookup({"value": value})
3167+
value = self.db.table(extract_table).lookup({"value": value})
31683168
record_values.append(value)
31693169
values.append(record_values)
31703170

@@ -3874,7 +3874,7 @@ def m2m(
38743874
already exists.
38753875
"""
38763876
if isinstance(other_table, str):
3877-
other_table = cast(Table, self.db.table(other_table, pk=pk))
3877+
other_table = self.db.table(other_table, pk=pk)
38783878
our_id = self.last_pk
38793879
if lookup is not None:
38803880
assert record_or_iterable is None, "Provide lookup= or record, not both"

sqlite_utils/utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -237,8 +237,8 @@ def file_progress(
237237
if fileno == 0: # 0 means stdin
238238
yield file
239239
else:
240-
file_length = os.path.getsize(file.name)
241-
with click.progressbar(length=file_length, **kwargs) as bar:
240+
file_length = os.path.getsize(file.name) # type: ignore
241+
with click.progressbar(length=file_length, **kwargs) as bar: # type: ignore
242242
yield UpdateWrapper(file, bar.update)
243243

244244

@@ -516,7 +516,7 @@ def progressbar(*args: Iterable[T], **kwargs: Any) -> Generator[Any, None, None]
516516
if silent:
517517
yield NullProgressBar(*args)
518518
else:
519-
with click.progressbar(*args, **kwargs) as bar:
519+
with click.progressbar(*args, **kwargs) as bar: # type: ignore
520520
yield bar
521521

522522

tests/test_tracer.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def tracer(sql, params):
5050
with db.tracer(tracer):
5151
list(dogs.search("Cleopaws"))
5252

53-
assert len(collected) == 5
53+
assert len(collected) == 4
5454
assert collected == [
5555
(
5656
"SELECT name FROM sqlite_master\n"
@@ -70,7 +70,6 @@ def tracer(sql, params):
7070
},
7171
),
7272
("select name from sqlite_master where type = 'view'", None),
73-
("select name from sqlite_master where type = 'view'", None),
7473
("select sql from sqlite_master where name = ?", ("dogs_fts",)),
7574
(
7675
'with "original" as (\n'
@@ -94,4 +93,4 @@ def tracer(sql, params):
9493

9594
# Outside the with block collected should not be appended to
9695
dogs.insert({"name": "Cleopaws"})
97-
assert len(collected) == 5
96+
assert len(collected) == 4

0 commit comments

Comments
 (0)