Format with Black, remove unused imports, fix implicitly concatenated string

This commit is contained in:
Hugo van Kemenade 2024-11-24 11:53:00 +02:00
commit 9c9fdc3790
11 changed files with 95 additions and 112 deletions

View file

@ -127,19 +127,21 @@
}
],
"source": [
"db[\"creatures\"].insert_all([{\n",
" \"name\": \"Cleo\",\n",
" \"species\": \"dog\",\n",
" \"age\": 6\n",
"}, {\n",
" \"name\": \"Lila\",\n",
" \"species\": \"chicken\",\n",
" \"age\": 0.8,\n",
"}, {\n",
" \"name\": \"Bants\",\n",
" \"species\": \"chicken\",\n",
" \"age\": 0.8,\n",
"}])"
"db[\"creatures\"].insert_all(\n",
" [\n",
" {\"name\": \"Cleo\", \"species\": \"dog\", \"age\": 6},\n",
" {\n",
" \"name\": \"Lila\",\n",
" \"species\": \"chicken\",\n",
" \"age\": 0.8,\n",
" },\n",
" {\n",
" \"name\": \"Bants\",\n",
" \"species\": \"chicken\",\n",
" \"age\": 0.8,\n",
" },\n",
" ]\n",
")"
]
},
{
@ -341,7 +343,9 @@
}
],
"source": [
"list(db.query(\"select * from creatures where species = :species\", {\"species\": \"chicken\"}))"
"list(\n",
" db.query(\"select * from creatures where species = :species\", {\"species\": \"chicken\"})\n",
")"
]
},
{
@ -506,22 +510,24 @@
}
],
"source": [
"db[\"creatures\"].insert_all([{\n",
" \"id\": 1,\n",
" \"name\": \"Cleo\",\n",
" \"species\": \"dog\",\n",
" \"age\": 6\n",
"}, {\n",
" \"id\": 2,\n",
" \"name\": \"Lila\",\n",
" \"species\": \"chicken\",\n",
" \"age\": 0.8,\n",
"}, {\n",
" \"id\": 3,\n",
" \"name\": \"Bants\",\n",
" \"species\": \"chicken\",\n",
" \"age\": 0.8,\n",
"}], pk=\"id\")"
"db[\"creatures\"].insert_all(\n",
" [\n",
" {\"id\": 1, \"name\": \"Cleo\", \"species\": \"dog\", \"age\": 6},\n",
" {\n",
" \"id\": 2,\n",
" \"name\": \"Lila\",\n",
" \"species\": \"chicken\",\n",
" \"age\": 0.8,\n",
" },\n",
" {\n",
" \"id\": 3,\n",
" \"name\": \"Bants\",\n",
" \"species\": \"chicken\",\n",
" \"age\": 0.8,\n",
" },\n",
" ],\n",
" pk=\"id\",\n",
")"
]
},
{
@ -575,17 +581,23 @@
}
],
"source": [
"table.insert_all([{\n",
" \"id\": 4,\n",
" \"name\": \"Azi\",\n",
" \"species\": \"chicken\",\n",
" \"age\": 0.8,\n",
"}, {\n",
" \"id\": 5,\n",
" \"name\": \"Snowy\",\n",
" \"species\": \"chicken\",\n",
" \"age\": 0.9,\n",
"}], pk=\"id\")"
"table.insert_all(\n",
" [\n",
" {\n",
" \"id\": 4,\n",
" \"name\": \"Azi\",\n",
" \"species\": \"chicken\",\n",
" \"age\": 0.8,\n",
" },\n",
" {\n",
" \"id\": 5,\n",
" \"name\": \"Snowy\",\n",
" \"species\": \"chicken\",\n",
" \"age\": 0.9,\n",
" },\n",
" ],\n",
" pk=\"id\",\n",
")"
]
},
{
@ -1006,7 +1018,9 @@
}
],
"source": [
"list(db.query(\"\"\"\n",
"list(\n",
" db.query(\n",
" \"\"\"\n",
" select\n",
" creatures.id,\n",
" creatures.name,\n",
@ -1015,7 +1029,9 @@
" species.species\n",
" from creatures\n",
" join species on creatures.species_id = species.id\n",
"\"\"\"))"
"\"\"\"\n",
" )\n",
")"
]
},
{

View file

@ -1,5 +1,4 @@
from setuptools import setup, find_packages
import io
import os
VERSION = "3.38"

View file

@ -2137,9 +2137,7 @@ def search(
table_columns = table_obj.columns_dict
for c in column:
if c not in table_columns:
raise click.ClickException(
f"Table '{dbtable}' has no column '{c}"
)
raise click.ClickException(f"Table '{dbtable}' has no column '{c}")
sql = table_obj.search_sql(columns=column, order_by=order, limit=limit)
if show_sql:
click.echo(sql)

View file

@ -28,11 +28,8 @@ from typing import (
cast,
Any,
Callable,
Dict,
Union,
Optional,
List,
Tuple,
)
from collections.abc import Generator, Iterable
import uuid
@ -590,9 +587,7 @@ class Database:
query += '"'
bits = _quote_fts_re.split(query)
bits = [b for b in bits if b and b != '""']
return " ".join(
f'"{bit}"' if not bit.startswith('"') else bit for bit in bits
)
return " ".join(f'"{bit}"' if not bit.startswith('"') else bit for bit in bits)
def quote_default_value(self, value: str) -> str:
if any(
@ -680,9 +675,7 @@ class Database:
try:
table_name = f"t{secrets.token_hex(16)}"
with self.conn:
self.conn.execute(
f"create table {table_name} (name text) strict"
)
self.conn.execute(f"create table {table_name} (name text) strict")
self.conn.execute(f"drop table {table_name}")
return True
except Exception:
@ -907,9 +900,7 @@ class Database:
if fk.other_column != "rowid" and not any(
c for c in self[fk.other_table].columns if c.name == fk.other_column
):
raise AlterError(
f"No such column: {fk.other_table}.{fk.other_column}"
)
raise AlterError(f"No such column: {fk.other_table}.{fk.other_column}")
column_defs = []
# ensure pk is a tuple
@ -1592,9 +1583,7 @@ class Table(Queryable):
for row in self.db.execute_returning_dicts(sql):
index_name = row["name"]
index_name_quoted = (
f'"{index_name}"'
if not index_name.startswith('"')
else index_name
f'"{index_name}"' if not index_name.startswith('"') else index_name
)
column_sql = f"PRAGMA index_info({index_name_quoted})"
columns = []
@ -1616,9 +1605,7 @@ class Table(Queryable):
for row in self.db.execute_returning_dicts(sql):
index_name = row["name"]
index_name_quoted = (
f'"{index_name}"'
if not index_name.startswith('"')
else index_name
f'"{index_name}"' if not index_name.startswith('"') else index_name
)
column_sql = f"PRAGMA index_xinfo({index_name_quoted})"
index_columns = []
@ -1971,15 +1958,11 @@ class Table(Queryable):
sqls.append(copy_sql)
# Drop (or keep) the old table
if keep_table:
sqls.append(
f"ALTER TABLE [{self.name}] RENAME TO [{keep_table}];"
)
sqls.append(f"ALTER TABLE [{self.name}] RENAME TO [{keep_table}];")
else:
sqls.append(f"DROP TABLE [{self.name}];")
# Rename the new one
sqls.append(
f"ALTER TABLE [{new_table_name}] RENAME TO [{self.name}];"
)
sqls.append(f"ALTER TABLE [{new_table_name}] RENAME TO [{self.name}];")
# Re-add existing indexes
for index in self.indexes:
if index.origin != "pk":
@ -2152,9 +2135,7 @@ class Table(Queryable):
suffix = None
created_index_name = None
while True:
created_index_name = (
f"{index_name}_{suffix}" if suffix else index_name
)
created_index_name = f"{index_name}_{suffix}" if suffix else index_name
sql = (
textwrap.dedent(
"""
@ -2510,9 +2491,7 @@ class Table(Queryable):
"""
)
.strip()
.format(
table=self.name, columns=", ".join(f"[{c}]" for c in columns)
)
.format(table=self.name, columns=", ".join(f"[{c}]" for c in columns))
)
self.db.executescript(sql)
return self
@ -3677,9 +3656,9 @@ class Table(Queryable):
most_common_results = None
least_common_results = None
if num_distinct == 1:
value = db.execute(
f"select [{column}] from [{table}] limit 1"
).fetchone()[0]
value = db.execute(f"select [{column}] from [{table}] limit 1").fetchone()[
0
]
most_common_results = [(truncate(value), total_rows)]
elif num_distinct != total_rows:
if most_common:

View file

@ -9,7 +9,7 @@ import json
import os
import sys
from . import recipes
from typing import Dict, cast, BinaryIO, Optional, Tuple, Type
from typing import cast, BinaryIO, Optional
from collections.abc import Iterable
import click
@ -226,9 +226,7 @@ def _extra_key_strategy(
yield row
elif not extras_key:
extras = row.pop(None) # type: ignore
raise RowError(
f"Row {row} contained these extra values: {extras}"
)
raise RowError(f"Row {row} contained these extra values: {extras}")
else:
row[extras_key] = row.pop(None) # type: ignore
yield row

View file

@ -845,14 +845,14 @@ def test_query_json_binary(db_path):
"data": {
"$base64": True,
"encoded": (
"eJzt0c1xAyEMBeC7q1ABHleR3HxNAQrIjmb4M0gelx+RTY7p4N2WBYT0vmufUknH"
"8kq5lz5pqRFXsTOl3pYkE/NJnHXoStruJEVjc0mOCyTqq/ZMJnXEZW1Js2ZvRm5U+"
"DPKk9hRWqjyvTFx0YfzhT6MpGmN2lR1fzxjyfVMD9dFrS+bnkleMpMam/ZGXgrX1I"
"/K+5Au3S/9lNQRh0k4Gq/RUz8GiKfsQm+7JLsJ6fTo5JhVG00ZU76kZZkxePx49uI"
"jnpNoJyYlWUsoaSl/CcVATje/Kxu13RANnrHweaH3V5Jh4jvGyKCnxJLiXPKhmW3f"
"iCnG7Jql7RR3UvFo8jJ4z039dtOkTFmWzL1be9lt8A5II471m6vXy+l0BR/4wAc+8"
"IEPfOADH/jABz7wgQ984AMf+MAHPvCBD3zgAx/4wAc+8IEPfOADH/jABz7wgQ984A"
"Mf+MAHPvCBD3zgAx/4wAc+8IEPfOADH/jABz7wgQ984PuP7xubBoN9"
"eJzt0c1xAyEMBeC7q1ABHleR3HxNAQrIjmb4M0gelx+RTY7p4N2WBYT0vmufUknH"
"8kq5lz5pqRFXsTOl3pYkE/NJnHXoStruJEVjc0mOCyTqq/ZMJnXEZW1Js2ZvRm5U+"
"DPKk9hRWqjyvTFx0YfzhT6MpGmN2lR1fzxjyfVMD9dFrS+bnkleMpMam/ZGXgrX1I"
"/K+5Au3S/9lNQRh0k4Gq/RUz8GiKfsQm+7JLsJ6fTo5JhVG00ZU76kZZkxePx49uI"
"jnpNoJyYlWUsoaSl/CcVATje/Kxu13RANnrHweaH3V5Jh4jvGyKCnxJLiXPKhmW3f"
"iCnG7Jql7RR3UvFo8jJ4z039dtOkTFmWzL1be9lt8A5II471m6vXy+l0BR/4wAc+8"
"IEPfOADH/jABz7wgQ984AMf+MAHPvCBD3zgAx/4wAc+8IEPfOADH/jABz7wgQ984A"
"Mf+MAHPvCBD3zgAx/4wAc+8IEPfOADH/jABz7wgQ984PuP7xubBoN9"
),
},
}
@ -1171,12 +1171,12 @@ def test_upsert_alter(db_path, tmpdir):
# Not null:
(
["name", "text", "--not-null", "name"],
("CREATE TABLE [t] (\n" " [name] TEXT NOT NULL\n" ")"),
("CREATE TABLE [t] (\n [name] TEXT NOT NULL\n)"),
),
# Default:
(
["age", "integer", "--default", "age", "3"],
("CREATE TABLE [t] (\n" " [age] INTEGER DEFAULT '3'\n" ")"),
("CREATE TABLE [t] (\n [age] INTEGER DEFAULT '3'\n)"),
),
# Compound primary key
(
@ -2052,7 +2052,7 @@ def test_triggers(tmpdir, extra_args, expected):
),
(
["dogs"],
("CREATE TABLE [dogs] (\n" " [id] INTEGER,\n" " [name] TEXT\n" ")\n"),
("CREATE TABLE [dogs] (\n [id] INTEGER,\n [name] TEXT\n)\n"),
),
(
["chickens", "dogs"],
@ -2328,7 +2328,7 @@ def test_rename_table(tmpdir):
)
assert result_error.exit_code == 1
assert result_error.output == (
'Error: Table "missing" could not be renamed. ' "no such table: missing\n"
'Error: Table "missing" could not be renamed. no such table: missing\n'
)
# And check --ignore works
result_error2 = CliRunner().invoke(

View file

@ -140,8 +140,7 @@ def test_insert_multiple_with_compound_primary_key(db_path, tmpdir):
def test_insert_not_null_default(db_path, tmpdir):
json_path = str(tmpdir / "dogs.json")
dogs = [
{"id": i, "name": f"Cleo {i}", "age": i + 3, "score": 10}
for i in range(1, 21)
{"id": i, "name": f"Cleo {i}", "age": i + 3, "score": 10} for i in range(1, 21)
]
with open(json_path, "w") as fp:
fp.write(json.dumps(dogs))

View file

@ -118,7 +118,7 @@ def test_memory_json_nl(tmpdir, use_stdin):
@pytest.mark.parametrize("use_stdin", (True, False))
def test_memory_csv_encoding(tmpdir, use_stdin):
latin1_csv = (
b"date,name,latitude,longitude\n" b"2020-03-04,S\xe3o Paulo,-23.561,-46.645\n"
b"date,name,latitude,longitude\n2020-03-04,S\xe3o Paulo,-23.561,-46.645\n"
)
input = None
if use_stdin:

View file

@ -710,10 +710,7 @@ def test_columns_not_in_first_record_should_not_cause_batch_to_be_too_large(fres
records = [
{"c0": "first record"}, # one column in first record -> batch size = 999
# fill out the batch with 99 records with enough columns to exceed THRESHOLD
*[
{f"c{i}": j for i in range(extra_columns)}
for j in range(batch_size - 1)
],
*[{f"c{i}": j for i in range(extra_columns)} for j in range(batch_size - 1)],
]
try:
fresh_db["too_many_columns"].insert_all(
@ -810,7 +807,7 @@ def test_create_index_desc(fresh_db):
"select sql from sqlite_master where name='idx_dogs_age_name'"
).fetchone()[0]
assert sql == (
"CREATE INDEX [idx_dogs_age_name]\n" " ON [dogs] ([age] desc, [name])"
"CREATE INDEX [idx_dogs_age_name]\n ON [dogs] ([age] desc, [name])"
)
@ -889,9 +886,7 @@ def test_insert_memoryview(fresh_db):
def test_insert_thousands_using_generator(fresh_db):
fresh_db["test"].insert_all(
{"i": i, "word": f"word_{i}"} for i in range(10000)
)
fresh_db["test"].insert_all({"i": i, "word": f"word_{i}"} for i in range(10000))
assert [{"name": "i", "type": "INTEGER"}, {"name": "word", "type": "TEXT"}] == [
{"name": col.name, "type": col.type} for col in fresh_db["test"].columns
]
@ -1228,7 +1223,7 @@ def test_create_replace(fresh_db):
fresh_db["t"].create({"id": int})
# This should not
fresh_db["t"].create({"name": str}, replace=True)
assert fresh_db["t"].schema == ("CREATE TABLE [t] (\n" " [name] TEXT\n" ")")
assert fresh_db["t"].schema == ("CREATE TABLE [t] (\n [name] TEXT\n)")
@pytest.mark.parametrize(
@ -1352,7 +1347,7 @@ def test_insert_upsert_strict(fresh_db, method_name, strict):
def test_create_table_strict(fresh_db, strict):
table = fresh_db.create_table("t", {"id": int, "f": float}, strict=strict)
assert table.strict == strict or not fresh_db.supports_strict
expected_schema = "CREATE TABLE [t] (\n" " [id] INTEGER,\n" " [f] FLOAT\n" ")"
expected_schema = "CREATE TABLE [t] (\n [id] INTEGER,\n [f] FLOAT\n)"
if strict and not fresh_db.supports_strict:
return
if strict:

View file

@ -31,8 +31,7 @@ def test_extract_single_column(fresh_db, table, fk_column):
+ ")"
)
assert fresh_db[expected_table].schema == (
f"CREATE TABLE [{expected_table}] (\n"
+ " [id] INTEGER PRIMARY KEY,\n"
f"CREATE TABLE [{expected_table}] (\n [id] INTEGER PRIMARY KEY,\n"
" [species] TEXT\n"
")"
)

View file

@ -25,7 +25,7 @@ def test_extracts(fresh_db, kwargs, expected_table, use_table_factory):
{"id": 2, "species_id": "Oak"},
{"id": 3, "species_id": "Palm"},
],
**insert_kwargs
**insert_kwargs,
)
# Should now have two tables: Trees and Species
assert {expected_table, "Trees"} == set(fresh_db.table_names())