issue_comments
10,495 rows sorted by updated_at descending
This data as json, CSV (advanced)
user 284
- simonw 6,893
- codecov[bot] 141
- eyeseast 52
- russss 39
- psychemedia 32
- fgregg 32
- abdusco 26
- mroswell 20
- aborruso 19
- chrismp 18
- jacobian 14
- carlmjohnson 14
- RhetTbull 14
- tballison 13
- wragge 12
- brandonrobertz 12
- tsibley 11
- rixx 11
- terrycojones 10
- stonebig 10
- rayvoelker 10
- maxhawkins 9
- clausjuhl 9
- bobwhitelock 9
- 20after4 8
- dracos 8
- UtahDave 8
- tomchristie 8
- bsilverm 8
- rgieseke 7
- mhalle 7
- zeluspudding 7
- cobiadigital 7
- dependabot[bot] 7
- frafra 6
- amjith 6
- simonwiles 6
- zaneselvans 6
- khusmann 5
- khimaros 5
- jaywgraves 5
- MarkusH 5
- dazzag24 5
- SteadBytes 5
- dependabot-preview[bot] 5
- jayvdb 4
- bollwyvl 4
- jefftriplett 4
- ctb 4
- Btibert3 4
- dholth 4
- lovasoa 4
- r4vi 4
- jsfenfen 4
- glasnt 4
- jungle-boogie 4
- ColinMaudry 4
- kbaikov 4
- JBPressac 4
- nitinpaultifr 4
- Kabouik 4
- henry501 4
- benpickles 3
- frankieroberto 3
- fs111 3
- obra 3
- janimo 3
- atomotic 3
- ghing 3
- pkoppstein 3
- yozlet 3
- yschimke 3
- philroche 3
- macropin 3
- camallen 3
- wsxiaoys 3
- xrotwang 3
- robroc 3
- dufferzafar 3
- Florents-Tselai 3
- ashishdotme 3
- Segerberg 3
- blairdrummond 3
- jsancho-gpl 3
- kevindkeogh 3
- daniel-butler 3
- learning4life 3
- FabianHertwig 3
- polyrand 3
- pjamargh 3
- garethr 2
- danp 2
- davidbgk 2
- ftrain 2
- chrishas35 2
- tannewt 2
- ingenieroariel 2
- coleifer 2
- gavinband 2
- aviflax 2
- tholo 2
- cldellow 2
- frankier 2
- lchski 2
- tmaier 2
- gfrmin 2
- frosencrantz 2
- eads 2
- leafgarland 2
- glyph 2
- strada 2
- Mjboothaus 2
- eelkevdbos 2
- ligurio 2
- n8henrie 2
- soobrosa 2
- nathancahill 2
- betatim 2
- bsmithgall 2
- willingc 2
- nattaylor 2
- durkie 2
- raynae 2
- wulfmann 2
- philshem 2
- bram2000 2
- zzeleznick 2
- chris48s 2
- plpxsk 2
- henrikek 2
- swyxio 2
- nickvazz 2
- hydrosquall 2
- aaronyih1 2
- jussiarpalahti 2
- lagolucas 2
- chekos 2
- ad-si 2
- smithdc1 2
- gsajko 2
- null92 2
- rachelmarconi 2
- tunguyenatwork 2
- LVerneyPEReN 2
- anotherjesse 1
- jarib 1
- jokull 1
- dsisnero 1
- llimllib 1
- gijs 1
- blaine 1
- gravis 1
- nkirsch 1
- tomdyson 1
- mrchrisadams 1
- dkam 1
- harperreed 1
- furilo 1
- adamwolf 1
- prabhur 1
- dmd 1
- rubenv 1
- Uninen 1
- carsonyl 1
- nryberg 1
- step21 1
- stefanocudini 1
- rcoup 1
- scoates 1
- hpk42 1
- annapowellsmith 1
- aslakr 1
- thorn0 1
- yurivish 1
- jmelloy 1
- Krazybug 1
- dvhthomas 1
- phubbard 1
- sethvincent 1
- meatcar 1
- aitoehigie 1
- michaelmcandrew 1
- drewda 1
- stiles 1
- saulpw 1
- thadk 1
- robintw 1
- astrojuanlu 1
- ipmb 1
- steren 1
- aidansteele 1
- mikepqr 1
- 0x1997 1
- davidszotten 1
- kevboh 1
- eaubin 1
- yunzheng 1
- karlcow 1
- heyarne 1
- simonrjones 1
- mcint 1
- justinpinkney 1
- merwok 1
- mattkiefer 1
- virtadpt 1
- snth 1
- joshmgrant 1
- bcongdon 1
- nickdirienzo 1
- rafguns 1
- adamjonas 1
- hannseman 1
- kaihendry 1
- urbas 1
- brimstone 1
- adamchainz 1
- PabloLerma 1
- heussd 1
- RayBB 1
- limar 1
- drkane 1
- Gagravarr 1
- agguser 1
- dyllan-to-you 1
- justinallen 1
- jordaneremieff 1
- wdccdw 1
- progpow 1
- ltrgoddard 1
- costrouc 1
- jratike80 1
- ccorcos 1
- qqilihq 1
- QAInsights 1
- secretGeek 1
- fkuhn 1
- jameslittle230 1
- dskrad 1
- kwladyka 1
- Carib0u 1
- fatihky 1
- phoenixjun 1
- JesperTreetop 1
- bapowell 1
- louispotok 1
- ChristopherWilks 1
- Maltazar 1
- eumiro 1
- wuhland 1
- foscoj 1
- dvot197007 1
- kokes 1
- csusanu 1
- rprimet 1
- metab0t 1
- luxint 1
- spdkils 1
- sturzl 1
- robmarkcole 1
- jfeiwell 1
- coisnepe 1
- chmaynard 1
- asg017 1
- noklam 1
- GmGniap 1
- rdtq 1
- AnkitKundariya 1
- LucasElArruda 1
- duarteocarmo 1
- mattiaborsoi 1
- sarcasticadmin 1
- abeyerpath 1
- b0b5h4rp13 1
- Rik-de-Kort 1
- patricktrainer 1
- justmars 1
- miuku 1
- jcmkk3 1
- publicmatt 1
- thisismyfuckingusername 1
- MichaelTiemannOSC 1
- kirajano 1
- knowledgecamp12 1
- McEazy2700 1
id | html_url | issue_url | node_id | user | created_at | updated_at ▲ | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
1133331997 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133331997 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjUYd | simonw 9599 | 2022-05-20T20:27:31Z | 2022-05-20T20:27:31Z | OWNER | I'm going to move my custom JavaScript from |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133331564 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133331564 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjURs | simonw 9599 | 2022-05-20T20:27:12Z | 2022-05-20T20:27:12Z | OWNER | This seems to work for ```html+jinja ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133310253 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133310253 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjPEt | simonw 9599 | 2022-05-20T20:11:00Z | 2022-05-20T20:11:00Z | OWNER | Oh but |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133309452 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133309452 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjO4M | simonw 9599 | 2022-05-20T20:10:36Z | 2022-05-20T20:10:36Z | OWNER | Weird, I cannot figure out this |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133299417 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133299417 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjMbZ | simonw 9599 | 2022-05-20T20:05:34Z | 2022-05-20T20:05:34Z | OWNER | I can't get that thing that displays the version working. https://github.com/readthedocs/sphinx_rtd_theme/blob/9264091087620d421b0804c00937b00980ac3916/sphinx_rtd_theme/layout.html#L154 is where |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133288501 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133288501 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjJw1 | simonw 9599 | 2022-05-20T20:00:17Z | 2022-05-20T20:00:17Z | OWNER | Here's a TIL from when I first customized the Note that Furo doesn't use |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133267290 | https://github.com/simonw/datasette/issues/1153#issuecomment-1133267290 | https://api.github.com/repos/simonw/datasette/issues/1153 | IC_kwDOBm6k_c5DjEla | simonw 9599 | 2022-05-20T19:44:05Z | 2022-05-20T19:50:58Z | OWNER | Undocumented Sphinx feature: you can add extra classes to a code example like this: ``` .. code-block:: json :class: metadata-json
``` https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#directive-code-block doesn't mention this. Filed an issue about the lack of documentation here: - https://github.com/sphinx-doc/sphinx/issues/10461 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Use YAML examples in documentation by default, not JSON 771202454 | |
1133254599 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133254599 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjBfH | simonw 9599 | 2022-05-20T19:33:08Z | 2022-05-20T19:33:08Z | OWNER | Actually maybe I don't? I just noticed that on other pages on https://docs.datasette.io/en/stable/installation.html the only way to get back to that useful table of context / index page at https://docs.datasette.io/en/stable/index.html is by clicking the tiny house icon. Can I do better or should I have the logo do that? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133252598 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133252598 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjA_2 | simonw 9599 | 2022-05-20T19:31:30Z | 2022-05-20T19:31:30Z | OWNER | I'd also like to bring back this stable / latest / version indicator: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133250151 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133250151 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjAZn | simonw 9599 | 2022-05-20T19:29:37Z | 2022-05-20T19:29:37Z | OWNER | I want the Datasette logo in the sidebar to link to https://datasette.io/ Looks like I can do that by dropping in my own |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133246791 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133246791 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5Di_lH | simonw 9599 | 2022-05-20T19:26:49Z | 2022-05-20T19:26:49Z | OWNER | Putting this in the
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133242063 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133242063 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5Di-bP | simonw 9599 | 2022-05-20T19:22:49Z | 2022-05-20T19:22:49Z | OWNER | I have some custom CSS in this file: I tested and the The |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133232301 | https://github.com/simonw/datasette/issues/1748#issuecomment-1133232301 | https://api.github.com/repos/simonw/datasette/issues/1748 | IC_kwDOBm6k_c5Di8Ct | simonw 9599 | 2022-05-20T19:15:00Z | 2022-05-20T19:15:00Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add copy buttons next to code examples in the documentation 1243517592 | ||
1133229196 | https://github.com/simonw/datasette/issues/1747#issuecomment-1133229196 | https://api.github.com/repos/simonw/datasette/issues/1747 | IC_kwDOBm6k_c5Di7SM | simonw 9599 | 2022-05-20T19:12:30Z | 2022-05-20T19:12:30Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add tutorials to the getting started guide 1243512344 | ||
1133225441 | https://github.com/simonw/datasette/issues/1748#issuecomment-1133225441 | https://api.github.com/repos/simonw/datasette/issues/1748 | IC_kwDOBm6k_c5Di6Xh | simonw 9599 | 2022-05-20T19:09:13Z | 2022-05-20T19:09:13Z | OWNER | I'm going to add this Sphinx plugin: https://github.com/executablebooks/sphinx-copybutton |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add copy buttons next to code examples in the documentation 1243517592 | |
1133222848 | https://github.com/simonw/datasette/issues/1153#issuecomment-1133222848 | https://api.github.com/repos/simonw/datasette/issues/1153 | IC_kwDOBm6k_c5Di5vA | simonw 9599 | 2022-05-20T19:07:10Z | 2022-05-20T19:07:10Z | OWNER | I could use https://github.com/pradyunsg/sphinx-inline-tabs for this - recommended by https://pradyunsg.me/furo/recommendations/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Use YAML examples in documentation by default, not JSON 771202454 | |
1133217219 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133217219 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5Di4XD | simonw 9599 | 2022-05-20T18:58:54Z | 2022-05-20T18:58:54Z | OWNER | Need to address other customizations I've made in https://github.com/simonw/datasette/blob/0.62a0/docs/_templates/layout.html - such as Plausible analytics and some custom JavaScript. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133215684 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133215684 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5Di3_E | simonw 9599 | 2022-05-20T18:56:29Z | 2022-05-20T18:56:29Z | OWNER | One other problem: in dark mode the Datasette logo looks bad: This helps a bit:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133210942 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133210942 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5Di20- | simonw 9599 | 2022-05-20T18:49:40Z | 2022-05-20T18:49:40Z | OWNER | And for those local table of contents, do this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133210651 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133210651 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5Di2wb | simonw 9599 | 2022-05-20T18:49:11Z | 2022-05-20T18:49:11Z | OWNER | I found a workaround for the no-longer-nested left hand navigation: drop this into ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133210032 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133210032 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5Di2mw | simonw 9599 | 2022-05-20T18:48:17Z | 2022-05-20T18:48:17Z | OWNER | A couple of changes I want to make. First, I don't really like the way Furo keeps the in-page titles in a separate menu on the right rather than expanding them on the left. I like this: Furo wants to do this instead: I also still want to include those inline tables of contents on the two pages that have them: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1129332959 | https://github.com/simonw/sqlite-utils/issues/425#issuecomment-1129332959 | https://api.github.com/repos/simonw/sqlite-utils/issues/425 | IC_kwDOCGYnMM5DUEDf | McEazy2700 102771161 | 2022-05-17T21:27:02Z | 2022-05-17T21:27:02Z | NONE | Hi, I'm trying to deploy my site using elasticbeanstalk and I keep getting this same error : deterministic=True requires SQLite 3.8.3 or higher I saw your previous solution that involves editing sqlite-utils/sqlite_utils/db.py file, but I'm curious as to how that will work in production. |
{ "total_count": 5, "+1": 5, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite3.NotSupportedError`: deterministic=True requires SQLite 3.8.3 or higher 1203842656 | |
1129251699 | https://github.com/simonw/datasette/issues/1744#issuecomment-1129251699 | https://api.github.com/repos/simonw/datasette/issues/1744 | IC_kwDOBm6k_c5DTwNz | simonw 9599 | 2022-05-17T19:44:47Z | 2022-05-17T19:46:38Z | OWNER | { "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`--nolock` feature for opening locked databases 1239008850 | ||
1129252603 | https://github.com/simonw/datasette/issues/1745#issuecomment-1129252603 | https://api.github.com/repos/simonw/datasette/issues/1745 | IC_kwDOBm6k_c5DTwb7 | simonw 9599 | 2022-05-17T19:45:51Z | 2022-05-17T19:45:51Z | OWNER | Now documented here: https://docs.datasette.io/en/latest/contributing.html#running-cog |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation on running cog 1239080102 | |
1129243427 | https://github.com/simonw/datasette/issues/1744#issuecomment-1129243427 | https://api.github.com/repos/simonw/datasette/issues/1744 | IC_kwDOBm6k_c5DTuMj | simonw 9599 | 2022-05-17T19:35:02Z | 2022-05-17T19:35:02Z | OWNER | One thing to note is that the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`--nolock` feature for opening locked databases 1239008850 | |
1129241873 | https://github.com/simonw/datasette/issues/1744#issuecomment-1129241873 | https://api.github.com/repos/simonw/datasette/issues/1744 | IC_kwDOBm6k_c5DTt0R | simonw 9599 | 2022-05-17T19:33:16Z | 2022-05-17T19:33:16Z | OWNER | I'm going to skip adding a test for this - the test logic would have to be pretty convoluted to exercise it properly, and it's a pretty minor and low-risk feature in the scheme of things. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`--nolock` feature for opening locked databases 1239008850 | |
1129241283 | https://github.com/simonw/datasette/issues/1744#issuecomment-1129241283 | https://api.github.com/repos/simonw/datasette/issues/1744 | IC_kwDOBm6k_c5DTtrD | simonw 9599 | 2022-05-17T19:32:35Z | 2022-05-17T19:32:35Z | OWNER | I tried writing a test like this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`--nolock` feature for opening locked databases 1239008850 | |
1129187486 | https://github.com/simonw/datasette/issues/1744#issuecomment-1129187486 | https://api.github.com/repos/simonw/datasette/issues/1744 | IC_kwDOBm6k_c5DTgie | simonw 9599 | 2022-05-17T18:28:49Z | 2022-05-17T18:28:49Z | OWNER | I think I do that with |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`--nolock` feature for opening locked databases 1239008850 | |
1129185356 | https://github.com/simonw/datasette/issues/1744#issuecomment-1129185356 | https://api.github.com/repos/simonw/datasette/issues/1744 | IC_kwDOBm6k_c5DTgBM | simonw 9599 | 2022-05-17T18:26:26Z | 2022-05-17T18:26:26Z | OWNER | Not sure how to test this - I'd need to open my own lock against a database file somehow. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`--nolock` feature for opening locked databases 1239008850 | |
1129184908 | https://github.com/simonw/datasette/issues/1744#issuecomment-1129184908 | https://api.github.com/repos/simonw/datasette/issues/1744 | IC_kwDOBm6k_c5DTf6M | simonw 9599 | 2022-05-17T18:25:57Z | 2022-05-17T18:25:57Z | OWNER | I knocked out a quick prototype of this and it worked!
Here's the prototype diff: ```diff diff --git a/datasette/app.py b/datasette/app.py index b7b8437..f43700d 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -213,6 +213,7 @@ class Datasette: config_dir=None, pdb=False, crossdb=False, + nolock=False, ): assert config_dir is None or isinstance( config_dir, Path @@ -238,6 +239,7 @@ class Datasette: self.databases = collections.OrderedDict() self._refresh_schemas_lock = asyncio.Lock() self.crossdb = crossdb + self.nolock = nolock if memory or crossdb or not self.files: self.add_database(Database(self, is_memory=True), name="_memory") # memory_name is a random string so that each Datasette instance gets its own diff --git a/datasette/cli.py b/datasette/cli.py index 3c6e1b2..7e44665 100644 --- a/datasette/cli.py +++ b/datasette/cli.py @@ -452,6 +452,11 @@ def uninstall(packages, yes): is_flag=True, help="Enable cross-database joins using the /_memory database", ) +@click.option( + "--nolock", + is_flag=True, + help="Ignore locking and open locked files in read-only mode", +) @click.option( "--ssl-keyfile", help="SSL key file", @@ -486,6 +491,7 @@ def serve( open_browser, create, crossdb, + nolock, ssl_keyfile, ssl_certfile, return_instance=False, @@ -545,6 +551,7 @@ def serve( version_note=version_note, pdb=pdb, crossdb=crossdb, + nolock=nolock, )
diff --git a/datasette/database.py b/datasette/database.py index 44d3266..fa55804 100644 --- a/datasette/database.py +++ b/datasette/database.py @@ -89,6 +89,8 @@ class Database: # mode=ro or immutable=1? if self.is_mutable: qs = "?mode=ro" + if self.ds.nolock: + qs += "&nolock=1" else: qs = "?immutable=1" assert not (write and not self.is_mutable) ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`--nolock` feature for opening locked databases 1239008850 | |
1128064864 | https://github.com/simonw/datasette/issues/1742#issuecomment-1128064864 | https://api.github.com/repos/simonw/datasette/issues/1742 | IC_kwDOBm6k_c5DPOdg | eyeseast 25778 | 2022-05-16T19:42:13Z | 2022-05-16T19:42:13Z | CONTRIBUTOR | Just to add a wrinkle here, this loads fine: https://alltheplaces-datasette.fly.dev/alltheplaces/places.geojson?_trace=1 But also, this doesn't add any trace data: https://alltheplaces-datasette.fly.dev/alltheplaces/places.json?_trace=1 What am I missing? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_trace=1 fails with datasette-geojson for some reason 1237586379 | |
1128052948 | https://github.com/simonw/datasette/issues/1742#issuecomment-1128052948 | https://api.github.com/repos/simonw/datasette/issues/1742 | IC_kwDOBm6k_c5DPLjU | simonw 9599 | 2022-05-16T19:28:31Z | 2022-05-16T19:28:31Z | OWNER | The trace mechanism is a bit gnarly - it's actually done by some ASGI middleware I wrote, so I'm pretty sure the bug is in there somewhere: https://github.com/simonw/datasette/blob/280ff372ab30df244f6c54f6f3002da57334b3d7/datasette/tracer.py#L73 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_trace=1 fails with datasette-geojson for some reason 1237586379 | |
1128049716 | https://github.com/simonw/datasette/issues/1742#issuecomment-1128049716 | https://api.github.com/repos/simonw/datasette/issues/1742 | IC_kwDOBm6k_c5DPKw0 | eyeseast 25778 | 2022-05-16T19:24:44Z | 2022-05-16T19:24:44Z | CONTRIBUTOR | Where is |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_trace=1 fails with datasette-geojson for some reason 1237586379 | |
1128033018 | https://github.com/simonw/datasette/issues/1742#issuecomment-1128033018 | https://api.github.com/repos/simonw/datasette/issues/1742 | IC_kwDOBm6k_c5DPGr6 | simonw 9599 | 2022-05-16T19:06:38Z | 2022-05-16T19:06:38Z | OWNER | The same URL with |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_trace=1 fails with datasette-geojson for some reason 1237586379 | |
1126295407 | https://github.com/simonw/sqlite-utils/issues/431#issuecomment-1126295407 | https://api.github.com/repos/simonw/sqlite-utils/issues/431 | IC_kwDOCGYnMM5DIedv | rafguns 738408 | 2022-05-13T17:47:32Z | 2022-05-13T17:47:32Z | NONE | I'd be happy to write a PR for this, if you think it's worth having. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Allow making m2m relation of a table to itself 1227571375 | |
1125342229 | https://github.com/simonw/datasette/issues/741#issuecomment-1125342229 | https://api.github.com/repos/simonw/datasette/issues/741 | IC_kwDOBm6k_c5DE1wV | eyeseast 25778 | 2022-05-12T19:21:16Z | 2022-05-12T19:21:16Z | CONTRIBUTOR | Came here to check if this had been flagged already. Was helping a colleague get something on Cloud Run and had to dig to find If I get some time next week, maybe I'll try to tackle it. Would definitely make things easier to be able to do something like this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Replace "datasette publish --extra-options" with "--setting" 607223136 | |
1125083348 | https://github.com/simonw/datasette/issues/1298#issuecomment-1125083348 | https://api.github.com/repos/simonw/datasette/issues/1298 | IC_kwDOBm6k_c5DD2jU | llimllib 7150 | 2022-05-12T14:43:51Z | 2022-05-12T14:43:51Z | NONE | user report: I found this issue because the first time I tried to use datasette for real, I displayed a large table, and thought there was no horizontal scroll bar at all. I didn't even consider that I had to scroll all the way to the end of the page to find it. Just chipping in to say that this confused me, and I didn't even find the scroll bar until after I saw this issue. I don't know what the right answer is, but IMO the UI should suggest to the user that there is a way to view the data that's hidden to the right. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
improve table horizontal scroll experience 855476501 | |
1117662420 | https://github.com/simonw/datasette/issues/1739#issuecomment-1117662420 | https://api.github.com/repos/simonw/datasette/issues/1739 | IC_kwDOBm6k_c5CnizU | simonw 9599 | 2022-05-04T18:21:18Z | 2022-05-04T18:21:18Z | OWNER | That prototype is now public: https://github.com/simonw/datasette-lite |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
.db downloads should be served with an ETag 1223699280 | |
1116684581 | https://github.com/simonw/sqlite-utils/issues/416#issuecomment-1116684581 | https://api.github.com/repos/simonw/sqlite-utils/issues/416 | IC_kwDOCGYnMM5Cj0El | mattkiefer 638427 | 2022-05-03T21:36:49Z | 2022-05-03T21:36:49Z | NONE | Thanks for addressing this @simonw! However, I just reinstalled sqlite-utils 3.26.1 and get an |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Options for how `r.parsedate()` should handle invalid dates 1173023272 | |
1116336340 | https://github.com/simonw/sqlite-utils/issues/430#issuecomment-1116336340 | https://api.github.com/repos/simonw/sqlite-utils/issues/430 | IC_kwDOCGYnMM5CifDU | rayvoelker 9308268 | 2022-05-03T17:03:31Z | 2022-05-03T17:03:31Z | NONE | So, the good news is that it appears that setting one of those PRAGMA statements fixed the issue of I wonder if it's something system / environment specific about SQLite, or maybe something else going on. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Document how to use `PRAGMA temp_store` to avoid errors when running VACUUM against huge databases 1224112817 | |
1116215371 | https://github.com/simonw/datasette/issues/1739#issuecomment-1116215371 | https://api.github.com/repos/simonw/datasette/issues/1739 | IC_kwDOBm6k_c5CiBhL | simonw 9599 | 2022-05-03T15:12:16Z | 2022-05-03T15:12:16Z | OWNER | That worked - both DBs are 304 for me now on a subsequent load of the page: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
.db downloads should be served with an ETag 1223699280 | |
1116183369 | https://github.com/simonw/datasette/issues/1739#issuecomment-1116183369 | https://api.github.com/repos/simonw/datasette/issues/1739 | IC_kwDOBm6k_c5Ch5tJ | simonw 9599 | 2022-05-03T14:43:14Z | 2022-05-03T14:43:14Z | OWNER | Relevant tests start here: https://github.com/simonw/datasette/blob/d60f163528f466b1127b2935c3b6869c34fd6545/tests/test_html.py#L395 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
.db downloads should be served with an ETag 1223699280 | |
1116180599 | https://github.com/simonw/datasette/issues/1739#issuecomment-1116180599 | https://api.github.com/repos/simonw/datasette/issues/1739 | IC_kwDOBm6k_c5Ch5B3 | simonw 9599 | 2022-05-03T14:40:32Z | 2022-05-03T14:40:32Z | OWNER | Database downloads are served here: https://github.com/simonw/datasette/blob/d60f163528f466b1127b2935c3b6869c34fd6545/datasette/views/database.py#L186-L192 Here's I can add an |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
.db downloads should be served with an ETag 1223699280 | |
1116178727 | https://github.com/simonw/datasette/issues/1739#issuecomment-1116178727 | https://api.github.com/repos/simonw/datasette/issues/1739 | IC_kwDOBm6k_c5Ch4kn | simonw 9599 | 2022-05-03T14:38:46Z | 2022-05-03T14:38:46Z | OWNER | Reminded myself how this works by reviewing Simply add a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
.db downloads should be served with an ETag 1223699280 | |
1115760104 | https://github.com/simonw/datasette/issues/1739#issuecomment-1115760104 | https://api.github.com/repos/simonw/datasette/issues/1739 | IC_kwDOBm6k_c5CgSXo | simonw 9599 | 2022-05-03T05:50:19Z | 2022-05-03T05:50:19Z | OWNER | Here's how Starlette does it: https://github.com/encode/starlette/blob/830f3486537916bae6b46948ff922adc14a22b7c/starlette/staticfiles.py#L213 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
.db downloads should be served with an ETag 1223699280 | |
1115542067 | https://github.com/simonw/datasette/issues/1732#issuecomment-1115542067 | https://api.github.com/repos/simonw/datasette/issues/1732 | IC_kwDOBm6k_c5CfdIz | tannewt 52649 | 2022-05-03T01:50:44Z | 2022-05-03T01:50:44Z | NONE | I haven’t set one up unfortunately. My time is very limited because we just had a baby. On Mon, May 2, 2022, at 6:42 PM, Simon Willison wrote:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Custom page variables aren't decoded 1221849746 | |
1115533820 | https://github.com/simonw/datasette/issues/1732#issuecomment-1115533820 | https://api.github.com/repos/simonw/datasette/issues/1732 | IC_kwDOBm6k_c5CfbH8 | simonw 9599 | 2022-05-03T01:42:25Z | 2022-05-03T01:42:25Z | OWNER | Thanks, this definitely sounds like a bug. Do you have simple steps to reproduce this? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Custom page variables aren't decoded 1221849746 | |
1115470180 | https://github.com/simonw/datasette/issues/1737#issuecomment-1115470180 | https://api.github.com/repos/simonw/datasette/issues/1737 | IC_kwDOBm6k_c5CfLlk | simonw 9599 | 2022-05-02T23:39:29Z | 2022-05-02T23:39:29Z | OWNER | Test ran in 38 seconds and passed! https://github.com/simonw/datasette/runs/6265954274?check_suite_focus=true I'm going to have it run on every commit and PR. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Automated test for Pyodide compatibility 1223459734 | |
1115468193 | https://github.com/simonw/datasette/issues/1737#issuecomment-1115468193 | https://api.github.com/repos/simonw/datasette/issues/1737 | IC_kwDOBm6k_c5CfLGh | simonw 9599 | 2022-05-02T23:35:26Z | 2022-05-02T23:35:26Z | OWNER | https://github.com/simonw/datasette/runs/6265915080?check_suite_focus=true failed but looks like it passed because I forgot to use It failed because it didn't have |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Automated test for Pyodide compatibility 1223459734 | |
1115464097 | https://github.com/simonw/datasette/issues/1737#issuecomment-1115464097 | https://api.github.com/repos/simonw/datasette/issues/1737 | IC_kwDOBm6k_c5CfKGh | simonw 9599 | 2022-05-02T23:27:40Z | 2022-05-02T23:27:40Z | OWNER | I'm going to start off by running this manually - I may run it on every commit once this is all a little bit more stable. I can base the workflow on https://github.com/simonw/scrape-hacker-news-by-domain/blob/main/.github/workflows/scrape.yml |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Automated test for Pyodide compatibility 1223459734 | |
1115462720 | https://github.com/simonw/datasette/issues/1737#issuecomment-1115462720 | https://api.github.com/repos/simonw/datasette/issues/1737 | IC_kwDOBm6k_c5CfJxA | simonw 9599 | 2022-05-02T23:25:03Z | 2022-05-02T23:25:03Z | OWNER | Here's a script that seems to work. It builds the wheel, starts a Python web server that serves the wheel, runs a test with ```bash !/bin/bashBuild the wheelpython3 -m build Find name of wheelwheel=$(basename $(ls dist/*.whl)) strip off the dist/Create a blank index pageecho ' <script src="https://cdn.jsdelivr.net/pyodide/v0.20.0/full/pyodide.js"></script>' > dist/index.html Run a server for that dist/ foldercd dist python3 -m http.server 8529 & cd .. shot-scraper javascript http://localhost:8529/ " async () => { let pyodide = await loadPyodide(); await pyodide.loadPackage(['micropip', 'ssl', 'setuptools']); let output = await pyodide.runPythonAsync(` import micropip await micropip.install('h11==0.12.0') await micropip.install('http://localhost:8529/$wheel') import ssl import setuptools from datasette.app import Datasette ds = Datasette(memory=True, settings={'num_sql_threads': 0}) (await ds.client.get('/_memory.json?sql=select+55+as+itworks&_shape=array')).text `); if (JSON.parse(output)[0].itworks != 55) { throw 'Got ' + output + ', expected itworks: 55'; } return 'Test passed!'; } " Shut down the serverpkill -f 'http.server 8529' ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Automated test for Pyodide compatibility 1223459734 | |
1115404729 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115404729 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5Ce7m5 | simonw 9599 | 2022-05-02T21:49:01Z | 2022-05-02T21:49:38Z | OWNER | That alpha release works! https://pyodide.org/en/stable/console.html ```pycon Welcome to the Pyodide terminal emulator 🐍 Python 3.10.2 (main, Apr 9 2022 20:52:01) on WebAssembly VM Type "help", "copyright", "credits" or "license" for more information.
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115318417 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115318417 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5CemiR | simonw 9599 | 2022-05-02T20:13:43Z | 2022-05-02T20:13:43Z | OWNER | This is good enough to push an alpha. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115318303 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115318303 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5Cemgf | simonw 9599 | 2022-05-02T20:13:36Z | 2022-05-02T20:13:36Z | OWNER | I got a build from the ``` Welcome to the Pyodide terminal emulator 🐍 Python 3.10.2 (main, Apr 9 2022 20:52:01) on WebAssembly VM Type "help", "copyright", "credits" or "license" for more information.
That I can avoid it by running this first though:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115301733 | https://github.com/simonw/datasette/issues/1735#issuecomment-1115301733 | https://api.github.com/repos/simonw/datasette/issues/1735 | IC_kwDOBm6k_c5Ceidl | simonw 9599 | 2022-05-02T19:57:19Z | 2022-05-02T19:59:03Z | OWNER | This code breaks if that setting is 0: It's used here: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Datasette setting to disable threading (for Pyodide) 1223263540 | |
1115288284 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115288284 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5CefLc | simonw 9599 | 2022-05-02T19:40:33Z | 2022-05-02T19:40:33Z | OWNER | I'll release this as a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115283922 | https://github.com/simonw/datasette/issues/1734#issuecomment-1115283922 | https://api.github.com/repos/simonw/datasette/issues/1734 | IC_kwDOBm6k_c5CeeHS | simonw 9599 | 2022-05-02T19:35:32Z | 2022-05-02T19:35:32Z | OWNER | I'll use my original from 2009: https://www.djangosnippets.org/snippets/1431/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Remove python-baseconv dependency 1223241647 | |
1115282773 | https://github.com/simonw/datasette/issues/1734#issuecomment-1115282773 | https://api.github.com/repos/simonw/datasette/issues/1734 | IC_kwDOBm6k_c5Ced1V | simonw 9599 | 2022-05-02T19:34:15Z | 2022-05-02T19:34:15Z | OWNER | I'm going to vendor it and update the documentation. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Remove python-baseconv dependency 1223241647 | |
1115278325 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115278325 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5Cecv1 | simonw 9599 | 2022-05-02T19:29:05Z | 2022-05-02T19:29:05Z | OWNER | I'm going to add a Datasette setting to disable threading entirely, designed for usage in this particular case. I thought about adding a new setting, then I noticed this:
I'm going to let users set that to |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115268245 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115268245 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5CeaSV | simonw 9599 | 2022-05-02T19:18:11Z | 2022-05-02T19:18:11Z | OWNER | Maybe I can leave ```pycon Welcome to the Pyodide terminal emulator 🐍 Python 3.10.2 (main, Apr 9 2022 20:52:01) on WebAssembly VM Type "help", "copyright", "credits" or "license" for more information.
But it looks like i can address this issue just by making |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115262218 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115262218 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5CeY0K | simonw 9599 | 2022-05-02T19:11:51Z | 2022-05-02T19:14:01Z | OWNER | Here's the full diff I applied to Datasette to get it fully working in Pyodide: And as a visible diff: ```diff diff --git a/datasette/app.py b/datasette/app.py index d269372..6c0c5fc 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -15,7 +15,6 @@ import pkg_resources import re import secrets import sys -import threading import traceback import urllib.parse from concurrent import futures @@ -26,7 +25,6 @@ from itsdangerous import URLSafeSerializer from jinja2 import ChoiceLoader, Environment, FileSystemLoader, PrefixLoader from jinja2.environment import Template from jinja2.exceptions import TemplateNotFound -import uvicorn from .views.base import DatasetteError, ureg from .views.database import DatabaseDownload, DatabaseView @@ -813,7 +811,6 @@ class Datasette: }, "datasette": datasette_version, "asgi": "3.0", - "uvicorn": uvicorn.version, "sqlite": { "version": sqlite_version, "fts_versions": fts_versions, @@ -854,23 +851,7 @@ class Datasette: ]
from .tracer import trace @@ -21,8 +20,6 @@ from .utils import ( ) from .inspect import inspect_hash -connections = threading.local()AttachedDatabase = namedtuple("AttachedDatabase", ("seq", "name", "file")) @@ -43,12 +40,12 @@ class Database: self.hash = None self.cached_size = None self._cached_table_counts = None - self._write_thread = None - self._write_queue = None if not self.is_mutable and not self.is_memory: p = Path(path) self.hash = inspect_hash(p) self.cached_size = p.stat().st_size + self._read_connection = None + self._write_connection = None
@@ -134,60 +131,17 @@ class Database: return results
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115260999 | https://github.com/simonw/datasette/issues/1734#issuecomment-1115260999 | https://api.github.com/repos/simonw/datasette/issues/1734 | IC_kwDOBm6k_c5CeYhH | simonw 9599 | 2022-05-02T19:10:34Z | 2022-05-02T19:10:34Z | OWNER | This is actually mostly a documentation thing: here: https://docs.datasette.io/en/0.61.1/authentication.html#including-an-expiry-time In the code it's only used in these two places: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Remove python-baseconv dependency 1223241647 | |
1115258737 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115258737 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5CeX9x | simonw 9599 | 2022-05-02T19:08:17Z | 2022-05-02T19:08:17Z | OWNER | I was going to vendor I used https://cs.github.com/ and as far as I can tell there aren't any! So I'm going to remove that dependency and work out a smarter way to do this - probably by providing a utility function within Datasette itself. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115256318 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115256318 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5CeXX- | simonw 9599 | 2022-05-02T19:05:55Z | 2022-05-02T19:05:55Z | OWNER | I released a
Datasette never actually sets that cookie itself - it instead encourages plugins to set it in the authentication documentation here: https://docs.datasette.io/en/0.61.1/authentication.html#including-an-expiry-time |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115196863 | https://github.com/simonw/sqlite-utils/pull/429#issuecomment-1115196863 | https://api.github.com/repos/simonw/sqlite-utils/issues/429 | IC_kwDOCGYnMM5CeI2_ | simonw 9599 | 2022-05-02T18:03:47Z | 2022-05-02T18:52:42Z | OWNER | I made a build of this branch and tested it like this: https://pyodide.org/en/stable/console.html ```pycon
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Depend on click-default-group-wheel 1223177069 | |
1115197644 | https://github.com/simonw/sqlite-utils/pull/429#issuecomment-1115197644 | https://api.github.com/repos/simonw/sqlite-utils/issues/429 | IC_kwDOCGYnMM5CeJDM | simonw 9599 | 2022-05-02T18:04:28Z | 2022-05-02T18:04:28Z | OWNER | I'm going to ship this straight away as |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Depend on click-default-group-wheel 1223177069 | |
1114601882 | https://github.com/simonw/datasette/issues/1479#issuecomment-1114601882 | https://api.github.com/repos/simonw/datasette/issues/1479 | IC_kwDOBm6k_c5Cb3ma | Rik-de-Kort 32839123 | 2022-05-02T08:10:27Z | 2022-05-02T11:54:49Z | NONE | Also ran into this issue today using The next error I get is docker-specific, so that probably does resolve the Datasette error here. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Win32 "used by another process" error with datasette publish 1010112818 | |
1114058210 | https://github.com/simonw/datasette/issues/1727#issuecomment-1114058210 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CZy3i | simonw 9599 | 2022-04-30T21:39:34Z | 2022-04-30T21:39:34Z | OWNER | Something to consider if I look into subprocesses for parallel query execution: https://sqlite.org/howtocorrupt.html#carrying_an_open_database_connection_across_a_fork
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1114038259 | https://github.com/simonw/datasette/issues/1729#issuecomment-1114038259 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CZt_z | simonw 9599 | 2022-04-30T19:06:03Z | 2022-04-30T19:06:03Z | OWNER |
I think |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1114036946 | https://github.com/simonw/datasette/issues/1729#issuecomment-1114036946 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CZtrS | simonw 9599 | 2022-04-30T18:56:25Z | 2022-04-30T19:04:03Z | OWNER | Related: - #1558 Which talks about how there was confusion in this example: https://latest.datasette.io/fixtures/facetable.json?_facet=created&_facet_date=created&_facet=tags&_facet_array=tags&_nosuggest=1&_size=0 Which I fixed in #625 by introducing |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1114037521 | https://github.com/simonw/datasette/issues/1729#issuecomment-1114037521 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CZt0R | simonw 9599 | 2022-04-30T19:01:07Z | 2022-04-30T19:01:07Z | OWNER | I had to look up what That's a bit of a weird thing to expose in the API. Maybe change that to |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1114013757 | https://github.com/simonw/datasette/issues/1729#issuecomment-1114013757 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CZoA9 | simonw 9599 | 2022-04-30T16:15:51Z | 2022-04-30T18:54:39Z | OWNER | Deployed a preview of this here: https://latest-1-0-alpha.datasette.io/ Examples:
Second example produces:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112889800 | https://github.com/simonw/datasette/issues/1727#issuecomment-1112889800 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CVVnI | simonw 9599 | 2022-04-29T05:29:38Z | 2022-04-29T05:29:38Z | OWNER | OK, I just got the most incredible result with that! I started up a container running
And... the parallel one beat the non-parallel one decisively, on multiple page refreshes! Not parallel: 77ms Parallel: 47ms So yeah, I'm very confident this is a problem with the GIL. And I am absolutely stunned that @colesbury's fork ran Datasette (which has some reasonably tricky threading and async stuff going on) out of the box! |
{ "total_count": 2, "+1": 2, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1112879463 | https://github.com/simonw/datasette/issues/1727#issuecomment-1112879463 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CVTFn | simonw 9599 | 2022-04-29T05:03:58Z | 2022-04-29T05:03:58Z | OWNER | It would be really fun to try running this with the in-development There's a Docker container for it: https://hub.docker.com/r/nogil/python It suggests you can run something like this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1112878955 | https://github.com/simonw/datasette/issues/1727#issuecomment-1112878955 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CVS9r | simonw 9599 | 2022-04-29T05:02:40Z | 2022-04-29T05:02:40Z | OWNER | Here's a very useful (recent) article about how the GIL works and how to think about it: https://pythonspeed.com/articles/python-gil/ - via https://lobste.rs/s/9hj80j/when_python_can_t_thread_deep_dive_into_gil From that article:
That explains what I'm seeing here. I'm pretty convinced now that the reason I'm not getting a performance boost from parallel queries is that there's more time spent in Python code assembling the results than in SQLite C code executing the query. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1112734577 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112734577 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUvtx | simonw 9599 | 2022-04-28T23:08:42Z | 2022-04-28T23:08:42Z | OWNER | That prototype is a very small amount of code so far: ```diff diff --git a/datasette/renderer.py b/datasette/renderer.py index 4508949..b600e1b 100644 --- a/datasette/renderer.py +++ b/datasette/renderer.py @@ -28,6 +28,10 @@ def convert_specific_columns_to_json(rows, columns, json_cols): def json_renderer(args, data, view_name): """Render a response as JSON""" + from pprint import pprint + + pprint(data) + status_code = 200
@@ -43,6 +47,41 @@ def json_renderer(args, data, view_name): if "rows" in data and not value_as_boolean(args.get("_json_infinity", "0")): data["rows"] = [remove_infinites(row) for row in data["rows"]]
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112732563 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112732563 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUvOT | simonw 9599 | 2022-04-28T23:05:03Z | 2022-04-28T23:05:03Z | OWNER | OK, the prototype of this is looking really good - it's very pleasant to use.
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112730416 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112730416 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUusw | simonw 9599 | 2022-04-28T23:01:21Z | 2022-04-28T23:01:21Z | OWNER | I'm not sure what to do about the It's not really relevant to table results, since they are paginated whether or not you ask for them to be. It plays a role in query results, where you might run Adding it to every table result and always setting it to I think I'm going to keep it exclusively in the default representation for the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112721321 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112721321 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUsep | simonw 9599 | 2022-04-28T22:44:05Z | 2022-04-28T22:44:14Z | OWNER | I may be able to implement this mostly in the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112717745 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112717745 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUrmx | simonw 9599 | 2022-04-28T22:38:39Z | 2022-04-28T22:39:05Z | OWNER | (I remain keen on the idea of shipping a plugin that restores the old default API shape to people who have written pre-Datasette-1.0 code against it, but I'll tackle that much later. I really like how jQuery has a culture of doing this.) |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112717210 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112717210 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUrea | simonw 9599 | 2022-04-28T22:37:37Z | 2022-04-28T22:37:37Z | OWNER | This means I'll add |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112716611 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112716611 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUrVD | simonw 9599 | 2022-04-28T22:36:24Z | 2022-04-28T22:36:24Z | OWNER | Then I'm going to implement the following
I thought about having I'm tempted to add |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112713581 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112713581 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUqlt | simonw 9599 | 2022-04-28T22:31:11Z | 2022-04-28T22:31:11Z | OWNER | I'm going to change the default API response to look like this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112711115 | https://github.com/simonw/datasette/issues/1715#issuecomment-1112711115 | https://api.github.com/repos/simonw/datasette/issues/1715 | IC_kwDOBm6k_c5CUp_L | simonw 9599 | 2022-04-28T22:26:56Z | 2022-04-28T22:26:56Z | OWNER | I'm not going to use
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Refactor TableView to use asyncinject 1212823665 | |
1112668411 | https://github.com/simonw/datasette/issues/1727#issuecomment-1112668411 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CUfj7 | simonw 9599 | 2022-04-28T21:25:34Z | 2022-04-28T21:25:44Z | OWNER | The two most promising theories at the moment, from here and Twitter and the SQLite forum, are:
A couple of ways to research the in-memory theory:
I need to do some more, better benchmarks using these different approaches. https://twitter.com/laurencerowe/status/1519780174560169987 also suggests:
I like that second idea a lot - I could use the mandelbrot example from https://www.sqlite.org/lang_with.html#outlandish_recursive_query_examples |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1111955628 | https://github.com/simonw/datasette/issues/1633#issuecomment-1111955628 | https://api.github.com/repos/simonw/datasette/issues/1633 | IC_kwDOBm6k_c5CRxis | henrikek 6613091 | 2022-04-28T09:12:56Z | 2022-04-28T09:12:56Z | NONE | I have verified that the problem with base_url still exists in the latest version 0.61.1. I would need some guidance if my code change suggestion is correct or if base_url should be included in some other code? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url or prefix does not work with _exact match 1129052172 | |
1111752676 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111752676 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ__k | wragge 127565 | 2022-04-28T05:11:54Z | 2022-04-28T05:11:54Z | CONTRIBUTOR | And in terms of the bug, yep I agree that option 2 would be the most useful and least frustrating. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111751734 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111751734 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ_w2 | wragge 127565 | 2022-04-28T05:09:59Z | 2022-04-28T05:09:59Z | CONTRIBUTOR | Thanks, I'll give it a try! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111726586 | https://github.com/simonw/datasette/issues/1727#issuecomment-1111726586 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CQ5n6 | simonw 9599 | 2022-04-28T04:17:16Z | 2022-04-28T04:19:31Z | OWNER | I could experiment with the Code examples: https://cs.github.com/?scopeName=All+repos&scope=&q=run_in_executor+ProcessPoolExecutor |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1111725638 | https://github.com/simonw/datasette/issues/1727#issuecomment-1111725638 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CQ5ZG | simonw 9599 | 2022-04-28T04:15:15Z | 2022-04-28T04:15:15Z | OWNER | Useful theory from Keith Medcalf https://sqlite.org/forum/forumpost/e363c69d3441172e
So maybe this is a GIL thing. I should test with some expensive SQL queries (maybe big aggregations against large tables) and see if I can spot an improvement there. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1111714665 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111714665 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ2tp | simonw 9599 | 2022-04-28T03:52:47Z | 2022-04-28T03:52:58Z | OWNER | Nice custom template/theme! Yeah, for that I'd recommend hosting elsewhere - on a regular VPS (I use |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111712953 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111712953 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ2S5 | wragge 127565 | 2022-04-28T03:48:36Z | 2022-04-28T03:48:36Z | CONTRIBUTOR | I don't think that'd work for this project. The db is very big, and my aim was to have an environment where researchers could be making use of the data, but be easily able to add corrections to the HTR/OCR extracted data when they came across problems. It's in its immutable (!) form here: https://sydney-stock-exchange-xqtkxtd5za-ts.a.run.app/stock_exchange/stocks |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111708206 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111708206 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ1Iu | simonw 9599 | 2022-04-28T03:38:56Z | 2022-04-28T03:38:56Z | OWNER | In terms of this bug, there are a few potential fixes:
I'm not keen on that last one because it would be frustrating if you couldn't launch Datasette just because you had an old canned query lying around in your metadata file. So I'm leaning towards option 2. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111707384 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111707384 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ074 | simonw 9599 | 2022-04-28T03:36:46Z | 2022-04-28T03:36:56Z | OWNER | A more realistic solution (which I've been using on several of my own projects) is to keep the data itself in GitHub and encourage users to edit it there - using the GitHub web interface to edit YAML files or similar. Needs your users to be comfortable hand-editing YAML though! You can at least guard against critical errors by having CI run tests against their YAML before deploying. I have a dream of building a more friendly web forms interface which edits the YAML back on GitHub for the user, but that's just a concept at the moment. Even more fun would be if a user-friendly form could submit PRs for review without the user having to know what a PR is! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111706519 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111706519 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ0uX | simonw 9599 | 2022-04-28T03:34:49Z | 2022-04-28T03:34:49Z | OWNER | I've wanted to do stuff like that on Cloud Run too. So far I've assumed that it's not feasible, but recently I've been wondering how hard it would be to have a small (like less than 100KB or so) Datasette instance which persists data to a backing GitHub repository such that when it starts up it can pull the latest copy and any time someone edits it can push their changes. I'm still not sure it would work well on Cloud Run due to the uncertainty at what would happen if Cloud Run decided to boot up a second instance - but it's still an interesting thought exercise. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111705323 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111705323 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ0br | wragge 127565 | 2022-04-28T03:32:06Z | 2022-04-28T03:32:06Z | CONTRIBUTOR | Ah, that would be it! I have a core set of data which doesn't change to which I want authorised users to be able to submit corrections. I was going to deal with the persistence issue by just grabbing the user corrections at regular intervals and saving to GitHub. I might need to rethink. Thanks! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111705069 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111705069 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ0Xt | simonw 9599 | 2022-04-28T03:31:33Z | 2022-04-28T03:31:33Z | OWNER | Confirmed - this is a bug where immutable databases fail to show a useful error if you write to them with a canned query. Steps to reproduce:
Now do this instead:
And I'm getting a broken error: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111699175 | https://github.com/simonw/datasette/issues/1727#issuecomment-1111699175 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CQy7n | simonw 9599 | 2022-04-28T03:19:48Z | 2022-04-28T03:20:08Z | OWNER | I ran The area on the right is the threads running the DB queries: Interactive version here: https://static.simonwillison.net/static/2022/datasette-parallel-profile.svg |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1111698307 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111698307 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQyuD | simonw 9599 | 2022-04-28T03:18:02Z | 2022-04-28T03:18:02Z | OWNER | If the behaviour you are seeing is because the database is running in immutable mode then that's a bug - you should get a useful error message instead! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111697985 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111697985 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQypB | simonw 9599 | 2022-04-28T03:17:20Z | 2022-04-28T03:17:20Z | OWNER | How did you deploy to Cloud Run?
That's why I upgraded |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 |
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 >1000