mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
Also improved API explorer to show HTTP status of response, refs #1871
This commit is contained in:
parent
9bec7c38eb
commit
497290beaf
3 changed files with 24 additions and 6 deletions
|
|
@ -27,7 +27,8 @@
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div id="output" style="display: none">
|
<div id="output" style="display: none">
|
||||||
<h2>API response</h2>
|
<h2>API response: HTTP <span id="response-status"></span></h2>
|
||||||
|
</h2>
|
||||||
<ul class="errors message-error"></ul>
|
<ul class="errors message-error"></ul>
|
||||||
<pre></pre>
|
<pre></pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -64,12 +65,15 @@ form.addEventListener("submit", (ev) => {
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
}
|
}
|
||||||
}).then(r => r.json()).then(r => {
|
}).then(r => {
|
||||||
|
document.getElementById('response-status').textContent = r.status;
|
||||||
|
return r.json();
|
||||||
|
}).then(data => {
|
||||||
var errorList = output.querySelector('.errors');
|
var errorList = output.querySelector('.errors');
|
||||||
if (r.errors) {
|
if (data.errors) {
|
||||||
errorList.style.display = 'block';
|
errorList.style.display = 'block';
|
||||||
errorList.innerHTML = '';
|
errorList.innerHTML = '';
|
||||||
r.errors.forEach(error => {
|
data.errors.forEach(error => {
|
||||||
var li = document.createElement('li');
|
var li = document.createElement('li');
|
||||||
li.textContent = error;
|
li.textContent = error;
|
||||||
errorList.appendChild(li);
|
errorList.appendChild(li);
|
||||||
|
|
@ -77,7 +81,7 @@ form.addEventListener("submit", (ev) => {
|
||||||
} else {
|
} else {
|
||||||
errorList.style.display = 'none';
|
errorList.style.display = 'none';
|
||||||
}
|
}
|
||||||
output.querySelector('pre').innerText = JSON.stringify(r, null, 2);
|
output.querySelector('pre').innerText = JSON.stringify(data, null, 2);
|
||||||
output.style.display = 'block';
|
output.style.display = 'block';
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
alert("Error: " + err);
|
alert("Error: " + err);
|
||||||
|
|
|
||||||
|
|
@ -1206,7 +1206,10 @@ class TableInsertView(BaseView):
|
||||||
else:
|
else:
|
||||||
table.insert_all(rows, ignore=ignore, replace=replace)
|
table.insert_all(rows, ignore=ignore, replace=replace)
|
||||||
|
|
||||||
rows = await db.execute_write_fn(insert_rows)
|
try:
|
||||||
|
rows = await db.execute_write_fn(insert_rows)
|
||||||
|
except Exception as e:
|
||||||
|
return _error([str(e)])
|
||||||
result = {"ok": True}
|
result = {"ok": True}
|
||||||
if should_return:
|
if should_return:
|
||||||
result["rows"] = rows
|
result["rows"] = rows
|
||||||
|
|
|
||||||
|
|
@ -156,6 +156,13 @@ async def test_write_rows(ds_write, return_rows):
|
||||||
400,
|
400,
|
||||||
["Too many rows, maximum allowed is 100"],
|
["Too many rows, maximum allowed is 100"],
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
"/data/docs/-/insert",
|
||||||
|
{"rows": [{"id": 1, "title": "Test"}]},
|
||||||
|
"duplicate_id",
|
||||||
|
400,
|
||||||
|
["UNIQUE constraint failed: docs.id"],
|
||||||
|
),
|
||||||
(
|
(
|
||||||
"/data/docs/-/insert",
|
"/data/docs/-/insert",
|
||||||
{"rows": [{"title": "Test"}], "ignore": True, "replace": True},
|
{"rows": [{"title": "Test"}], "ignore": True, "replace": True},
|
||||||
|
|
@ -194,6 +201,10 @@ async def test_write_row_errors(
|
||||||
ds_write, path, input, special_case, expected_status, expected_errors
|
ds_write, path, input, special_case, expected_status, expected_errors
|
||||||
):
|
):
|
||||||
token = write_token(ds_write)
|
token = write_token(ds_write)
|
||||||
|
if special_case == "duplicate_id":
|
||||||
|
await ds_write.get_database("data").execute_write(
|
||||||
|
"insert into docs (id) values (1)"
|
||||||
|
)
|
||||||
if special_case == "bad_token":
|
if special_case == "bad_token":
|
||||||
token += "bad"
|
token += "bad"
|
||||||
kwargs = dict(
|
kwargs = dict(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue