home / github

Menu
  • Search all tables
  • GraphQL API

issue_comments

Table actions
  • GraphQL API for issue_comments

22 rows where issue = 1421544654 sorted by updated_at descending

✖
✖

✎ View and edit SQL

This data as json, CSV (advanced)

Suggested facets: created_at (date), updated_at (date)

user 4

  • simonw 17
  • eyeseast 3
  • ocdtrekkie 1
  • asg017 1

author_association 3

  • OWNER 17
  • CONTRIBUTOR 4
  • NONE 1

issue 1

  • API to insert a single record into an existing table · 22 ✖
id html_url issue_url node_id user created_at updated_at ▲ author_association body reactions issue performed_via_github_app
1294224185 https://github.com/simonw/datasette/issues/1851#issuecomment-1294224185 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NJEs5 simonw 9599 2022-10-27T23:18:24Z 2022-11-03T23:26:05Z OWNER

So new API design is:

POST /db/table/-/insert Authorization: Bearer xxx Content-Type: application/json { "row": { "id": 1, "name": "New record" } } Returns: 201 Created { "row": [{ "id": 1, "name": "New record" }] }

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1294281451 https://github.com/simonw/datasette/issues/1851#issuecomment-1294281451 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NJSrr simonw 9599 2022-10-28T00:59:25Z 2022-10-28T00:59:25Z OWNER

I'm going to use this endpoint for bulk inserts too, so I'm closing this issue and continuing the work here: - #1866

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1289712350 https://github.com/simonw/datasette/issues/1851#issuecomment-1289712350 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5M33Le simonw 9599 2022-10-24T22:28:39Z 2022-10-27T23:18:48Z OWNER

API design: (**UPDATE: this was later changed to POST /db/table/-/insert)

POST /db/table Authorization: Bearer xxx Content-Type: application/json { "row": { "id": 1, "name": "New record" } } Returns: 201 Created { "row": { "id": 1, "name": "New record" } } You can omit optional fields in the input, including the ID field. The returned object will always include all fields - and will even include rowid if your object doesn't have a primary key of its own.

I decided to use "row" as the key in both request and response, to preserve space for other future keys - one that tells you that the table has been created, for example.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1294012583 https://github.com/simonw/datasette/issues/1851#issuecomment-1294012583 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NIRCn simonw 9599 2022-10-27T20:11:22Z 2022-10-27T20:11:22Z OWNER

And the response to "inserted": [{...}] - it will be the same for bulk inserts.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1294012084 https://github.com/simonw/datasette/issues/1851#issuecomment-1294012084 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NIQ60 simonw 9599 2022-10-27T20:10:47Z 2022-10-27T20:10:47Z OWNER

I'm going to change the incoming JSON back to {"row": {...}} - no need to POST {"insert": ...} to something with /-/insert in the URL already.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1294009354 https://github.com/simonw/datasette/issues/1851#issuecomment-1294009354 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NIQQK simonw 9599 2022-10-27T20:07:42Z 2022-10-27T20:07:42Z OWNER

Need to implement the new URL design from: - #1868

This is now going to be /db/table/-/insert - and it will eventually handle bulk inserts as well as single inserts.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1293996735 https://github.com/simonw/datasette/issues/1851#issuecomment-1293996735 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NINK_ simonw 9599 2022-10-27T19:54:53Z 2022-10-27T19:54:53Z OWNER

Updated docs: https://docs.datasette.io/en/1.0-dev/json_api.html#inserting-a-single-row

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292997608 https://github.com/simonw/datasette/issues/1851#issuecomment-1292997608 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NEZPo simonw 9599 2022-10-27T04:54:53Z 2022-10-27T19:05:50Z OWNER

I'm going to change the design of this to: { "insert": { "title" :"..." } } Renaming "row" to "insert".

This will be consistent with adding "drop": true for dropping a table, and maybe other verbs like for modifying the schema.

The API response will look like this:

json { "inserted_row": { "id": 1, "title": "..." } }

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292999579 https://github.com/simonw/datasette/issues/1851#issuecomment-1292999579 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NEZub simonw 9599 2022-10-27T04:59:06Z 2022-10-27T04:59:12Z OWNER

I should probably refactor this to use sqlite-utils, since I'm going to want to use that later for the feature that automatically creates tables.

Might make it easier to solve the rowid issues too.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292996181 https://github.com/simonw/datasette/issues/1851#issuecomment-1292996181 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NEY5V simonw 9599 2022-10-27T04:51:47Z 2022-10-27T04:51:47Z OWNER

Also need a test for invalid JSON (currently triggers a 500 HTML error).

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292952121 https://github.com/simonw/datasette/issues/1851#issuecomment-1292952121 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NEOI5 simonw 9599 2022-10-27T04:24:09Z 2022-10-27T04:24:20Z OWNER

And come up with a whole bunch of tests for weird table shapes, surprising column names, different types etc.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292951833 https://github.com/simonw/datasette/issues/1851#issuecomment-1292951833 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NEOEZ simonw 9599 2022-10-27T04:23:40Z 2022-10-27T04:23:40Z OWNER

Also need to think about transactions - it should use them!

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292939146 https://github.com/simonw/datasette/issues/1851#issuecomment-1292939146 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NEK-K simonw 9599 2022-10-27T04:00:17Z 2022-10-27T04:23:15Z OWNER

Documentation for this first draft of the API: https://docs.datasette.io/en/1.0-dev/json_api.html#inserting-a-single-row

It currently returns errors as HTML - it needs to return errors as JSON. Also the errors need comprehensive test coverage.

I'm also worried about what happens if you use it on a table that doesn't use an integer primary key - need to check that. I think this code may break:

https://github.com/simonw/datasette/blob/51c436fed29205721dcf17fa31d7e7090d34ebb8/datasette/views/table.py#L155-L171

Plus will rowid tables without an explicit primary key return the rowid column? They should.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292592210 https://github.com/simonw/datasette/issues/1851#issuecomment-1292592210 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NC2RS eyeseast 25778 2022-10-26T20:03:46Z 2022-10-26T20:03:46Z CONTRIBUTOR

Yeah, every time I see something cool done with triggers, I remember that I need to start using triggers.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292544296 https://github.com/simonw/datasette/issues/1851#issuecomment-1292544296 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NCqko simonw 9599 2022-10-26T19:33:34Z 2022-10-26T19:33:34Z OWNER

That trigger solution is pretty neat!

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292519956 https://github.com/simonw/datasette/issues/1851#issuecomment-1292519956 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NCkoU asg017 15178711 2022-10-26T19:20:33Z 2022-10-26T19:20:33Z CONTRIBUTOR

This could use a new plugin hook, too. I don't want to complicate your life too much, but for things like GIS, I'd want a way to turn regular JSON into SpatiaLite geometries or combine X/Y coordinates into point geometries and such. Happy to help however I can.

@eyeseast Maybe you could do this with triggers? Like you can insert JSON-friendly data into a "raw" table, and create a trigger that transforms that inserted data into the proper table

Here's an example:

```sql -- meant to be updated from a Datasette insert create table points_raw(longitude int, latitude int);

-- the target table with proper spatliate geometries create table points(point geometry);

CREATE TRIGGER insert_points_raw INSERT ON points_raw BEGIN insert into points(point) values (makepoint(new.longitude, new.latitude)) END; ```

You could then POST a new row to points_raw like this: POST /db/points_raw Authorization: Bearer xxx Content-Type: application/json { "row": { "longitude": 27.64356, "latitude": -47.29384 } }

Then SQLite with run the trigger and insert a new row in points with the correct geometry point. Downside is you'd have duplicated data with points_raw, but maybe it could be a TEMP table (or have a cron that deletes all rows from that table every so often?)

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1291228502 https://github.com/simonw/datasette/issues/1851#issuecomment-1291228502 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5M9pVW eyeseast 25778 2022-10-25T23:02:10Z 2022-10-25T23:02:10Z CONTRIBUTOR

That's reasonable. Canned queries and custom endpoints are certainly going to give more room for specific needs.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1291226367 https://github.com/simonw/datasette/issues/1851#issuecomment-1291226367 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5M9oz_ simonw 9599 2022-10-25T22:58:30Z 2022-10-25T22:58:30Z OWNER

The datasette insert concept included plugin support, with the idea of being able to support things like SpatiaLite files: - #1160

I think this API mechanism is going to be a bit less exciting than that - it will be low-level for inserting rows, and if you want to do something fancier you can use a canned query that feeds incoming GeoJSON to a SpatiaLite function instead.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1290615599 https://github.com/simonw/datasette/issues/1851#issuecomment-1290615599 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5M7Tsv eyeseast 25778 2022-10-25T14:05:12Z 2022-10-25T14:05:12Z CONTRIBUTOR

This could use a new plugin hook, too. I don't want to complicate your life too much, but for things like GIS, I'd want a way to turn regular JSON into SpatiaLite geometries or combine X/Y coordinates into point geometries and such. Happy to help however I can.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1289865317 https://github.com/simonw/datasette/issues/1851#issuecomment-1289865317 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5M4chl simonw 9599 2022-10-25T01:42:47Z 2022-10-25T01:42:47Z OWNER

This is going to tie into Datasette's existing permissions mechanism, so plugins will be able to define their own custom mechanisms for tokens to be attached to a specific identity: https://docs.datasette.io/en/stable/authentication.html

There's only one plugin for API tokens at the moment, which is this one: https://datasette.io/plugins/datasette-auth-tokens

I'm actually planning on adding another, default token mechanism to Datasette itself as part of this work:

  • 1852

It may well be that datasette-sandstorm-support needs to add something custom here too.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1289752130 https://github.com/simonw/datasette/issues/1851#issuecomment-1289752130 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5M4A5C ocdtrekkie 4399499 2022-10-24T23:07:30Z 2022-10-24T23:07:30Z NONE

How are you tying the bearer token to identity? I'm excited to see this feature, and since Sandstorm controls API access using the same header, it also will transparently support the API documentation here, but we strip the bearer before the request reaches the app (replacing it with our existing auth headers, of course).

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1289713513 https://github.com/simonw/datasette/issues/1851#issuecomment-1289713513 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5M33dp simonw 9599 2022-10-24T22:29:58Z 2022-10-24T22:30:15Z OWNER

Interesting open question: how should validation errors (if any) be returned?

The two forms of validation I can think of at first are:

  • Missing keys which are marked as not null in the schema
  • Keys that do not match to existing columns (if you didn't pass "alter": true, an option I am considering)
{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  

Advanced export

JSON shape: default, array, newline-delimited, object

CSV options:

CREATE TABLE [issue_comments] (
   [html_url] TEXT,
   [issue_url] TEXT,
   [id] INTEGER PRIMARY KEY,
   [node_id] TEXT,
   [user] INTEGER REFERENCES [users]([id]),
   [created_at] TEXT,
   [updated_at] TEXT,
   [author_association] TEXT,
   [body] TEXT,
   [reactions] TEXT,
   [issue] INTEGER REFERENCES [issues]([id])
, [performed_via_github_app] TEXT);
CREATE INDEX [idx_issue_comments_issue]
                ON [issue_comments] ([issue]);
CREATE INDEX [idx_issue_comments_user]
                ON [issue_comments] ([user]);
Powered by Datasette · Queries took 19.946ms · About: github-to-sqlite
  • Sort ascending
  • Sort descending
  • Facet by this
  • Hide this column
  • Show all columns
  • Show not-blank rows