issue_comments
10,495 rows sorted by updated_at descending
This data as json, CSV (advanced)
issue >30
- Show column metadata plus links for foreign keys on arbitrary query results 51
- Redesign default .json format 48
- Rethink how .ext formats (v.s. ?_format=) works before 1.0 48
- Upgrade to CodeMirror 6, add SQL autocomplete 48
- JavaScript plugin hooks mechanism similar to pluggy 47
- Updated Dockerfile with SpatiaLite version 5.0 45
- Complete refactor of TableView and table.html template 45
- Port Datasette to ASGI 42
- Authentication (and permissions) as a core concept 40
- Deploy a live instance of demos/apache-proxy 34
- await datasette.client.get(path) mechanism for executing internal requests 33
- Maintain an in-memory SQLite table of connected databases and their tables 32
- Research: demonstrate if parallel SQL queries are worthwhile 32
- Ability to sort (and paginate) by column 31
- Default API token authentication mechanism 30
- link_or_copy_directory() error - Invalid cross-device link 28
- Export to CSV 27
- base_url configuration setting 27
- Documentation with recommendations on running Datasette in production without using Docker 27
- Optimize all those calls to index_list and foreign_key_list 27
- Support cross-database joins 26
- Ability for a canned query to write to the database 26
- table.transform() method for advanced alter table 26
- New pattern for views that return either JSON or HTML, available for plugins 26
- Proof of concept for Datasette on AWS Lambda with EFS 25
- WIP: Add Gmail takeout mbox import 25
- Redesign register_output_renderer callback 24
- Make it easier to insert geometries, with documentation and maybe code 24
- API explorer tool 24
- Stream all results for arbitrary SQL and canned queries 23
- …
reactions 18 ✖
- {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 8,851
- {"total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 180
- {"total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 1, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 35
- {"total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 1, "rocket": 0, "eyes": 0} 32
- {"total_count": 2, "+1": 2, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 20
- {"total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 1, "eyes": 0} 13
- {"total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 1} 7
- {"total_count": 1, "+1": 0, "-1": 0, "laugh": 1, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 6
- {"total_count": 3, "+1": 3, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 6
- {"total_count": 2, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 2, "rocket": 0, "eyes": 0} 3
- {"total_count": 2, "+1": 1, "-1": 0, "laugh": 0, "hooray": 1, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 3
- {"total_count": 2, "+1": 0, "-1": 0, "laugh": 0, "hooray": 2, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 2
- {"total_count": 3, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 3, "rocket": 0, "eyes": 0} 2
- {"total_count": 15, "+1": 7, "-1": 0, "laugh": 1, "hooray": 1, "confused": 0, "heart": 5, "rocket": 1, "eyes": 0} 1
- {"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
- {"total_count": 5, "+1": 5, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} 1
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 | |
1343449918 | https://github.com/simonw/datasette/pull/1938#issuecomment-1343449918 | https://api.github.com/repos/simonw/datasette/issues/1938 | IC_kwDOBm6k_c5QE2s- | codecov[bot] 22429695 | 2022-12-08T22:20:10Z | 2022-12-08T22:54:08Z | NONE | Codecov ReportBase: 92.00% // Head: 92.01% // Increases project coverage by
Additional details and impacted files```diff @@ Coverage Diff @@ ## main #1938 +/- ## ========================================== + Coverage 92.00% 92.01% +0.01% ========================================== Files 38 38 Lines 5378 5386 +8 ========================================== + Hits 4948 4956 +8 Misses 430 430 ``` | [Impacted Files](https://codecov.io/gh/simonw/datasette/pull/1938?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) | Coverage Δ | | |---|---|---| | [datasette/default\_permissions.py](https://codecov.io/gh/simonw/datasette/pull/1938/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison#diff-ZGF0YXNldHRlL2RlZmF1bHRfcGVybWlzc2lvbnMucHk=) | `95.10% <100.00%> (+0.29%)` | :arrow_up: | Help us with your feedback. Take ten seconds to tell us [how you rate us](https://about.codecov.io/nps?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison). Have a feature suggestion? [Share it here.](https://app.codecov.io/gh/feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison):umbrella: View full report at Codecov. |
{ "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 | |
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 | |
1339906241 | https://github.com/simonw/datasette/pull/1931#issuecomment-1339906241 | https://api.github.com/repos/simonw/datasette/issues/1931 | IC_kwDOBm6k_c5P3VjB | codecov[bot] 22429695 | 2022-12-06T19:33:32Z | 2022-12-08T01:04:56Z | NONE | Codecov ReportBase: 90.42% // Head: 91.77% // Increases project coverage by
Additional details and impacted files```diff @@ Coverage Diff @@ ## main #1931 +/- ## ========================================== + Coverage 90.42% 91.77% +1.34% ========================================== Files 36 36 Lines 5057 5019 -38 ========================================== + Hits 4573 4606 +33 + Misses 484 413 -71 ``` | [Impacted Files](https://codecov.io/gh/simonw/datasette/pull/1931?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) | Coverage Δ | | |---|---|---| | [datasette/views/special.py](https://codecov.io/gh/simonw/datasette/pull/1931/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison#diff-ZGF0YXNldHRlL3ZpZXdzL3NwZWNpYWwucHk=) | `79.41% <0.00%> (ø)` | | | [datasette/views/table.py](https://codecov.io/gh/simonw/datasette/pull/1931/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison#diff-ZGF0YXNldHRlL3ZpZXdzL3RhYmxlLnB5) | `92.44% <97.43%> (+0.20%)` | :arrow_up: | | [datasette/app.py](https://codecov.io/gh/simonw/datasette/pull/1931/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison#diff-ZGF0YXNldHRlL2FwcC5weQ==) | `94.42% <100.00%> (+<0.01%)` | :arrow_up: | | [datasette/default\_permissions.py](https://codecov.io/gh/simonw/datasette/pull/1931/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison#diff-ZGF0YXNldHRlL2RlZmF1bHRfcGVybWlzc2lvbnMucHk=) | `94.81% <100.00%> (+0.07%)` | :arrow_up: | | [datasette/views/database.py](https://codecov.io/gh/simonw/datasette/pull/1931/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison#diff-ZGF0YXNldHRlL3ZpZXdzL2RhdGFiYXNlLnB5) | `95.83% <0.00%> (+17.01%)` | :arrow_up: | Help us with your feedback. Take ten seconds to tell us [how you rate us](https://about.codecov.io/nps?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison). Have a feature suggestion? [Share it here.](https://app.codecov.io/gh/feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison):umbrella: View full report at Codecov. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/table/-/upsert 1473814539 | |
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 | |
1340950566 | https://github.com/simonw/datasette/pull/1935#issuecomment-1340950566 | https://api.github.com/repos/simonw/datasette/issues/1935 | IC_kwDOBm6k_c5P7Ugm | codecov[bot] 22429695 | 2022-12-07T13:14:41Z | 2022-12-07T13:14:41Z | NONE | Codecov ReportBase: 91.73% // Head: 91.49% // Decreases project coverage by
Additional details and impacted files```diff @@ Coverage Diff @@ ## main #1935 +/- ## ========================================== - Coverage 91.73% 91.49% -0.25% ========================================== Files 36 37 +1 Lines 4987 5031 +44 ========================================== + Hits 4575 4603 +28 - Misses 412 428 +16 ``` | [Impacted Files](https://codecov.io/gh/simonw/datasette/pull/1935?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) | Coverage Δ | | |---|---|---| | [datasette/utils/shutil\_backport.py](https://codecov.io/gh/simonw/datasette/pull/1935/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison#diff-ZGF0YXNldHRlL3V0aWxzL3NodXRpbF9iYWNrcG9ydC5weQ==) | `9.09% <0.00%> (ø)` | | | [datasette/app.py](https://codecov.io/gh/simonw/datasette/pull/1935/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison#diff-ZGF0YXNldHRlL2FwcC5weQ==) | `94.78% <0.00%> (+0.36%)` | :arrow_up: | | [datasette/plugins.py](https://codecov.io/gh/simonw/datasette/pull/1935/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison#diff-ZGF0YXNldHRlL3BsdWdpbnMucHk=) | `85.29% <0.00%> (+2.94%)` | :arrow_up: | | [datasette/utils/asgi.py](https://codecov.io/gh/simonw/datasette/pull/1935/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison#diff-ZGF0YXNldHRlL3V0aWxzL2FzZ2kucHk=) | `93.60% <0.00%> (+3.59%)` | :arrow_up: | | [datasette/cli.py](https://codecov.io/gh/simonw/datasette/pull/1935/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison#diff-ZGF0YXNldHRlL2NsaS5weQ==) | `82.18% <0.00%> (+4.00%)` | :arrow_up: | Help us with your feedback. Take ten seconds to tell us [how you rate us](https://about.codecov.io/nps?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison). Have a feature suggestion? [Share it here.](https://app.codecov.io/gh/feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison):umbrella: View full report at Codecov. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Bump furo from 2022.9.29 to 2022.12.7 1481875485 | |
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 | |
1339916064 | https://github.com/simonw/datasette/pull/1931#issuecomment-1339916064 | https://api.github.com/repos/simonw/datasette/issues/1931 | IC_kwDOBm6k_c5P3X8g | davidbgk 3556 | 2022-12-06T19:42:45Z | 2022-12-06T19:42:45Z | CONTRIBUTOR | The |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/db/table/-/upsert 1473814539 | |
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 | ||
1339906969 | https://github.com/simonw/datasette/issues/1929#issuecomment-1339906969 | https://api.github.com/repos/simonw/datasette/issues/1929 | IC_kwDOBm6k_c5P3VuZ | davidbgk 3556 | 2022-12-06T19:34:20Z | 2022-12-06T19:34:20Z | CONTRIBUTOR | I confirm that it works 👍 |
{ "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 | |
1339844639 | https://github.com/simonw/sqlite-utils/issues/516#issuecomment-1339844639 | https://api.github.com/repos/simonw/sqlite-utils/issues/516 | IC_kwDOCGYnMM5P3Ggf | briandorsey 122043 | 2022-12-06T19:08:13Z | 2022-12-06T19:08:13Z | NONE | Reference: tqdm (https://tqdm.github.io/) shows a progress bar when total is known, and falls back to counting units of work done for streams. File input vs. stdin seems like a similar situation. |
{ "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 | |
1339839767 | https://github.com/simonw/sqlite-utils/issues/516#issuecomment-1339839767 | https://api.github.com/repos/simonw/sqlite-utils/issues/516 | IC_kwDOCGYnMM5P3FUX | briandorsey 122043 | 2022-12-06T19:04:17Z | 2022-12-06T19:04:17Z | NONE | Current behavior is different when importing via stdin vs. a file. Imports from a file give a progress bar. For this new request, I'd love to see total imported and total ignored/replaced in both cases. |
{ "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 | |
1339837520 | https://github.com/simonw/sqlite-utils/issues/516#issuecomment-1339837520 | https://api.github.com/repos/simonw/sqlite-utils/issues/516 | IC_kwDOCGYnMM5P3ExQ | briandorsey 122043 | 2022-12-06T19:02:30Z | 2022-12-06T19:02:30Z | NONE |
|
{ "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 | |
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 | |
1336017976 | https://github.com/simonw/datasette/pull/1930#issuecomment-1336017976 | https://api.github.com/repos/simonw/datasette/issues/1930 | IC_kwDOBm6k_c5PogQ4 | codecov[bot] 22429695 | 2022-12-03T02:30:21Z | 2022-12-03T02:30:21Z | NONE | Codecov ReportBase: 90.42% // Head: 90.42% // No change to project coverage :thumbsup:
Additional details and impacted files```diff @@ Coverage Diff @@ ## main #1930 +/- ## ======================================= Coverage 90.42% 90.42% ======================================= Files 36 36 Lines 5057 5057 ======================================= Hits 4573 4573 Misses 484 484 ``` Help us with your feedback. Take ten seconds to tell us [how you rate us](https://about.codecov.io/nps?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison). Have a feature suggestion? [Share it here.](https://app.codecov.io/gh/feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison):umbrella: View full report at Codecov. |
{ "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 | |
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 | |
1332310772 | https://github.com/simonw/datasette/issues/1605#issuecomment-1332310772 | https://api.github.com/repos/simonw/datasette/issues/1605 | IC_kwDOBm6k_c5PaXL0 | eyeseast 25778 | 2022-11-30T15:06:37Z | 2022-11-30T15:06:37Z | CONTRIBUTOR | I'll add issues for both and do a documentation PR. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Scripted exports 1108671952 | |
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 |
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]);
user >30