issue_comments
8,358 rows where author_association = "OWNER" sorted by updated_at descending
This data as json, CSV (advanced)
reactions 13 ✖
- {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 7,128
- {"total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 129
- {"total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 1, "rocket": 0, "eyes": 0} 28
- {"total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 1, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 28
- {"total_count": 2, "+1": 2, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 13
- {"total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 1, "eyes": 0} 10
- {"total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 1} 5
- {"total_count": 1, "+1": 0, "-1": 0, "laugh": 1, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 5
- {"total_count": 3, "+1": 3, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 5
- {"total_count": 2, "+1": 1, "-1": 0, "laugh": 0, "hooray": 1, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 3
- {"total_count": 2, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 1, "eyes": 0} 1
- {"total_count": 2, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 1, "rocket": 0, "eyes": 0} 1
- {"total_count": 3, "+1": 0, "-1": 0, "laugh": 0, "hooray": 3, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 1
user 1
- simonw 7,357
id | html_url | issue_url | node_id | user | created_at | updated_at ▲ | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
1343734812 | https://github.com/simonw/datasette/issues/1939#issuecomment-1343734812 | https://api.github.com/repos/simonw/datasette/issues/1939 | IC_kwDOBm6k_c5QF8Qc | simonw 9599 | 2022-12-09T01:57:07Z | 2022-12-09T01:57:07Z | OWNER | This search is better:
That returns 11 results: https://cs.github.com/?scopeName=All+repos&scope=&q=datasette+permission_allowed+-user%3Asimonw+-path%3Adatasette%2F+-path%3Adocs%2F+-path%3Atests%2F**+language%3Apython 3 are forks of my repos. The rest are all by four users: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
register_permissions(datasette) plugin hook 1485757511 | |
1343728929 | https://github.com/simonw/datasette/issues/1939#issuecomment-1343728929 | https://api.github.com/repos/simonw/datasette/issues/1939 | IC_kwDOBm6k_c5QF60h | simonw 9599 | 2022-12-09T01:48:11Z | 2022-12-09T01:52:33Z | OWNER | This code search shows a bunch of repos I don't know about that would be affected by this change: https://cs.github.com/?scopeName=All+repos&scope=&q=datasette+permission_allowed+-user%3Asimonw# These (and likely more): Repositories
Actually a lot of those are forks of Datasette itself - so maybe this is manageable? Would be nice if I could come up with a GitHub search that excluded any repos with "datasette" as their exact name.
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
register_permissions(datasette) plugin hook 1485757511 | |
1343727184 | https://github.com/simonw/datasette/issues/1939#issuecomment-1343727184 | https://api.github.com/repos/simonw/datasette/issues/1939 | IC_kwDOBm6k_c5QF6ZQ | simonw 9599 | 2022-12-09T01:45:15Z | 2022-12-09T01:45:15Z | OWNER | Moving the concept of the default for the permission into this registry warrants a redesign of this method anyway: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
register_permissions(datasette) plugin hook 1485757511 | |
1343724732 | https://github.com/simonw/datasette/issues/1939#issuecomment-1343724732 | https://api.github.com/repos/simonw/datasette/issues/1939 | IC_kwDOBm6k_c5QF5y8 | simonw 9599 | 2022-12-09T01:40:44Z | 2022-12-09T01:43:25Z | OWNER |
A question that was raised by the work in #1938 is whether you should be able to grant a permission like So maybe One thought is to use |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
register_permissions(datasette) plugin hook 1485757511 | |
1301645921 | https://github.com/simonw/datasette/issues/1881#issuecomment-1301645921 | https://api.github.com/repos/simonw/datasette/issues/1881 | IC_kwDOBm6k_c5NlYph | simonw 9599 | 2022-11-03T05:10:05Z | 2022-12-09T01:38:21Z | OWNER | I'd love to come up with a good short name for the second part of the resource two-tuple, the thing which is usually the name of a table but could also be the name of a SQL view or the name of a canned query. Idea 8th December: why not call it resource? A resource could be a thing that lives inside a database. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Tool for simulating permission checks against actors 1434094365 | |
1343722020 | https://github.com/simonw/datasette/issues/1939#issuecomment-1343722020 | https://api.github.com/repos/simonw/datasette/issues/1939 | IC_kwDOBm6k_c5QF5Ik | simonw 9599 | 2022-12-09T01:36:05Z | 2022-12-09T01:36:16Z | OWNER | I originally added
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
register_permissions(datasette) plugin hook 1485757511 | |
1343721522 | https://github.com/simonw/datasette/issues/1939#issuecomment-1343721522 | https://api.github.com/repos/simonw/datasette/issues/1939 | IC_kwDOBm6k_c5QF5Ay | simonw 9599 | 2022-12-09T01:35:15Z | 2022-12-09T01:35:15Z | OWNER | One concern I have about this: there are a bunch of existing plugins that do stuff with permissions that won't currently be using this hook. Do I break those plugins, forcing new releases of them for compatibility with Datasette 1.0? Or maybe I keep them working, but until they've upgraded to register their permissions there are things about them that won't work - e.g. you won't be able to configure their permissions in Best thing is probably for me to get this working in core first and then evaluate the impact it would have on existing plugins once I have some running code. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
register_permissions(datasette) plugin hook 1485757511 | |
1343715746 | https://github.com/simonw/datasette/issues/1636#issuecomment-1343715746 | https://api.github.com/repos/simonw/datasette/issues/1636 | IC_kwDOBm6k_c5QF3mi | simonw 9599 | 2022-12-09T01:27:41Z | 2022-12-09T01:27:58Z | OWNER | I may need to consult this file to figure out if the permission that is being checked can act at the database/table/instance level: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"permissions" propery in metadata for configuring arbitrary permissions 1138008042 | |
1343446071 | https://github.com/simonw/datasette/issues/1636#issuecomment-1343446071 | https://api.github.com/repos/simonw/datasette/issues/1636 | IC_kwDOBm6k_c5QE1w3 | simonw 9599 | 2022-12-08T22:16:17Z | 2022-12-08T22:16:17Z | OWNER | First draft of documentation: https://datasette--1938.org.readthedocs.build/en/1938/authentication.html#other-permissions-in-metadata |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"permissions" propery in metadata for configuring arbitrary permissions 1138008042 | |
1343445885 | https://github.com/simonw/datasette/pull/1938#issuecomment-1343445885 | https://api.github.com/repos/simonw/datasette/issues/1938 | IC_kwDOBm6k_c5QE1t9 | simonw 9599 | 2022-12-08T22:16:03Z | 2022-12-08T22:16:03Z | OWNER | Docs: https://datasette--1938.org.readthedocs.build/en/1938/authentication.html#other-permissions-in-metadata |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"permissions" blocks in metadata.json/yaml 1485488236 | |
1343440504 | https://github.com/simonw/datasette/issues/1636#issuecomment-1343440504 | https://api.github.com/repos/simonw/datasette/issues/1636 | IC_kwDOBm6k_c5QE0Z4 | simonw 9599 | 2022-12-08T22:10:28Z | 2022-12-08T22:10:48Z | OWNER | What if you want to grant You should be able to do that by putting that in the root Also: there are some permissions like Ideally the implementation would spot those on startup and refuse to start the server, with a helpful error message. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"permissions" propery in metadata for configuring arbitrary permissions 1138008042 | |
1343360006 | https://github.com/simonw/datasette/pull/1930#issuecomment-1343360006 | https://api.github.com/repos/simonw/datasette/issues/1930 | IC_kwDOBm6k_c5QEgwG | simonw 9599 | 2022-12-08T21:12:28Z | 2022-12-08T21:12:28Z | OWNER | Thanks! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Typo in JSON API `Updating a row` documentation 1473664029 | |
1341874378 | https://github.com/simonw/datasette/issues/1867#issuecomment-1341874378 | https://api.github.com/repos/simonw/datasette/issues/1867 | IC_kwDOBm6k_c5P-2DK | simonw 9599 | 2022-12-08T02:07:06Z | 2022-12-08T02:28:02Z | OWNER | Basic version of this allows you to rename a table:
This is useful because it allows for that atomic replacement operation: upload brand new data into a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/table/-/rename API (also allows atomic replace) 1426080014 | |
1341854373 | https://github.com/simonw/datasette/issues/1636#issuecomment-1341854373 | https://api.github.com/repos/simonw/datasette/issues/1636 | IC_kwDOBm6k_c5P-xKl | simonw 9599 | 2022-12-08T01:43:35Z | 2022-12-08T01:43:35Z | OWNER | I'm going to write the documentation for this first. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"permissions" propery in metadata for configuring arbitrary permissions 1138008042 | |
1341849735 | https://github.com/simonw/datasette/issues/1936#issuecomment-1341849735 | https://api.github.com/repos/simonw/datasette/issues/1936 | IC_kwDOBm6k_c5P-wCH | simonw 9599 | 2022-12-08T01:35:54Z | 2022-12-08T01:35:54Z | OWNER | Running that twice produced this: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Fix /db/table/-/upsert in the API explorer 1483250004 | |
1341849496 | https://github.com/simonw/datasette/issues/1936#issuecomment-1341849496 | https://api.github.com/repos/simonw/datasette/issues/1936 | IC_kwDOBm6k_c5P-v-Y | simonw 9599 | 2022-12-08T01:35:35Z | 2022-12-08T01:35:35Z | OWNER | Related bug: you can send |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Fix /db/table/-/upsert in the API explorer 1483250004 | |
1341848525 | https://github.com/simonw/datasette/issues/1937#issuecomment-1341848525 | https://api.github.com/repos/simonw/datasette/issues/1937 | IC_kwDOBm6k_c5P-vvN | simonw 9599 | 2022-12-08T01:34:03Z | 2022-12-08T01:34:03Z | OWNER | Check should go somewhere around here: https://github.com/simonw/datasette/blob/dee18ed8ce7af2ab8699bcb5a51a99f48301bc42/datasette/views/database.py#L625-L631 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/-/create API should require insert-rows permission to use row: or rows: option 1483320357 | |
1341825314 | https://github.com/simonw/datasette/pull/1931#issuecomment-1341825314 | https://api.github.com/repos/simonw/datasette/issues/1931 | IC_kwDOBm6k_c5P-qEi | simonw 9599 | 2022-12-08T01:03:18Z | 2022-12-08T01:03:18Z | OWNER | I broke this test: ``` ds_write = <datasette.app.Datasette object at 0x7f0965858700>
/home/runner/work/datasette/datasette/tests/test_api_write.py:43: AssertionError ----------------------------- Captured stderr call ----------------------------- Traceback (most recent call last): File "/home/runner/work/datasette/datasette/datasette/app.py", line 1447, in route_path response = await view(request, send) File "/home/runner/work/datasette/datasette/datasette/views/base.py", line 151, in view return await self.dispatch_request(request) File "/home/runner/work/datasette/datasette/datasette/views/base.py", line 105, in dispatch_request response = await handler(request) File "/home/runner/work/datasette/datasette/datasette/views/table.py", line 1228, in post row_pk_values_for_later = [tuple(row[pk] for pk in pks) for row in rows] File "/home/runner/work/datasette/datasette/datasette/views/table.py", line 1228, in <listcomp> row_pk_values_for_later = [tuple(row[pk] for pk in pks) for row in rows] File "/home/runner/work/datasette/datasette/datasette/views/table.py", line 1228, in <genexpr> row_pk_values_for_later = [tuple(row[pk] for pk in pks) for row in rows] KeyError: 'id' ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/table/-/upsert 1473814539 | |
1341821213 | https://github.com/simonw/datasette/pull/1931#issuecomment-1341821213 | https://api.github.com/repos/simonw/datasette/issues/1931 | IC_kwDOBm6k_c5P-pEd | simonw 9599 | 2022-12-08T00:58:21Z | 2022-12-08T00:58:21Z | OWNER | In the interests of shipping, I'm going to punt the API explorer to a later issue. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/table/-/upsert 1473814539 | |
1339968514 | https://github.com/simonw/datasette/pull/1931#issuecomment-1339968514 | https://api.github.com/repos/simonw/datasette/issues/1931 | IC_kwDOBm6k_c5P3kwC | simonw 9599 | 2022-12-06T20:28:47Z | 2022-12-06T20:28:47Z | OWNER | Should the I think it should. Since this is small enough to happily fit in Python memory (thanks to the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/table/-/upsert 1473814539 | |
1339952692 | https://github.com/simonw/datasette/issues/1855#issuecomment-1339952692 | https://api.github.com/repos/simonw/datasette/issues/1855 | IC_kwDOBm6k_c5P3g40 | simonw 9599 | 2022-12-06T20:15:50Z | 2022-12-06T20:16:00Z | OWNER | That commit there https://github.com/simonw/datasette/commit/6da17d5529773dfe41b53ed4ce5a6ecb46ed2457 (which will be squash-merged in a PR later on) made it so that I needed that mechanism to write a test that exercised different API permissions. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`datasette create-token` ability to create tokens with a reduced set of permissions 1423336089 | |
1339911152 | https://github.com/simonw/datasette/pull/1931#issuecomment-1339911152 | https://api.github.com/repos/simonw/datasette/issues/1931 | IC_kwDOBm6k_c5P3Wvw | simonw 9599 | 2022-12-06T19:38:12Z | 2022-12-06T19:38:12Z | OWNER | Documentation: https://datasette--1931.org.readthedocs.build/en/1931/json_api.html#upserting-rows |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/table/-/upsert 1473814539 | |
1339910494 | https://github.com/simonw/datasette/issues/1927#issuecomment-1339910494 | https://api.github.com/repos/simonw/datasette/issues/1927 | IC_kwDOBm6k_c5P3Wle | simonw 9599 | 2022-12-06T19:37:39Z | 2022-12-06T19:37:39Z | OWNER | I'll finish this after I land: - #1931 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
ignore:true/replace:true options for /db/-/create API 1473411197 | |
1339909159 | https://github.com/simonw/datasette/issues/1929#issuecomment-1339909159 | https://api.github.com/repos/simonw/datasette/issues/1929 | IC_kwDOBm6k_c5P3WQn | simonw 9599 | 2022-12-06T19:36:23Z | 2022-12-06T19:36:23Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Incorrect link from the API explorer to the JSON API documentation 1473659191 | ||
1339871933 | https://github.com/simonw/datasette/issues/1929#issuecomment-1339871933 | https://api.github.com/repos/simonw/datasette/issues/1929 | IC_kwDOBm6k_c5P3NK9 | simonw 9599 | 2022-12-06T19:23:48Z | 2022-12-06T19:24:17Z | OWNER | I can do that on this page: https://readthedocs.org/projects/datasette/versions/?version_filter=1.0 I'm making them both active and hidden: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Incorrect link from the API explorer to the JSON API documentation 1473659191 | |
1339867570 | https://github.com/simonw/datasette/issues/1929#issuecomment-1339867570 | https://api.github.com/repos/simonw/datasette/issues/1929 | IC_kwDOBm6k_c5P3MGy | simonw 9599 | 2022-12-06T19:22:47Z | 2022-12-06T19:22:47Z | OWNER | Yeah I should deploy the docs for the alpha versions (the intention is that the docs exactly match the release you are using), thanks for spotting that. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Incorrect link from the API explorer to the JSON API documentation 1473659191 | |
1339834918 | https://github.com/simonw/sqlite-utils/issues/516#issuecomment-1339834918 | https://api.github.com/repos/simonw/sqlite-utils/issues/516 | IC_kwDOCGYnMM5P3EIm | simonw 9599 | 2022-12-06T19:00:18Z | 2022-12-06T19:00:35Z | OWNER | Right now the command produces no output at all. Maybe a Is there a better name than |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Feature request: output number of ignored/replaced rows for insert command 1479914599 | |
1339784569 | https://github.com/simonw/datasette/pull/1931#issuecomment-1339784569 | https://api.github.com/repos/simonw/datasette/issues/1931 | IC_kwDOBm6k_c5P2315 | simonw 9599 | 2022-12-06T18:16:15Z | 2022-12-06T18:17:56Z | OWNER | Just noticed the insert API returns UPDATE: no it did that already, it was just the documentation that was wrong. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/table/-/upsert 1473814539 | |
1339768422 | https://github.com/simonw/datasette/pull/1931#issuecomment-1339768422 | https://api.github.com/repos/simonw/datasette/issues/1931 | IC_kwDOBm6k_c5P2z5m | simonw 9599 | 2022-12-06T18:04:59Z | 2022-12-06T18:04:59Z | OWNER | I realized this API should require both the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/table/-/upsert 1473814539 | |
1302815929 | https://github.com/simonw/datasette/issues/1855#issuecomment-1302815929 | https://api.github.com/repos/simonw/datasette/issues/1855 | IC_kwDOBm6k_c5Np2S5 | simonw 9599 | 2022-11-04T00:19:10Z | 2022-12-03T07:05:51Z | OWNER | Added the tests. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`datasette create-token` ability to create tokens with a reduced set of permissions 1423336089 | |
1336100218 | https://github.com/simonw/datasette/issues/1878#issuecomment-1336100218 | https://api.github.com/repos/simonw/datasette/issues/1878 | IC_kwDOBm6k_c5Po0V6 | simonw 9599 | 2022-12-03T07:02:15Z | 2022-12-03T07:02:15Z | OWNER | Moved this work to a PR: - #1931 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/table/-/upsert API 1432013704 | |
1336099588 | https://github.com/simonw/datasette/issues/1927#issuecomment-1336099588 | https://api.github.com/repos/simonw/datasette/issues/1927 | IC_kwDOBm6k_c5Po0ME | simonw 9599 | 2022-12-03T06:58:14Z | 2022-12-03T06:58:14Z | OWNER | I have not yet documented the new |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
ignore:true/replace:true options for /db/-/create API 1473411197 | |
1336099533 | https://github.com/simonw/datasette/issues/1927#issuecomment-1336099533 | https://api.github.com/repos/simonw/datasette/issues/1927 | IC_kwDOBm6k_c5Po0LN | simonw 9599 | 2022-12-03T06:57:52Z | 2022-12-03T06:57:52Z | OWNER | I'm going to push what I have anyway. I'll keep this issue open while I think through the above comment. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
ignore:true/replace:true options for /db/-/create API 1473411197 | |
1336099368 | https://github.com/simonw/datasette/issues/1927#issuecomment-1336099368 | https://api.github.com/repos/simonw/datasette/issues/1927 | IC_kwDOBm6k_c5Po0Io | simonw 9599 | 2022-12-03T06:56:36Z | 2022-12-03T06:56:36Z | OWNER | Neither of these options make sense if you didn't pass a My initial implementation spotted if the So maybe this work should expanded to include validation that checks if the table exists already - and if it does, confirms that the primary key (and maybe even the columns) are the same as for that existing table. Of course if you only send |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
ignore:true/replace:true options for /db/-/create API 1473411197 | |
1336094562 | https://github.com/simonw/datasette/issues/1878#issuecomment-1336094562 | https://api.github.com/repos/simonw/datasette/issues/1878 | IC_kwDOBm6k_c5Poy9i | simonw 9599 | 2022-12-03T06:27:50Z | 2022-12-03T06:29:06Z | OWNER | This adds it to the API explorer:
(Made me notice that the way example columns are created for |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/table/-/upsert API 1432013704 | |
1336094470 | https://github.com/simonw/datasette/issues/1878#issuecomment-1336094470 | https://api.github.com/repos/simonw/datasette/issues/1878 | IC_kwDOBm6k_c5Poy8G | simonw 9599 | 2022-12-03T06:27:13Z | 2022-12-03T06:27:13Z | OWNER | Tests are going to need to cover both rowid-only and compound primary key tables, including all of the error states. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/table/-/upsert API 1432013704 | |
1336094381 | https://github.com/simonw/datasette/issues/1878#issuecomment-1336094381 | https://api.github.com/repos/simonw/datasette/issues/1878 | IC_kwDOBm6k_c5Poy6t | simonw 9599 | 2022-12-03T06:26:25Z | 2022-12-03T06:26:25Z | OWNER | Initial prototype: ```diff diff --git a/datasette/app.py b/datasette/app.py index 125b4969..282c0984 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -40,7 +40,7 @@ from .views.special import ( PermissionsDebugView, MessagesDebugView, ) -from .views.table import TableView, TableInsertView, TableDropView +from .views.table import TableView, TableInsertView, TableUpsertView, TableDropView from .views.row import RowView, RowDeleteView, RowUpdateView from .renderer import json_renderer from .url_builder import Urls @@ -1292,6 +1292,10 @@ class Datasette: TableInsertView.as_view(self), r"/(?P<database>[^\/.]+)/(?P<table>[^\/.]+)/-/insert$", ) + add_route( + TableUpsertView.as_view(self), + r"/(?P<database>[^\/.]+)/(?P<table>[^\/.]+)/-/upsert$", + ) add_route( TableDropView.as_view(self), r"/(?P<database>[^\/.]+)/(?P<table>[^\/.]+)/-/drop$", diff --git a/datasette/views/table.py b/datasette/views/table.py index 7ba78c11..ae0d6366 100644 --- a/datasette/views/table.py +++ b/datasette/views/table.py @@ -1074,9 +1074,15 @@ class TableInsertView(BaseView): def init(self, datasette): self.ds = datasette
@@ -1135,6 +1141,15 @@ class TableInsertView(BaseView): # Validate columns of each row columns = set(await db.table_columns(table_name)) for i, row in enumerate(rows): + if upsert: + # It MUST have the primary key + missing_pks = [pk for pk in pks_list if pk not in row] + if missing_pks: + errors.append( + 'Row {} is missing primary key column(s): "{}"'.format( + i, '", "'.join(missing_pks) + ) + ) invalid_columns = set(row.keys()) - columns if invalid_columns: errors.append( @@ -1146,7 +1161,7 @@ class TableInsertView(BaseView): return _errors(errors) return rows, errors, extras
@@ -1172,15 +1192,19 @@ class TableInsertView(BaseView): replace = extras.get("replace")
+class TableUpsertView(TableInsertView):
+ name = "table-upsert"
+
+ async def post(self, request):
+ return await super().post(request, upsert=True)
+
+
class TableDropView(BaseView):
name = "table-drop"
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/table/-/upsert API 1432013704 | |
1336073212 | https://github.com/simonw/datasette/issues/1878#issuecomment-1336073212 | https://api.github.com/repos/simonw/datasette/issues/1878 | IC_kwDOBm6k_c5Potv8 | simonw 9599 | 2022-12-03T05:38:49Z | 2022-12-03T05:38:49Z | OWNER | And on Discord today: https://discord.com/channels/823971286308356157/823971286941302908/1048426072066236536 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/table/-/upsert API 1432013704 | |
1336070843 | https://github.com/simonw/datasette/issues/1878#issuecomment-1336070843 | https://api.github.com/repos/simonw/datasette/issues/1878 | IC_kwDOBm6k_c5PotK7 | simonw 9599 | 2022-12-03T05:37:53Z | 2022-12-03T05:37:53Z | OWNER | Also requested here: https://news.ycombinator.com/item?id=33839894 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/table/-/upsert API 1432013704 | |
1335984268 | https://github.com/simonw/datasette/issues/1927#issuecomment-1335984268 | https://api.github.com/repos/simonw/datasette/issues/1927 | IC_kwDOBm6k_c5PoYCM | simonw 9599 | 2022-12-03T00:26:26Z | 2022-12-03T00:26:26Z | OWNER | Also: the documentation should clarify that you can call this API multiple times when using the (It will probably grow |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
ignore:true/replace:true options for /db/-/create API 1473411197 | |
1335966329 | https://github.com/simonw/datasette/issues/1928#issuecomment-1335966329 | https://api.github.com/repos/simonw/datasette/issues/1928 | IC_kwDOBm6k_c5PoTp5 | simonw 9599 | 2022-12-02T23:47:11Z | 2022-12-02T23:47:11Z | OWNER | Wrote about this extensively here: https://simonwillison.net/2022/Dec/2/datasette-write-api/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Hacker News Datasette write demo 1473481262 | |
1335870889 | https://github.com/simonw/datasette/issues/1928#issuecomment-1335870889 | https://api.github.com/repos/simonw/datasette/issues/1928 | IC_kwDOBm6k_c5Pn8Wp | simonw 9599 | 2022-12-02T21:41:09Z | 2022-12-02T21:41:09Z | OWNER | Got it working! https://simon.datasette.cloud/data/hacker_news_posts https://github.com/simonw/scrape-hacker-news-by-domain/blob/main/submit-to-datasette-cloud.sh |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Hacker News Datasette write demo 1473481262 | |
1335870887 | https://github.com/simonw/datasette/issues/1928#issuecomment-1335870887 | https://api.github.com/repos/simonw/datasette/issues/1928 | IC_kwDOBm6k_c5Pn8Wn | simonw 9599 | 2022-12-02T21:25:16Z | 2022-12-02T21:25:16Z | OWNER | Here's the change that should submit data to Datasette Cloud: https://github.com/simonw/scrape-hacker-news-by-domain/commit/848bb7e835a9fb87cd656362591835179cd1dc1b I ran |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Hacker News Datasette write demo 1473481262 | |
1335870884 | https://github.com/simonw/datasette/issues/1928#issuecomment-1335870884 | https://api.github.com/repos/simonw/datasette/issues/1928 | IC_kwDOBm6k_c5Pn8Wk | simonw 9599 | 2022-12-02T21:19:58Z | 2022-12-02T21:19:58Z | OWNER | But until I fix this issue: - https://github.com/simonw/datasette/issues/1927 I need to insert freshly scraped data like this: ```bash export ROWS=$( jq -n --argjson rows "$(cat simonwillison-net.json)" \ '{ "rows": $rows, "replace": true }' ) curl -X POST \ https://simon.datasette.cloud/data/hacker_news_posts/-/insert \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $DS_TOKEN" \ -d $ROWS ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Hacker News Datasette write demo 1473481262 | |
1335870883 | https://github.com/simonw/datasette/issues/1928#issuecomment-1335870883 | https://api.github.com/repos/simonw/datasette/issues/1928 | IC_kwDOBm6k_c5Pn8Wj | simonw 9599 | 2022-12-02T21:19:10Z | 2022-12-02T21:19:10Z | OWNER | I created the ```bash export ROWS=$( jq -n --argjson rows "$(cat simonwillison-net.json)" \ '{ "table": "hacker_news_posts", "rows": $rows, "pk": "id", "replace": true }' ) Use curl to POST some JSON to a URLcurl -X POST \ https://simon.datasette.cloud/data/-/create \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $DS_TOKEN" \ -d $ROWS ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Hacker News Datasette write demo 1473481262 | |
1335870879 | https://github.com/simonw/datasette/issues/1928#issuecomment-1335870879 | https://api.github.com/repos/simonw/datasette/issues/1928 | IC_kwDOBm6k_c5Pn8Wf | simonw 9599 | 2022-12-02T21:18:25Z | 2022-12-02T21:18:25Z | OWNER | This is the SQL view for the atom feed:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Hacker News Datasette write demo 1473481262 | |
1335870877 | https://github.com/simonw/datasette/issues/1928#issuecomment-1335870877 | https://api.github.com/repos/simonw/datasette/issues/1928 | IC_kwDOBm6k_c5Pn8Wd | simonw 9599 | 2022-12-02T21:17:50Z | 2022-12-02T21:17:50Z | OWNER | https://simon.datasette.cloud/data/hacker_news_posts_atom.atom is working now. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Hacker News Datasette write demo 1473481262 | |
1334759315 | https://github.com/simonw/datasette/issues/1636#issuecomment-1334759315 | https://api.github.com/repos/simonw/datasette/issues/1636 | IC_kwDOBm6k_c5Pjs-T | simonw 9599 | 2022-12-02T04:46:32Z | 2022-12-02T04:46:32Z | OWNER | Thankfully all of the logic for this already lives in just one place: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"permissions" propery in metadata for configuring arbitrary permissions 1138008042 | |
1334758766 | https://github.com/simonw/datasette/issues/1636#issuecomment-1334758766 | https://api.github.com/repos/simonw/datasette/issues/1636 | IC_kwDOBm6k_c5Pjs1u | simonw 9599 | 2022-12-02T04:45:16Z | 2022-12-02T04:45:16Z | OWNER | Also, this is another thing which should live in |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"permissions" propery in metadata for configuring arbitrary permissions 1138008042 | |
1334757597 | https://github.com/simonw/datasette/issues/1636#issuecomment-1334757597 | https://api.github.com/repos/simonw/datasette/issues/1636 | IC_kwDOBm6k_c5Pjsjd | simonw 9599 | 2022-12-02T04:42:35Z | 2022-12-02T04:42:35Z | OWNER | Should I call this key Some options:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"permissions" propery in metadata for configuring arbitrary permissions 1138008042 | |
1334673179 | https://github.com/simonw/datasette/issues/1636#issuecomment-1334673179 | https://api.github.com/repos/simonw/datasette/issues/1636 | IC_kwDOBm6k_c5PjX8b | simonw 9599 | 2022-12-02T02:07:20Z | 2022-12-02T04:27:07Z | OWNER | So the new mechanism needs to extend that to handle all of the other permissions as well. The simplest design I can think of is this (here illustrated using YAML): ```yaml instance-level permissions - give every logged in user the debug menu:permissions: debug-menu: id: * databases: content: # Allow bob to create-table in the content database permissions: create-table: id: bob ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"permissions" propery in metadata for configuring arbitrary permissions 1138008042 | |
1334666806 | https://github.com/simonw/datasette/issues/1636#issuecomment-1334666806 | https://api.github.com/repos/simonw/datasette/issues/1636 | IC_kwDOBm6k_c5PjWY2 | simonw 9599 | 2022-12-02T01:58:40Z | 2022-12-02T02:00:53Z | OWNER | Current design:
https://docs.datasette.io/en/stable/authentication.html#controlling-access-to-specific-databases It's actually controlling the following permissions:
There's also a special case for allowing SQL queries,at the instance and database level:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"permissions" propery in metadata for configuring arbitrary permissions 1138008042 | |
1334508062 | https://github.com/simonw/datasette/issues/1926#issuecomment-1334508062 | https://api.github.com/repos/simonw/datasette/issues/1926 | IC_kwDOBm6k_c5Pivoe | simonw 9599 | 2022-12-01T22:06:12Z | 2022-12-01T22:06:12Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release notes for 1.0a1 (and release it) 1471969984 | ||
1334165225 | https://github.com/simonw/datasette/issues/1924#issuecomment-1334165225 | https://api.github.com/repos/simonw/datasette/issues/1924 | IC_kwDOBm6k_c5Phb7p | simonw 9599 | 2022-12-01T18:15:15Z | 2022-12-01T18:15:15Z | OWNER | Updated docs at the bottom of this section: https://docs.datasette.io/en/latest/json_api.html#inserting-rows |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Docs for replace:true and ignore:true options for insert API 1470509936 | |
1333042785 | https://github.com/simonw/datasette/issues/1924#issuecomment-1333042785 | https://api.github.com/repos/simonw/datasette/issues/1924 | IC_kwDOBm6k_c5PdJ5h | simonw 9599 | 2022-12-01T02:00:06Z | 2022-12-01T02:00:06Z | OWNER | Looks like I did implement these already: But forgot to document them! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Docs for replace:true and ignore:true options for insert API 1470509936 | |
1333025076 | https://github.com/simonw/datasette/issues/1924#issuecomment-1333025076 | https://api.github.com/repos/simonw/datasette/issues/1924 | IC_kwDOBm6k_c5PdFk0 | simonw 9599 | 2022-12-01T01:37:09Z | 2022-12-01T01:37:09Z | OWNER | Related question: what happens if you attempt to insert rows without either of these settings and 1:10 of them is an integrity error due to an existing primary key? Does the entire batch fail to be inserted? Should it? This may be the point that I need to think hard about how to use transactions here. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Docs for replace:true and ignore:true options for insert API 1470509936 | |
1333023273 | https://github.com/simonw/datasette/issues/1924#issuecomment-1333023273 | https://api.github.com/repos/simonw/datasette/issues/1924 | IC_kwDOBm6k_c5PdFIp | simonw 9599 | 2022-12-01T01:34:48Z | 2022-12-01T01:34:48Z | OWNER | This will enable some very cool Datasette write API demos - for example, Git scrapers that insert-replace the most recent copy of the scraped data to a table somewhere (which can then produce an atom feed with https://datasette.io/plugins/datasette-atom) |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Docs for replace:true and ignore:true options for insert API 1470509936 | |
1332903011 | https://github.com/simonw/datasette/issues/1922#issuecomment-1332903011 | https://api.github.com/repos/simonw/datasette/issues/1922 | IC_kwDOBm6k_c5Pcnxj | simonw 9599 | 2022-11-30T23:45:29Z | 2022-11-30T23:45:29Z | OWNER | That worked for the preflight request - got this now: So it looks like error responses (in this case for permission denied) are missing CORS headers. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make sure CORS works for write APIs 1469973742 | |
1332855687 | https://github.com/simonw/datasette/issues/1922#issuecomment-1332855687 | https://api.github.com/repos/simonw/datasette/issues/1922 | IC_kwDOBm6k_c5PccOH | simonw 9599 | 2022-11-30T23:09:31Z | 2022-11-30T23:09:31Z | OWNER | Still getting a CORS header. I tried it in Chrome, which outputs helpful messages to the console: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make sure CORS works for write APIs 1469973742 | |
1332851215 | https://github.com/simonw/datasette/issues/1923#issuecomment-1332851215 | https://api.github.com/repos/simonw/datasette/issues/1923 | IC_kwDOBm6k_c5PcbIP | simonw 9599 | 2022-11-30T23:04:56Z | 2022-11-30T23:04:56Z | OWNER | That fixed it. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
latest.datasette.io Cloud Run deploys failing 1470320227 | |
1332842435 | https://github.com/simonw/datasette/issues/1923#issuecomment-1332842435 | https://api.github.com/repos/simonw/datasette/issues/1923 | IC_kwDOBm6k_c5PcY_D | simonw 9599 | 2022-11-30T22:58:33Z | 2022-11-30T22:58:33Z | OWNER | https://stackoverflow.com/questions/74490465/github-actions-failing-for-setup-gcloud/74562740#74562740 suggests trying Python 3.9. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
latest.datasette.io Cloud Run deploys failing 1470320227 | |
1332835664 | https://github.com/simonw/datasette/issues/1923#issuecomment-1332835664 | https://api.github.com/repos/simonw/datasette/issues/1923 | IC_kwDOBm6k_c5PcXVQ | simonw 9599 | 2022-11-30T22:50:10Z | 2022-11-30T22:51:25Z | OWNER | https://stackoverflow.com/questions/74490465/github-actions-failing-for-setup-gcloud/74562526#74562526 suggests setting |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
latest.datasette.io Cloud Run deploys failing 1470320227 | |
1332698636 | https://github.com/simonw/datasette/issues/1922#issuecomment-1332698636 | https://api.github.com/repos/simonw/datasette/issues/1922 | IC_kwDOBm6k_c5Pb14M | simonw 9599 | 2022-11-30T20:25:50Z | 2022-11-30T20:25:50Z | OWNER | I just shipped this:
I'll try this out on |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make sure CORS works for write APIs 1469973742 | |
1332689547 | https://github.com/simonw/datasette/issues/1922#issuecomment-1332689547 | https://api.github.com/repos/simonw/datasette/issues/1922 | IC_kwDOBm6k_c5PbzqL | simonw 9599 | 2022-11-30T20:16:21Z | 2022-11-30T20:16:46Z | OWNER | That notebook:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make sure CORS works for write APIs 1469973742 | |
1332688245 | https://github.com/simonw/datasette/issues/1922#issuecomment-1332688245 | https://api.github.com/repos/simonw/datasette/issues/1922 | IC_kwDOBm6k_c5PbzV1 | simonw 9599 | 2022-11-30T20:15:08Z | 2022-11-30T20:15:08Z | OWNER | Still getting a CORS error: My hunch is this is because I'm not sending |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make sure CORS works for write APIs 1469973742 | |
1332585861 | https://github.com/simonw/datasette/issues/1922#issuecomment-1332585861 | https://api.github.com/repos/simonw/datasette/issues/1922 | IC_kwDOBm6k_c5PbaWF | simonw 9599 | 2022-11-30T18:43:46Z | 2022-11-30T18:43:46Z | OWNER | Here's what Django Rest Framework does: https://github.com/encode/django-rest-framework/blob/1ae812ea209392ad76cc5d2f35f9f7fb337f63e4/rest_framework/views.py#L514-L521
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make sure CORS works for write APIs 1469973742 | |
1332580395 | https://github.com/simonw/datasette/issues/1922#issuecomment-1332580395 | https://api.github.com/repos/simonw/datasette/issues/1922 | IC_kwDOBm6k_c5PbZAr | simonw 9599 | 2022-11-30T18:38:22Z | 2022-11-30T18:38:22Z | OWNER |
https://mastodon.social/@daniellindsley/109434186252099323 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make sure CORS works for write APIs 1469973742 | |
1332572453 | https://github.com/simonw/datasette/issues/1922#issuecomment-1332572453 | https://api.github.com/repos/simonw/datasette/issues/1922 | IC_kwDOBm6k_c5PbXEl | simonw 9599 | 2022-11-30T18:30:38Z | 2022-11-30T18:30:54Z | OWNER | Started a conversation about how OPTIONS should work on Mastodon: https://fedi.simonwillison.net/@simon/109434148676475291 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make sure CORS works for write APIs 1469973742 | |
1332561813 | https://github.com/simonw/datasette/issues/1922#issuecomment-1332561813 | https://api.github.com/repos/simonw/datasette/issues/1922 | IC_kwDOBm6k_c5PbUeV | simonw 9599 | 2022-11-30T18:20:05Z | 2022-11-30T18:20:05Z | OWNER | Weird, GitHub reply with a 404!
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make sure CORS works for write APIs 1469973742 | |
1332561059 | https://github.com/simonw/datasette/issues/1922#issuecomment-1332561059 | https://api.github.com/repos/simonw/datasette/issues/1922 | IC_kwDOBm6k_c5PbUSj | simonw 9599 | 2022-11-30T18:19:20Z | 2022-11-30T18:19:20Z | OWNER | Two test failures: ``` ____ test_homepage_options _____ [gw0] linux -- Python 3.11.0 /opt/hostedtoolcache/Python/3.11.0/x64/bin/python app_client = <datasette.utils.testing.TestClient object at 0x7f4c489269d0>
/home/runner/work/datasette/datasette/tests/test_html.py:58: AssertionError ___ test_client_methods[options-/-405] ___ [gw1] linux -- Python 3.11.0 /opt/hostedtoolcache/Python/3.11.0/x64/bin/python datasette = <datasette.app.Datasette object at 0x7fc33c227550> method = 'options', path = '/', expected_status = 405
/home/runner/work/datasette/datasette/tests/test_internals_datasette_client.py:29: AssertionError =============================== warnings summary =============================== tests/test_cli.py::test_inspect_cli_writes_to_file tests/test_cli.py::test_inspect_cli /home/runner/work/datasette/datasette/datasette/cli.py:163: DeprecationWarning: There is no current event loop loop = asyncio.get_event_loop() tests/test_cli_serve_get.py: 2 warnings tests/test_cli.py: 12 warnings tests/test_crossdb.py: 1 warning /home/runner/work/datasette/datasette/datasette/cli.py:591: DeprecationWarning: There is no current event loop asyncio.get_event_loop().run_until_complete(ds.invoke_startup()) tests/test_cli_serve_get.py: 2 warnings tests/test_cli.py: 12 warnings tests/test_crossdb.py: 1 warning /home/runner/work/datasette/datasette/datasette/cli.py:594: DeprecationWarning: There is no current event loop asyncio.get_event_loop().run_until_complete(check_databases(ds)) -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/test_html.py::test_homepage_options - assert 200 == 405
+ where 200 = <datasette.utils.testing.TestResponse object at 0x7f4c4892f4d0>.status
FAILED tests/test_internals_datasette_client.py::test_client_methods[options-/-405] - assert 200 == 405
+ where 200 = <Response [200 OK]>.status_code
====== 2 failed, 1195 passed, 1 skipped, 32 warnings in 191.06s (0:03:11) ======
Error: Process completed with exit code 1.
Comparing a few different sites: ``` ~ % curl -X OPTIONS https://www.google.com/ -i HTTP/2 405 allow: GET, HEAD date: Wed, 30 Nov 2022 18:18:15 GMT content-type: text/html; charset=UTF-8 server: gws content-length: 1592 x-xss-protection: 0 x-frame-options: SAMEORIGIN alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43" <html lang=en> <meta charset=utf-8> <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width"> <title>Error 405 (Method Not Allowed)!!1</title> <style> *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px} </style>405. <ins>That’s an error.</ins> The request method |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make sure CORS works for write APIs 1469973742 | |
1332504654 | https://github.com/simonw/datasette/issues/1922#issuecomment-1332504654 | https://api.github.com/repos/simonw/datasette/issues/1922 | IC_kwDOBm6k_c5PbGhO | simonw 9599 | 2022-11-30T17:27:39Z | 2022-11-30T17:27:39Z | OWNER | I'll test this once it's deployed to https://latest.datasette.io/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make sure CORS works for write APIs 1469973742 | |
1332493004 | https://github.com/simonw/datasette/issues/1922#issuecomment-1332493004 | https://api.github.com/repos/simonw/datasette/issues/1922 | IC_kwDOBm6k_c5PbDrM | simonw 9599 | 2022-11-30T17:18:10Z | 2022-11-30T17:18:10Z | OWNER | Here's why: That's code in |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make sure CORS works for write APIs 1469973742 | |
1332492092 | https://github.com/simonw/datasette/issues/1922#issuecomment-1332492092 | https://api.github.com/repos/simonw/datasette/issues/1922 | IC_kwDOBm6k_c5PbDc8 | simonw 9599 | 2022-11-30T17:17:21Z | 2022-11-30T17:17:21Z | OWNER | I tried running |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make sure CORS works for write APIs 1469973742 | |
1331694246 | https://github.com/simonw/datasette/issues/1605#issuecomment-1331694246 | https://api.github.com/repos/simonw/datasette/issues/1605 | IC_kwDOBm6k_c5PYAqm | simonw 9599 | 2022-11-30T06:18:41Z | 2022-11-30T06:18:41Z | OWNER | Those sounds to me like they should be promoted to documented, supported internals. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Scripted exports 1108671952 | |
1331658629 | https://github.com/simonw/datasette/issues/1918#issuecomment-1331658629 | https://api.github.com/repos/simonw/datasette/issues/1918 | IC_kwDOBm6k_c5PX3-F | simonw 9599 | 2022-11-30T05:21:51Z | 2022-11-30T05:21:51Z | OWNER | Much better: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
API explorer should list mutable databases first 1469044738 | |
1331657404 | https://github.com/simonw/datasette/issues/1919#issuecomment-1331657404 | https://api.github.com/repos/simonw/datasette/issues/1919 | IC_kwDOBm6k_c5PX3q8 | simonw 9599 | 2022-11-30T05:19:43Z | 2022-11-30T05:19:43Z | OWNER | This is the test: https://github.com/simonw/datasette/blob/8404b21556d133c89eda4bd1bf5335ed9a0785d6/tests/test_api_write.py#L342-L401 I'm suspicious that there's a timing error of some sort but I can't think what it might be. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Intermittent `test_delete_row` test failure 1469062686 | |
1331651721 | https://github.com/simonw/datasette/issues/1916#issuecomment-1331651721 | https://api.github.com/repos/simonw/datasette/issues/1916 | IC_kwDOBm6k_c5PX2SJ | simonw 9599 | 2022-11-30T05:10:27Z | 2022-11-30T05:10:27Z | OWNER | They should return 405 method not allowed with an |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
GET requests against POST endpoints should not 500 error 1469015001 | |
1331644751 | https://github.com/simonw/datasette/issues/1917#issuecomment-1331644751 | https://api.github.com/repos/simonw/datasette/issues/1917 | IC_kwDOBm6k_c5PX0lP | simonw 9599 | 2022-11-30T04:59:22Z | 2022-11-30T04:59:22Z | OWNER | Yeah it looks like I introduced this bug here: https://github.com/simonw/datasette/commit/fb7e70d5e72a951efe4b29ad999d8915c032d021 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Don't allow writable API to edit the `_memory` database 1469043836 | |
1331644078 | https://github.com/simonw/datasette/issues/1917#issuecomment-1331644078 | https://api.github.com/repos/simonw/datasette/issues/1917 | IC_kwDOBm6k_c5PX0au | simonw 9599 | 2022-11-30T04:58:06Z | 2022-11-30T04:58:06Z | OWNER | The problem might actually be here:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Don't allow writable API to edit the `_memory` database 1469043836 | |
1331479606 | https://github.com/simonw/datasette/issues/1915#issuecomment-1331479606 | https://api.github.com/repos/simonw/datasette/issues/1915 | IC_kwDOBm6k_c5PXMQ2 | simonw 9599 | 2022-11-30T00:09:06Z | 2022-11-30T00:09:06Z | OWNER | One last feature: I want to show an indication on the table page that the table has X seconds left to live. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Interactive demo of Datasette 1.0 write APIs 1468709531 | |
1331479328 | https://github.com/simonw/datasette/issues/1915#issuecomment-1331479328 | https://api.github.com/repos/simonw/datasette/issues/1915 | IC_kwDOBm6k_c5PXMMg | simonw 9599 | 2022-11-30T00:08:41Z | 2022-11-30T00:08:41Z | OWNER | Five minute has now passed and https://latest.datasette.io/ephemeral/new_table is gone. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Interactive demo of Datasette 1.0 write APIs 1468709531 | |
1331476246 | https://github.com/simonw/datasette/issues/1915#issuecomment-1331476246 | https://api.github.com/repos/simonw/datasette/issues/1915 | IC_kwDOBm6k_c5PXLcW | simonw 9599 | 2022-11-30T00:04:35Z | 2022-11-30T00:08:24Z | OWNER | The new https://github.com/simonw/datasette-ephemeral-tables plugin is live now: https://latest.datasette.io/ephemeral - you have to navigate through https://latest.datasette.io/login-as-root first The table should vanish in a few minutes. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Interactive demo of Datasette 1.0 write APIs 1468709531 | |
1331478611 | https://github.com/simonw/datasette/issues/1915#issuecomment-1331478611 | https://api.github.com/repos/simonw/datasette/issues/1915 | IC_kwDOBm6k_c5PXMBT | simonw 9599 | 2022-11-30T00:07:37Z | 2022-11-30T00:07:37Z | OWNER | Then I created an API token at https://latest.datasette.io/-/create-token and ran this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Interactive demo of Datasette 1.0 write APIs 1468709531 | |
1331432223 | https://github.com/simonw/datasette/issues/1915#issuecomment-1331432223 | https://api.github.com/repos/simonw/datasette/issues/1915 | IC_kwDOBm6k_c5PXAsf | simonw 9599 | 2022-11-29T23:06:17Z | 2022-11-29T23:06:17Z | OWNER | To (slightly) discourage abuse I'm going to make the demo database only visible to the root user - so people can't create tables with rude names and have them show to the public on https://latest.datasette.io/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Interactive demo of Datasette 1.0 write APIs 1468709531 | |
1331331082 | https://github.com/simonw/datasette/issues/1915#issuecomment-1331331082 | https://api.github.com/repos/simonw/datasette/issues/1915 | IC_kwDOBm6k_c5PWoAK | simonw 9599 | 2022-11-29T21:24:59Z | 2022-11-29T21:34:53Z | OWNER | Maybe a plugin called |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Interactive demo of Datasette 1.0 write APIs 1468709531 | |
1331238841 | https://github.com/simonw/datasette/issues/1850#issuecomment-1331238841 | https://api.github.com/repos/simonw/datasette/issues/1850 | IC_kwDOBm6k_c5PWRe5 | simonw 9599 | 2022-11-29T20:11:20Z | 2022-11-29T20:11:20Z | OWNER | Released this in Datasette 1.0a0: - #1913 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Write API in Datasette core 1421529723 | |
1331238029 | https://github.com/simonw/datasette/issues/1913#issuecomment-1331238029 | https://api.github.com/repos/simonw/datasette/issues/1913 | IC_kwDOBm6k_c5PWRSN | simonw 9599 | 2022-11-29T20:10:35Z | 2022-11-29T20:10:35Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release Datasette 1.0a0 1468603401 | ||
1331226346 | https://github.com/simonw/datasette/issues/1913#issuecomment-1331226346 | https://api.github.com/repos/simonw/datasette/issues/1913 | IC_kwDOBm6k_c5PWObq | simonw 9599 | 2022-11-29T20:00:16Z | 2022-11-29T20:00:36Z | OWNER | Looks like a fix is coming: https://github.com/pypa/twine/issues/940#issuecomment-1331225509
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release Datasette 1.0a0 1468603401 | |
1331225277 | https://github.com/simonw/datasette/issues/1913#issuecomment-1331225277 | https://api.github.com/repos/simonw/datasette/issues/1913 | IC_kwDOBm6k_c5PWOK9 | simonw 9599 | 2022-11-29T19:59:14Z | 2022-11-29T19:59:34Z | OWNER | I deleted the tag and tried creating a new release. Now running here: https://github.com/simonw/datasette/actions/runs/3577554546 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release Datasette 1.0a0 1468603401 | |
1331216652 | https://github.com/simonw/datasette/issues/1913#issuecomment-1331216652 | https://api.github.com/repos/simonw/datasette/issues/1913 | IC_kwDOBm6k_c5PWMEM | simonw 9599 | 2022-11-29T19:54:22Z | 2022-11-29T19:54:22Z | OWNER | Filed a bug report here: https://bugs.launchpad.net/pkginfo/+bug/1998249 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release Datasette 1.0a0 1468603401 | |
1331208206 | https://github.com/simonw/datasette/issues/1913#issuecomment-1331208206 | https://api.github.com/repos/simonw/datasette/issues/1913 | IC_kwDOBm6k_c5PWKAO | simonw 9599 | 2022-11-29T19:51:31Z | 2022-11-29T19:51:31Z | OWNER | https://pypi.org/project/pkginfo/#history - 1.9.0 came out 39 minutes ago! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release Datasette 1.0a0 1468603401 | |
1331207334 | https://github.com/simonw/datasette/issues/1913#issuecomment-1331207334 | https://api.github.com/repos/simonw/datasette/issues/1913 | IC_kwDOBm6k_c5PWJym | simonw 9599 | 2022-11-29T19:50:37Z | 2022-11-29T19:50:37Z | OWNER | https://pypi.org/project/setuptools/65.6.3/ came out most recently - 23rd November (wheel and twine are older). No search results at all for that error message. This is very weird, I would have expected it to have been reported by now. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release Datasette 1.0a0 1468603401 | |
1331205613 | https://github.com/simonw/datasette/issues/1913#issuecomment-1331205613 | https://api.github.com/repos/simonw/datasette/issues/1913 | IC_kwDOBm6k_c5PWJXt | simonw 9599 | 2022-11-29T19:48:52Z | 2022-11-29T19:48:52Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release Datasette 1.0a0 1468603401 | ||
1331204360 | https://github.com/simonw/datasette/issues/1913#issuecomment-1331204360 | https://api.github.com/repos/simonw/datasette/issues/1913 | IC_kwDOBm6k_c5PWJEI | simonw 9599 | 2022-11-29T19:47:40Z | 2022-11-29T19:47:40Z | OWNER | ... but the last step of the deploy failed, when it was meant to push to PyPI!
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release Datasette 1.0a0 1468603401 | |
1331203997 | https://github.com/simonw/datasette/issues/1913#issuecomment-1331203997 | https://api.github.com/repos/simonw/datasette/issues/1913 | IC_kwDOBm6k_c5PWI-d | simonw 9599 | 2022-11-29T19:47:13Z | 2022-11-29T19:47:13Z | OWNER | Weird, retrying the tests DID get them to pass. https://github.com/simonw/datasette/actions/runs/3577355358/jobs/6016518244 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release Datasette 1.0a0 1468603401 | |
1331201207 | https://github.com/simonw/datasette/issues/1877#issuecomment-1331201207 | https://api.github.com/repos/simonw/datasette/issues/1877 | IC_kwDOBm6k_c5PWIS3 | simonw 9599 | 2022-11-29T19:44:07Z | 2022-11-29T19:44:07Z | OWNER | I fixed the duplicate logic issue here: https://github.com/simonw/datasette/commit/ee64130fa8a5ff4a24791916c696e10cf2375102
Decided not to address |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Refactor and tidy up final write API code 1432012302 | |
1331196531 | https://github.com/simonw/datasette/pull/1912#issuecomment-1331196531 | https://api.github.com/repos/simonw/datasette/issues/1912 | IC_kwDOBm6k_c5PWHJz | simonw 9599 | 2022-11-29T19:39:10Z | 2022-11-29T19:39:10Z | OWNER | Annoyingly it looks like I can't rebase this one, and I don't want to squash-merge and lose the commits, so I'm going to do a regular merge instead. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Merge 1.0-dev (with initial write API) back into main 1468592292 | |
1331181922 | https://github.com/simonw/datasette/issues/1891#issuecomment-1331181922 | https://api.github.com/repos/simonw/datasette/issues/1891 | IC_kwDOBm6k_c5PWDli | simonw 9599 | 2022-11-29T19:23:41Z | 2022-11-29T19:23:41Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1.0a0 release notes 1450303205 | ||
1331143292 | https://github.com/simonw/datasette/issues/1891#issuecomment-1331143292 | https://api.github.com/repos/simonw/datasette/issues/1891 | IC_kwDOBm6k_c5PV6J8 | simonw 9599 | 2022-11-29T18:57:40Z | 2022-11-29T18:57:40Z | OWNER | I'm going to keep these short - they'll mostly be links to the documentation for the new features. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1.0a0 release notes 1450303205 | |
1331140747 | https://github.com/simonw/datasette/issues/1891#issuecomment-1331140747 | https://api.github.com/repos/simonw/datasette/issues/1891 | IC_kwDOBm6k_c5PV5iL | simonw 9599 | 2022-11-29T18:55:42Z | 2022-11-29T18:55:42Z | OWNER | All features for the alpha are complete now. Release notes should be based on these commits: https://github.com/simonw/datasette/compare/0.63.2...6bda2257868a2cbd70b84b7a86a5bcb47dcc4874 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1.0a0 release notes 1450303205 |
Advanced export
JSON shape: default, array, newline-delimited, object
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]);
issue >30