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>
|
||||
|
||||
<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>
|
||||
<pre></pre>
|
||||
</div>
|
||||
|
|
@ -64,12 +65,15 @@ form.addEventListener("submit", (ev) => {
|
|||
headers: {
|
||||
'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');
|
||||
if (r.errors) {
|
||||
if (data.errors) {
|
||||
errorList.style.display = 'block';
|
||||
errorList.innerHTML = '';
|
||||
r.errors.forEach(error => {
|
||||
data.errors.forEach(error => {
|
||||
var li = document.createElement('li');
|
||||
li.textContent = error;
|
||||
errorList.appendChild(li);
|
||||
|
|
@ -77,7 +81,7 @@ form.addEventListener("submit", (ev) => {
|
|||
} else {
|
||||
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';
|
||||
}).catch(err => {
|
||||
alert("Error: " + err);
|
||||
|
|
|
|||
|
|
@ -1206,7 +1206,10 @@ class TableInsertView(BaseView):
|
|||
else:
|
||||
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}
|
||||
if should_return:
|
||||
result["rows"] = rows
|
||||
|
|
|
|||
|
|
@ -156,6 +156,13 @@ async def test_write_rows(ds_write, return_rows):
|
|||
400,
|
||||
["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",
|
||||
{"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
|
||||
):
|
||||
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":
|
||||
token += "bad"
|
||||
kwargs = dict(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue