mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-09-11 19:14:10 +02:00
Nicer error message for invalid JSON insert, closes #206
This commit is contained in:
parent
6d1828e40b
commit
1e38a16ea8
2 changed files with 26 additions and 5 deletions
|
|
@ -654,12 +654,19 @@ def insert_upsert_implementation(
|
||||||
reader = csv_std.reader(json_file, dialect=dialect)
|
reader = csv_std.reader(json_file, dialect=dialect)
|
||||||
headers = next(reader)
|
headers = next(reader)
|
||||||
docs = (dict(zip(headers, row)) for row in reader)
|
docs = (dict(zip(headers, row)) for row in reader)
|
||||||
elif nl:
|
|
||||||
docs = (json.loads(line) for line in json_file)
|
|
||||||
else:
|
else:
|
||||||
docs = json.load(json_file)
|
try:
|
||||||
if isinstance(docs, dict):
|
if nl:
|
||||||
docs = [docs]
|
docs = (json.loads(line) for line in json_file)
|
||||||
|
else:
|
||||||
|
docs = json.load(json_file)
|
||||||
|
if isinstance(docs, dict):
|
||||||
|
docs = [docs]
|
||||||
|
except json.decoder.JSONDecodeError:
|
||||||
|
raise click.ClickException(
|
||||||
|
"Invalid JSON - use --csv for CSV or --tsv for TSV files"
|
||||||
|
)
|
||||||
|
|
||||||
extra_kwargs = {"ignore": ignore, "replace": replace, "truncate": truncate}
|
extra_kwargs = {"ignore": ignore, "replace": replace, "truncate": truncate}
|
||||||
if not_null:
|
if not_null:
|
||||||
extra_kwargs["not_null"] = set(not_null)
|
extra_kwargs["not_null"] = set(not_null)
|
||||||
|
|
|
||||||
|
|
@ -584,6 +584,20 @@ def test_insert_from_stdin(tmpdir):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_insert_invalid_json_error(tmpdir):
|
||||||
|
db_path = str(tmpdir / "dogs.db")
|
||||||
|
result = CliRunner().invoke(
|
||||||
|
cli.cli,
|
||||||
|
["insert", db_path, "dogs", "-"],
|
||||||
|
input="name,age\nCleo,4",
|
||||||
|
)
|
||||||
|
assert result.exit_code == 1
|
||||||
|
assert (
|
||||||
|
result.output
|
||||||
|
== "Error: Invalid JSON - use --csv for CSV or --tsv for TSV files\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_insert_with_primary_key(db_path, tmpdir):
|
def test_insert_with_primary_key(db_path, tmpdir):
|
||||||
json_path = str(tmpdir / "dog.json")
|
json_path = str(tmpdir / "dog.json")
|
||||||
open(json_path, "w").write(json.dumps({"id": 1, "name": "Cleo", "age": 4}))
|
open(json_path, "w").write(json.dumps({"id": 1, "name": "Cleo", "age": 4}))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue