issue_comments
9,947 rows sorted by body descending
This data as json, CSV (advanced)
created_at (date) >30 ✖
- 2021-03-22 66
- 2021-11-19 60
- 2022-11-16 59
- 2020-10-15 52
- 2020-09-22 51
- 2020-10-30 49
- 2022-10-26 47
- 2022-03-21 46
- 2020-12-18 43
- 2022-10-27 42
- 2022-12-13 42
- 2020-06-09 41
- 2020-06-18 41
- 2022-10-25 41
- 2020-10-20 40
- 2022-01-09 40
- 2022-06-14 40
- 2020-05-27 39
- 2021-11-16 39
- 2021-12-16 39
- 2020-12-30 38
- 2023-03-08 37
- 2020-10-09 36
- 2021-11-20 36
- 2022-01-20 36
- 2022-03-19 36
- 2022-12-15 36
- 2020-09-15 34
- 2021-11-29 34
- 2022-11-18 34
- …
id | html_url | issue_url | node_id | user | created_at | updated_at | author_association | body ▲ | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
1270923537 | https://github.com/simonw/datasette/issues/1836#issuecomment-1270923537 | https://api.github.com/repos/simonw/datasette/issues/1836 | IC_kwDOBm6k_c5LwMER | fgregg 536941 | 2022-10-07T00:46:08Z | 2022-10-07T00:46:08Z | CONTRIBUTOR | i thought it was maybe to do with reading through all the files, but that does not seem to be the case if i make a little test file like: ```python # test_read.py import hashlib import sys import pathlib HASH_BLOCK_SIZE = 1024 * 1024 def inspect_hash(path): """Calculate the hash of a database, efficiently.""" m = hashlib.sha256() with path.open("rb") as fp: while True: data = fp.read(HASH_BLOCK_SIZE) if not data: break m.update(data) return m.hexdigest() inspect_hash(pathlib.Path(sys.argv[1])) ``` then a line in the Dockerfile like ```docker RUN python test_read.py nlrb.db && echo "[]" > /etc/inspect.json ``` just produes a layer of `3B` | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | docker image is duplicating db files somehow 1400374908 | |
1258910228 | https://github.com/simonw/datasette/issues/526#issuecomment-1258910228 | https://api.github.com/repos/simonw/datasette/issues/526 | IC_kwDOBm6k_c5LCXIU | fgregg 536941 | 2022-09-27T03:11:07Z | 2022-09-27T03:11:07Z | CONTRIBUTOR | i think this feature would be safe, as its really only the time limit that can, and imo, should protect against long running queries, as it is pretty easy to make very expensive queries that don't return many rows. moving away from `max_returned_rows` will requires some thinking about: 1. memory usage and data flows to handle potentially very large result sets 2. how to avoid rendering tens or hundreds of thousands of [html rows](#1655). | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Stream all results for arbitrary SQL and canned queries 459882902 | |
1258337011 | https://github.com/simonw/datasette/issues/526#issuecomment-1258337011 | https://api.github.com/repos/simonw/datasette/issues/526 | IC_kwDOBm6k_c5LALLz | fgregg 536941 | 2022-09-26T16:49:48Z | 2022-09-26T16:49:48Z | CONTRIBUTOR | i think the smallest change that gets close to what i want is to change the behavior so that `max_returned_rows` is not applied in the `execute` method when we are are asking for a csv of query. there are some infelicities for that approach, but i'll make a PR to make it easier to discuss. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Stream all results for arbitrary SQL and canned queries 459882902 | |
1259718517 | https://github.com/simonw/datasette/issues/526#issuecomment-1259718517 | https://api.github.com/repos/simonw/datasette/issues/526 | IC_kwDOBm6k_c5LFcd1 | fgregg 536941 | 2022-09-27T16:02:51Z | 2022-09-27T16:04:46Z | CONTRIBUTOR | i think that `max_returned_rows` **is** a defense mechanism, just not for connection exhaustion. `max_returned_rows` is a defense mechanism against **memory bombs**. if you are potentially yielding out hundreds of thousands or even millions of rows, you need to be quite careful about data flow to not run out of memory on the server, or on the client. you have a lot of places in your code that are protective of that right now, but `max_returned_rows` acts as the final backstop. so, given that, it makes sense to have removing `max_returned_rows` altogether be a non-goal, but instead allow for for specific codepaths (like streaming csv's) be able to bypass. that could dramatically lower the surface area for a memory-bomb attack. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Stream all results for arbitrary SQL and canned queries 459882902 | |
1049775451 | https://github.com/dogsheep/twitter-to-sqlite/issues/62#issuecomment-1049775451 | https://api.github.com/repos/dogsheep/twitter-to-sqlite/issues/62 | IC_kwDODEm0Qs4-kk1b | miuku 43036882 | 2022-02-24T11:43:31Z | 2022-02-24T11:43:31Z | NONE | i seem to have fixed this issue by applying for [elevated API access](https://developer.twitter.com/en/portal/products/elevated) | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | KeyError: 'created_at' for private accounts? 1088816961 | |
1062450649 | https://github.com/simonw/datasette/issues/1655#issuecomment-1062450649 | https://api.github.com/repos/simonw/datasette/issues/1655 | IC_kwDOBm6k_c4_U7XZ | fgregg 536941 | 2022-03-09T01:10:46Z | 2022-03-09T01:10:46Z | CONTRIBUTOR | i increased the max_returned_row, because I have some scripts that get CSVs from this site, and this makes doing pagination of CSVs less annoying for many cases. i know that's streaming csvs is something you are hoping to address in 1.0. let me know if there's anything i can do to help with that. as for what if anything can be done about the size of the dom, I don't have any ideas right now, but i'll poke around. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | query result page is using 400mb of browser memory 40x size of html page and 400x size of csv data 1163369515 | |
860895838 | https://github.com/dogsheep/github-to-sqlite/issues/64#issuecomment-860895838 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/64 | MDEyOklzc3VlQ29tbWVudDg2MDg5NTgzOA== | khimaros 231498 | 2021-06-14T18:23:21Z | 2021-06-14T21:37:35Z | NONE | i have a basic working version at https://github.com/khimaros/github-to-sqlite this can be tested with `github-to-sqlite events.db khimaros/events` caveat: the GitHub API doesn't seem to provide a complete history of events. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | feature: support "events" 920636216 | |
1008275546 | https://github.com/simonw/sqlite-utils/issues/365#issuecomment-1008275546 | https://api.github.com/repos/simonw/sqlite-utils/issues/365 | IC_kwDOCGYnMM48GRBa | fgregg 536941 | 2022-01-09T11:01:15Z | 2022-01-09T13:37:51Z | CONTRIBUTOR | i don’t want to be such a partisan for analyze, but the query planner deciding *not* to use an index based on information collected by analyze is not necessarily a bug, but could be the correct choice. <s>the original poster in that stack overflow doesn’t say there’s a performance regression </s> | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | create-index should run analyze after creating index 1096558279 | |
1258849766 | https://github.com/simonw/datasette/issues/526#issuecomment-1258849766 | https://api.github.com/repos/simonw/datasette/issues/526 | IC_kwDOBm6k_c5LCIXm | fgregg 536941 | 2022-09-27T01:27:03Z | 2022-09-27T01:27:03Z | CONTRIBUTOR | i agree with that concern! but if i'm understanding the code correctly, `maximum_returned_rows` does not protect against long-running queries in any way. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Stream all results for arbitrary SQL and canned queries 459882902 | |
1007636709 | https://github.com/simonw/sqlite-utils/issues/365#issuecomment-1007636709 | https://api.github.com/repos/simonw/sqlite-utils/issues/365 | IC_kwDOCGYnMM48D1Dl | fgregg 536941 | 2022-01-07T18:28:33Z | 2022-01-07T18:29:43Z | CONTRIBUTOR | i added an index to one table with sqlite-utils, and then a query that used to take about 1 second started taking hundreds of seconds. running analyze got me back to sub second speed. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | create-index should run analyze after creating index 1096558279 | |
541323265 | https://github.com/simonw/datasette/issues/593#issuecomment-541323265 | https://api.github.com/repos/simonw/datasette/issues/593 | MDEyOklzc3VlQ29tbWVudDU0MTMyMzI2NQ== | stonebig 4312421 | 2019-10-12T13:04:54Z | 2019-10-12T13:07:01Z | NONE | hum, well, I fail also with hypercorn on "add_signal_handler()" not implemented directly in Windows, python-3.8 included https://stackoverflow.com/questions/45987985/asyncio-loops-add-signal-handler-in-windows | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | make uvicorn optional dependancy (because not ok on windows python yet) 506183241 | |
343780539 | https://github.com/simonw/datasette/issues/71#issuecomment-343780539 | https://api.github.com/repos/simonw/datasette/issues/71 | MDEyOklzc3VlQ29tbWVudDM0Mzc4MDUzOQ== | simonw 9599 | 2017-11-13T00:13:29Z | 2017-11-13T00:19:46Z | OWNER | https://zeit.co/docs/features/dns is docs now domain add -e datasettes.com I had to set up a custom TXT record on `_now.datasettes.com` to get this to work. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Set up some example datasets on a Cloudflare-backed domain 273278840 | |
526853542 | https://github.com/dogsheep/swarm-to-sqlite/issues/4#issuecomment-526853542 | https://api.github.com/repos/dogsheep/swarm-to-sqlite/issues/4 | MDEyOklzc3VlQ29tbWVudDUyNjg1MzU0Mg== | simonw 9599 | 2019-08-31T18:06:32Z | 2019-08-31T18:06:32Z | MEMBER | https://your-foursquare-oauth-token.glitch.me/ Source code: https://glitch.com/~your-foursquare-oauth-token | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Online tool for getting a Foursquare OAuth token 487601121 | |
1175391899 | https://github.com/simonw/datasette/issues/1767#issuecomment-1175391899 | https://api.github.com/repos/simonw/datasette/issues/1767 | IC_kwDOBm6k_c5GDw6b | simonw 9599 | 2022-07-05T18:53:07Z | 2022-07-05T18:53:07Z | OWNER | https://www.w3.org/2005/10/howto-favicon suggests that it only needs to be able to identify PNG, GIF or ICO. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Ability to set a custom favicon 1294641696 | |
752777744 | https://github.com/simonw/datasette/issues/1165#issuecomment-752777744 | https://api.github.com/repos/simonw/datasette/issues/1165 | MDEyOklzc3VlQ29tbWVudDc1Mjc3Nzc0NA== | simonw 9599 | 2020-12-30T22:30:24Z | 2020-12-30T22:30:24Z | OWNER | https://www.valentinog.com/blog/jest/ was useful. I created a `static/__tests__` folder and added this file as `plugins.spec.js`: ```javascript const datasette = require("../plugins.js"); describe("Datasette Plugins", () => { test("it should have datasette.plugins", () => { expect(!!datasette.plugins).toEqual(true); }); test("registering a plugin should work", () => { datasette.plugins.register("numbers", (a, b) => a + b, ["a", "b"]); var result = datasette.plugins.call("numbers", { a: 1, b: 2 }); expect(result).toEqual([3]); datasette.plugins.register("numbers", (a, b) => a * b, ["a", "b"]); var result2 = datasette.plugins.call("numbers", { a: 1, b: 2 }); expect(result2).toEqual([3, 2]); }); }); ``` In `static/plugins.js` I put this: ```javascript var datasette = datasette || {}; datasette.plugins = (() => { var registry = {}; return { register: (hook, fn, parameters) => { if (!registry[hook]) { registry[hook] = []; } registry[hook].push([fn, parameters]); }, call: (hook, args) => { args = args || {}; var results = []; (registry[hook] || []).forEach(([fn, parameters]) => { /* Call with the correct arguments */ var result = fn.apply(fn, parameters.map(parameter => args[parameter])); if (result !== undefined) { results.push(result); } }); return results; } }; })(); module.exports = datasette; ``` Note the `module.exports` line at the end. Then inside `static/` I ran the following command: ``` % npx jest -c '{}' PASS __tests__/plugins.spec.js Datasette Plugins ✓ it should have datasette.plugins (3 ms) ✓ registering a plugin should work (1 ms) Test Suites: 1 passed, 1 total Tests: 2 passed, 2 total Snapshots: 0 total Time: 1.163 s Ran all test su… | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Mechanism for executing JavaScript unit tests 776635426 | |
688499924 | https://github.com/simonw/sqlite-utils/issues/149#issuecomment-688499924 | https://api.github.com/repos/simonw/sqlite-utils/issues/149 | MDEyOklzc3VlQ29tbWVudDY4ODQ5OTkyNA== | simonw 9599 | 2020-09-07T20:25:40Z | 2020-09-07T20:25:50Z | OWNER | https://www.sqlite.org/pragma.html#pragma_recursive_triggers says: > Prior to SQLite [version 3.6.18](https://www.sqlite.org/releaselog/3_6_18.html) (2009-09-11), recursive triggers were not supported. The behavior of SQLite was always as if this pragma was set to OFF. Support for recursive triggers was added in version 3.6.18 but was initially turned OFF by default, for compatibility. Recursive triggers may be turned on by default in future versions of SQLite. So I think the fix is to turn on `recursive_triggers` globally by default for `sqlite-utils`. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | FTS table with 7 rows has _fts_docsize table with 9,141 rows 695319258 | |
671147148 | https://github.com/simonw/sqlite-utils/issues/132#issuecomment-671147148 | https://api.github.com/repos/simonw/sqlite-utils/issues/132 | MDEyOklzc3VlQ29tbWVudDY3MTE0NzE0OA== | simonw 9599 | 2020-08-10T03:27:50Z | 2020-08-10T03:27:50Z | OWNER | https://www.sqlite.org/pragma.html#pragma_journal_mode lists six modes: DELETE | TRUNCATE | PERSIST | MEMORY | WAL | OFF I'm only going to implement utilities for DELETE (wal-off) and WAL (wal-on) - the other modes look like they're for specialist purposes that I don't need to support. If it turns out I do need them I can add those to `sqlite-utils` later. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Features for enabling and disabling WAL mode 675839512 | |
747807891 | https://github.com/simonw/datasette/issues/1150#issuecomment-747807891 | https://api.github.com/repos/simonw/datasette/issues/1150 | MDEyOklzc3VlQ29tbWVudDc0NzgwNzg5MQ== | simonw 9599 | 2020-12-18T01:23:59Z | 2020-12-18T01:23:59Z | OWNER | https://www.sqlite.org/pragma.html#pragfunc says: > * This feature is experimental and is subject to change. Further documentation will become available if and when the table-valued functions for PRAGMAs feature becomes officially supported. > * The table-valued functions for PRAGMA feature was added in SQLite version 3.16.0 (2017-01-02). Prior versions of SQLite cannot use this feature. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Maintain an in-memory SQLite table of connected databases and their tables 770436876 | |
496665669 | https://github.com/simonw/sqlite-utils/issues/21#issuecomment-496665669 | https://api.github.com/repos/simonw/sqlite-utils/issues/21 | MDEyOklzc3VlQ29tbWVudDQ5NjY2NTY2OQ== | simonw 9599 | 2019-05-28T19:57:47Z | 2019-05-28T19:57:47Z | OWNER | https://www.sqlite.org/lang_insert.html Looks like it's as simple as `INSERT OR IGNORE` - and we already have code related to that here: https://github.com/simonw/sqlite-utils/blob/1e28eeee8ce55ea68eddb228294a1eff6785b497/sqlite_utils/db.py#L498-L501 | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Option to ignore inserts if primary key exists already 448391492 | |
466794369 | https://github.com/simonw/sqlite-utils/issues/14#issuecomment-466794369 | https://api.github.com/repos/simonw/sqlite-utils/issues/14 | MDEyOklzc3VlQ29tbWVudDQ2Njc5NDM2OQ== | simonw 9599 | 2019-02-24T16:59:11Z | 2019-02-24T16:59:43Z | OWNER | https://www.sqlite.org/lang_createindex.html ![image](https://user-images.githubusercontent.com/9599/53302378-72512c80-3812-11e9-8828-46a03d893879.png) May as well support ``--if-not-exists`` as well. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Utilities for adding indexes 413842611 | |
991309759 | https://github.com/simonw/sqlite-utils/issues/354#issuecomment-991309759 | https://api.github.com/repos/simonw/sqlite-utils/issues/354 | IC_kwDOCGYnMM47Fi-_ | simonw 9599 | 2021-12-10T21:33:18Z | 2021-12-10T21:33:18Z | OWNER | https://www.sqlite.org/fts5.html#the_rebuild_command says: > This command first deletes the entire full-text index, then rebuilds it based on the contents of the table or [content table](https://www.sqlite.org/fts5.html#external_content_tables). It is not available with [contentless tables](https://www.sqlite.org/fts5.html#contentless_tables). > > `INSERT INTO ft(ft) VALUES('rebuild');` | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Test failure in test_rebuild_fts 1077243232 | |
696297930 | https://github.com/simonw/datasette/issues/971#issuecomment-696297930 | https://api.github.com/repos/simonw/datasette/issues/971 | MDEyOklzc3VlQ29tbWVudDY5NjI5NzkzMA== | simonw 9599 | 2020-09-21T18:41:47Z | 2020-09-21T18:41:47Z | OWNER | https://www.sqlite.org/dbstat.html > The DBSTAT virtual table is an eponymous virtual table, meaning that is not necessary to run CREATE VIRTUAL TABLE to create an instance of the dbstat virtual table before using it. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Support the dbstat table 705827457 | |
626390822 | https://github.com/simonw/sqlite-utils/issues/110#issuecomment-626390822 | https://api.github.com/repos/simonw/sqlite-utils/issues/110 | MDEyOklzc3VlQ29tbWVudDYyNjM5MDgyMg== | simonw 9599 | 2020-05-10T21:15:28Z | 2020-05-10T21:15:28Z | OWNER | https://www.sqlite.org/datatype3.html#affinity_name_examples suggests that `DECIMAL(10,5)` should be mapped to the SQLite affinity of `NUMERIC` - which I've not worked with before. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Support decimal.Decimal type 613755043 | |
575950911 | https://github.com/simonw/datasette/issues/655#issuecomment-575950911 | https://api.github.com/repos/simonw/datasette/issues/655 | MDEyOklzc3VlQ29tbWVudDU3NTk1MDkxMQ== | simonw 9599 | 2020-01-19T00:13:56Z | 2020-01-19T00:13:56Z | OWNER | https://www.shellcheck.net/ has a workaround for this issue: ![9BA173CA-7F1E-447D-A672-1E02E46CA9B7](https://user-images.githubusercontent.com/9599/72672359-81822f80-3a0d-11ea-81a7-a9a0f1b0c34b.jpeg) | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Copy and paste doesn't work reliably on iPhone for SQL editor 542553350 | |
624278090 | https://github.com/dogsheep/dogsheep-photos/issues/17#issuecomment-624278090 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/17 | MDEyOklzc3VlQ29tbWVudDYyNDI3ODA5MA== | simonw 9599 | 2020-05-05T20:06:01Z | 2020-05-05T20:06:01Z | MEMBER | https://www.python.org/dev/peps/pep-0508/#environment-markers I think I want `sys_platform` of `darwin`. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Only install osxphotos if running on macOS 612860531 | |
619612675 | https://github.com/simonw/datasette/issues/648#issuecomment-619612675 | https://api.github.com/repos/simonw/datasette/issues/648 | MDEyOklzc3VlQ29tbWVudDYxOTYxMjY3NQ== | simonw 9599 | 2020-04-26T19:35:09Z | 2020-04-26T19:35:09Z | OWNER | https://www.niche-museums.com/about now uses this mechanism. It used to be an empty `about.db` database but you can see from https://www.niche-museums.com/-/databases that it's now using the new mechanism. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Mechanism for adding arbitrary pages like /about 534492501 | |
635494730 | https://github.com/simonw/datasette/issues/781#issuecomment-635494730 | https://api.github.com/repos/simonw/datasette/issues/781 | MDEyOklzc3VlQ29tbWVudDYzNTQ5NDczMA== | simonw 9599 | 2020-05-28T17:39:54Z | 2020-05-28T17:39:54Z | OWNER | https://validator.w3.org/feed/check.cgi?url=https%3A%2F%2Fwww.niche-museums.com%2Fbrowse%2Ffeed.atom validates now! | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | request.url and request.scheme should obey force_https_urls config setting 626663119 | |
880257587 | https://github.com/simonw/sqlite-utils/issues/297#issuecomment-880257587 | https://api.github.com/repos/simonw/sqlite-utils/issues/297 | MDEyOklzc3VlQ29tbWVudDg4MDI1NzU4Nw== | simonw 9599 | 2021-07-14T22:44:05Z | 2021-07-14T22:44:05Z | OWNER | https://unix.stackexchange.com/a/642364 suggests you can also use this to import from stdin, like so: sqlite3 -csv $database_file_name ".import '|cat -' $table_name" Here the `sqlite3 -csv` is an alternative to using `.mode csv`. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Option for importing CSV data using the SQLite .import mechanism 944846776 | |
895510773 | https://github.com/simonw/datasette/issues/1426#issuecomment-895510773 | https://api.github.com/repos/simonw/datasette/issues/1426 | IC_kwDOBm6k_c41YGj1 | simonw 9599 | 2021-08-09T20:14:50Z | 2021-08-09T20:19:22Z | OWNER | https://twitter.com/mal/status/1424825895139876870 > True pinging google should be part of the build process on a static site :) That's another aspect of this: if you DO want your site crawled, teaching the `datasette publish` command how to ping Google when a deploy has gone out could be a nice improvement. Annoyingly it looks like you need to configure an auth token of some sort in order to use their API though, which is likely too much hassle to be worth building into Datasette itself: https://developers.google.com/search/apis/indexing-api/v3/using-api ``` curl -X POST https://indexing.googleapis.com/v3/urlNotifications:publish -d '{ "url": "https://careers.google.com/jobs/google/technical-writer", "type": "URL_UPDATED" }' -H "Content-Type: application/json" { "error": { "code": 401, "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", "status": "UNAUTHENTICATED" } } ``` | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Manage /robots.txt in Datasette core, block robots by default 964322136 | |
812935384 | https://github.com/simonw/datasette/issues/1287#issuecomment-812935384 | https://api.github.com/repos/simonw/datasette/issues/1287 | MDEyOklzc3VlQ29tbWVudDgxMjkzNTM4NA== | simonw 9599 | 2021-04-03T22:38:33Z | 2021-04-03T22:38:33Z | OWNER | https://twitter.com/llanga/status/1378431719934681094 looks like I should wait for 3.9.4, out in a few days. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Upgrade to Python 3.9.4 849396758 | |
646686493 | https://github.com/simonw/datasette/issues/849#issuecomment-646686493 | https://api.github.com/repos/simonw/datasette/issues/849 | MDEyOklzc3VlQ29tbWVudDY0NjY4NjQ5Mw== | simonw 9599 | 2020-06-19T15:04:51Z | 2020-06-19T15:04:51Z | OWNER | https://twitter.com/jaffathecake/status/1273983493006077952 concerns what happens to open pull requests - they will automatically close when you remove `master` unless you repoint them to `main` first. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Rename master branch to main 639072811 | |
752773508 | https://github.com/simonw/datasette/issues/983#issuecomment-752773508 | https://api.github.com/repos/simonw/datasette/issues/983 | MDEyOklzc3VlQ29tbWVudDc1Mjc3MzUwOA== | simonw 9599 | 2020-12-30T22:10:08Z | 2020-12-30T22:11:34Z | OWNER | https://twitter.com/dracos/status/1344402639476424706 points out that plugins returning 0 will be ignored. This should probably check for `result !== undefined` instead - knocks the size up to 250. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | JavaScript plugin hooks mechanism similar to pluggy 712260429 | |
646292578 | https://github.com/simonw/datasette/issues/807#issuecomment-646292578 | https://api.github.com/repos/simonw/datasette/issues/807 | MDEyOklzc3VlQ29tbWVudDY0NjI5MjU3OA== | simonw 9599 | 2020-06-18T20:36:22Z | 2020-06-18T20:36:22Z | OWNER | https://travis-ci.com/github/simonw/datasette-render-images/builds/172118541 demonstrates that the alpha/beta conditional is working as intended: <img width="1066" alt="Banners_and_Alerts_and_Build__13_-_simonw_datasette-render-images_-_Travis_CI" src="https://user-images.githubusercontent.com/9599/85069271-b0413500-b168-11ea-8a40-7fe2ff0389b2.png"> | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Ability to ship alpha and beta releases 632843030 | |
404954202 | https://github.com/simonw/datasette/issues/342#issuecomment-404954202 | https://api.github.com/repos/simonw/datasette/issues/342 | MDEyOklzc3VlQ29tbWVudDQwNDk1NDIwMg== | simonw 9599 | 2018-07-13T21:06:53Z | 2018-07-13T21:07:13Z | OWNER | https://timezones-api.now.sh/-/metadata currently shows this: ``` { "databases": { "timezones": { "license": "ODbL", "license_url": "http://opendatacommons.org/licenses/odbl/", "queries": { "by_point": "select tzid\nfrom\n timezones\nwhere\n within(GeomFromText(\u0027POINT(\u0027 || :longitude || \u0027 \u0027 || :latitude || \u0027)\u0027), timezones.Geometry)\n and rowid in (\n SELECT pkid FROM idx_timezones_Geometry\n where xmin \u003c :longitude\n and xmax \u003e :longitude\n and ymin \u003c :latitude\n and ymax \u003e :latitude\n )" }, "source": "timezone-boundary-builder", "source_url": "https://github.com/evansiroky/timezone-boundary-builder", "tables": { "timezones": { "license": "ODbL", "license_url": "http://opendatacommons.org/licenses/odbl/", "sortable_columns": [ "tzid" ], "source": "timezone-boundary-builder", "source_url": "https://github.com/evansiroky/timezone-boundary-builder" } } } }, "license": "ODbL", "license_url": "http://opendatacommons.org/licenses/odbl/", "source": "timezone-boundary-builder", "source_url": "https://github.com/evansiroky/timezone-boundary-builder", "title": "OpenStreetMap Time Zone Boundaries" } ``` We could support the value part of the `"queries"` array optionally being a dictionary with the same set of metadata fields supported for a table, plus a new `"sql"` key to hold the SQL for the query. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Requesting support for query description 341123355 | |
808756366 | https://github.com/simonw/datasette/issues/1278#issuecomment-808756366 | https://api.github.com/repos/simonw/datasette/issues/1278 | MDEyOklzc3VlQ29tbWVudDgwODc1NjM2Ng== | simonw 9599 | 2021-03-27T16:15:47Z | 2021-03-27T16:15:47Z | OWNER | https://timezones-api.datasette.io/ is now up and running on Cloud Run. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | SpatiaLite timezones demo is broken 842416110 | |
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 `version: '318.0.0'` of `google-github-actions/setup-gcloud`. | {"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 | |
850771017 | https://github.com/simonw/sqlite-utils/issues/250#issuecomment-850771017 | https://api.github.com/repos/simonw/sqlite-utils/issues/250 | MDEyOklzc3VlQ29tbWVudDg1MDc3MTAxNw== | simonw 9599 | 2021-05-29T05:04:28Z | 2021-05-29T05:04:28Z | OWNER | https://stackoverflow.com/a/44573867/6083 says: > There is no reason to check if a BOM exists or not, utf-8-sig manages that for you and behaves exactly as utf-8 if the BOM does not exist | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Handle byte order marks (BOMs) in CSV files 838148087 | |
1161857806 | https://github.com/simonw/sqlite-utils/issues/447#issuecomment-1161857806 | https://api.github.com/repos/simonw/sqlite-utils/issues/447 | IC_kwDOCGYnMM5FQIsO | simonw 9599 | 2022-06-21T14:55:51Z | 2022-06-21T14:58:14Z | OWNER | https://stackoverflow.com/a/44379513 suggests that the fix is: .. code-block:: text Or set this in `conf.py`: highlight_language = "none" I like that better - I don't like that all `::` blocks default to being treated as Python code. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Incorrect syntax highlighting in docs CLI reference 1278571700 | |
568269476 | https://github.com/simonw/datasette/issues/651#issuecomment-568269476 | https://api.github.com/repos/simonw/datasette/issues/651 | MDEyOklzc3VlQ29tbWVudDU2ODI2OTQ3Ng== | simonw 9599 | 2019-12-22T14:46:37Z | 2019-12-22T14:47:03Z | OWNER | https://stackoverflow.com/a/43756146 says that an escaping mechanism that works is this one: select * from blah where term match '"bacon" "and" "eggs"' So split on whitespace and then encapsulate each search term in double quotes. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | fts5 syntax error when using punctuation 539590148 | |
718168730 | https://github.com/simonw/sqlite-utils/issues/191#issuecomment-718168730 | https://api.github.com/repos/simonw/sqlite-utils/issues/191 | MDEyOklzc3VlQ29tbWVudDcxODE2ODczMA== | simonw 9599 | 2020-10-28T19:47:20Z | 2020-10-28T19:47:20Z | OWNER | https://stackoverflow.com/a/3931903 looks useful: ```python def trace(*args): def _trace(func): def wrapper(*args, **kwargs): print enter_string func(*args, **kwargs) print exit_string return wrapper if len(args) == 1 and callable(args[0]): # No arguments, this is the decorator # Set default values for the arguments enter_string = 'entering' exit_string = 'exiting' return _trace(args[0]) else: # This is just returning the decorator enter_string, exit_string = args return _trace ``` Can improve that code with `functools.wraps`. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Idea: @db.register_function(deterministic=True) 731740458 | |
881665383 | https://github.com/simonw/datasette/issues/1231#issuecomment-881665383 | https://api.github.com/repos/simonw/datasette/issues/1231 | IC_kwDOBm6k_c40jSVn | simonw 9599 | 2021-07-16T19:21:35Z | 2021-07-16T19:21:35Z | OWNER | https://stackoverflow.com/a/25799871/6083 has a good example of using `asyncio.Lock()`: ```python stuff_lock = asyncio.Lock() async def get_stuff(url): async with stuff_lock: if url in cache: return cache[url] stuff = await aiohttp.request('GET', url) cache[url] = stuff return stuff ``` | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Race condition errors in new refresh_schemas() mechanism 811367257 | |
586662404 | https://github.com/simonw/sqlite-utils/issues/86#issuecomment-586662404 | https://api.github.com/repos/simonw/sqlite-utils/issues/86 | MDEyOklzc3VlQ29tbWVudDU4NjY2MjQwNA== | simonw 9599 | 2020-02-16T02:43:12Z | 2020-02-16T02:43:12Z | OWNER | https://stackoverflow.com/a/22694438 looks like the answer: > When using square brackets, it is not possible to have these characters in the identifier. > > When using double quotes, you can escape them in the name by doubling them: > > `CREATE TABLE "hello ""world"""(key INTEGER PRIMARY KEY);` | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Problem with square bracket in CSV column name 564579430 | |
338797522 | https://github.com/simonw/datasette/issues/4#issuecomment-338797522 | https://api.github.com/repos/simonw/datasette/issues/4 | MDEyOklzc3VlQ29tbWVudDMzODc5NzUyMg== | simonw 9599 | 2017-10-23T21:09:33Z | 2017-10-23T21:09:33Z | OWNER | https://stackoverflow.com/a/18134919/6083 is a good answer about how many characters of the hash are needed to be unique. I say we default to 7 characters, like git does - but allow extras to be configured. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Make URLs immutable 267515836 | |
338524857 | https://github.com/simonw/datasette/issues/5#issuecomment-338524857 | https://api.github.com/repos/simonw/datasette/issues/5 | MDEyOklzc3VlQ29tbWVudDMzODUyNDg1Nw== | simonw 9599 | 2017-10-23T01:20:30Z | 2017-10-23T01:20:30Z | OWNER | https://stackoverflow.com/a/14468878/6083 Looks like I should order by compound primary key and implement cursor-based pagination. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Implement sensible query pagination 267516066 | |
455224327 | https://github.com/simonw/datasette/issues/402#issuecomment-455224327 | https://api.github.com/repos/simonw/datasette/issues/402 | MDEyOklzc3VlQ29tbWVudDQ1NTIyNDMyNw== | simonw 9599 | 2019-01-17T15:56:57Z | 2019-01-17T15:56:57Z | OWNER | https://sqlite.org/security.html has other recommmendations for apps that accept SQLite files from untrusted sources that we should apply. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Use SQLITE_DBCONFIG_DEFENSIVE plus other recommendations from SQLite security docs 400340905 | |
797790017 | https://github.com/simonw/datasette/issues/1259#issuecomment-797790017 | https://api.github.com/repos/simonw/datasette/issues/1259 | MDEyOklzc3VlQ29tbWVudDc5Nzc5MDAxNw== | simonw 9599 | 2021-03-12T22:22:12Z | 2021-03-12T22:22:12Z | OWNER | https://sqlite.org/lang_with.html > Prior to SQLite 3.35.0, all CTEs where treated as if the NOT MATERIALIZED phrase was present It looks like this optimization is completely unavailable on SQLite prior to 3.35.0 (released 12th March 2021). But I could still rewrite the faceting to work in this way, using the exact same SQL - it would just be significantly faster on 3.35.0+ (assuming it's actually faster in practice - would need to benchmark). | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Research using CTEs for faster facet counts 830567275 | |
722057392 | https://github.com/simonw/sqlite-utils/issues/196#issuecomment-722057392 | https://api.github.com/repos/simonw/sqlite-utils/issues/196 | MDEyOklzc3VlQ29tbWVudDcyMjA1NzM5Mg== | simonw 9599 | 2020-11-05T00:55:31Z | 2020-11-05T00:55:51Z | OWNER | https://sqlite.org/lang_keywords.html says: > There are four ways of quoting keywords in SQLite: > > **'keyword'** A keyword in single quotes is a string literal. > **"keyword"** A keyword in double-quotes is an identifier. > **[keyword]** A keyword enclosed in square brackets is an identifier. This is not standard SQL. This quoting mechanism is used by MS Access and SQL Server and is included in SQLite for compatibility. > **\`keyword\`** A keyword enclosed in grave accents (ASCII code 96) is an identifier. This is not standard SQL. This quoting mechanism is used by MySQL and is included in SQLite for compatibility. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Introspect if table is FTS4 or FTS5 736520310 | |
747769830 | https://github.com/simonw/datasette/issues/1151#issuecomment-747769830 | https://api.github.com/repos/simonw/datasette/issues/1151 | MDEyOklzc3VlQ29tbWVudDc0Nzc2OTgzMA== | simonw 9599 | 2020-12-17T23:29:08Z | 2020-12-17T23:29:08Z | OWNER | https://sqlite.org/inmemorydb.html > The database ceases to exist as soon as the database connection is closed. Every :memory: database is distinct from every other. So, opening two database connections each with the filename ":memory:" will create two independent in-memory databases. > > [...] > > The special `":memory:"` filename also works when using URI filenames. For example: > > rc = sqlite3_open("file::memory:", &db); > > [...] > > However, the same in-memory database can be opened by two or more database connections as follows: > > rc = sqlite3_open("file::memory:?cache=shared", &db); > > [...] > If two or more distinct but shareable in-memory databases are needed in a single process, then the mode=memory query parameter can be used with a URI filename to create a named in-memory database: > > rc = sqlite3_open("file:memdb1?mode=memory&cache=shared", &db); | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Database class mechanism for cross-connection in-memory databases 770448622 | |
347049888 | https://github.com/simonw/datasette/issues/124#issuecomment-347049888 | https://api.github.com/repos/simonw/datasette/issues/124 | MDEyOklzc3VlQ29tbWVudDM0NzA0OTg4OA== | simonw 9599 | 2017-11-27T00:01:08Z | 2017-11-27T00:01:08Z | OWNER | https://sqlite.org/c3ref/open.html Is the only documentation I've been able to find of the immutable option: > **immutable**: The immutable parameter is a boolean query parameter that indicates that the database file is stored on read-only media. When immutable is set, SQLite assumes that the database file cannot be changed, even by a process with higher privilege, and so the database is opened read-only and all locking and change detection is disabled. Caution: Setting the immutable property on a database file that does in fact change can result in incorrect query results and/or SQLITE_CORRUPT errors. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Option to open readonly but not immutable 275125805 | |
495823219 | https://github.com/simonw/sqlite-utils/issues/22#issuecomment-495823219 | https://api.github.com/repos/simonw/sqlite-utils/issues/22 | MDEyOklzc3VlQ29tbWVudDQ5NTgyMzIxOQ== | simonw 9599 | 2019-05-25T01:18:27Z | 2019-05-25T01:18:27Z | OWNER | https://sqlite-utils.readthedocs.io/en/latest/changelog.html#v1-0 | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Release notes for 1.0 448395665 | |
1606411508 | https://github.com/simonw/sqlite-utils/issues/235#issuecomment-1606411508 | https://api.github.com/repos/simonw/sqlite-utils/issues/235 | IC_kwDOCGYnMM5fv-T0 | simonw 9599 | 2023-06-26T01:42:10Z | 2023-06-26T01:42:22Z | OWNER | https://sqlite-utils.datasette.io/en/stable/changelog.html#v3-33 - upgrading to `sqlite-utils>=3.33` and then installing both `sqlean.py` and `sqlite-dump` in the same virtual environment as `sqlite-utils` should fix this issue. | {"total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 1, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Extract columns cannot create foreign key relation: sqlite3.OperationalError: table sqlite_master may not be modified 810618495 | |
1229370823 | https://github.com/simonw/sqlite-utils/issues/476#issuecomment-1229370823 | https://api.github.com/repos/simonw/sqlite-utils/issues/476 | IC_kwDOCGYnMM5JRrXH | simonw 9599 | 2022-08-28T04:07:15Z | 2022-08-28T04:07:15Z | OWNER | https://sqlite-utils.datasette.io/en/stable/changelog.html#v3-29 | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Release notes for 3.29 1353196970 | |
1021773056 | https://github.com/simonw/sqlite-utils/issues/387#issuecomment-1021773056 | https://api.github.com/repos/simonw/sqlite-utils/issues/387 | IC_kwDOCGYnMM485wUA | simonw 9599 | 2022-01-26T01:37:17Z | 2022-01-26T01:37:17Z | OWNER | https://sqlite-utils.datasette.io/en/latest/python-api.html#getting-started | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Python library docs should start with a self contained example 1111293050 | |
1033410970 | https://github.com/simonw/sqlite-utils/issues/404#issuecomment-1033410970 | https://api.github.com/repos/simonw/sqlite-utils/issues/404 | IC_kwDOCGYnMM49mJma | simonw 9599 | 2022-02-09T06:56:35Z | 2022-02-09T06:56:35Z | OWNER | https://sqlite-utils.datasette.io/en/latest/cli-reference.html#insert | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Add example of `--convert` to the help for `sqlite-utils insert` 1128120451 | |
1021787822 | https://github.com/simonw/sqlite-utils/issues/388#issuecomment-1021787822 | https://api.github.com/repos/simonw/sqlite-utils/issues/388 | IC_kwDOCGYnMM485z6u | simonw 9599 | 2022-01-26T02:03:25Z | 2022-01-26T02:03:25Z | OWNER | https://sqlite-utils.datasette.io/en/latest/ <img width="1072" alt="image" src="https://user-images.githubusercontent.com/9599/151091309-30b9ba5f-fc32-4320-ad02-35b31ce0cc87.png"> | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Link to stable docs from older versions 1114543475 | |
1065382145 | https://github.com/simonw/sqlite-utils/issues/414#issuecomment-1065382145 | https://api.github.com/repos/simonw/sqlite-utils/issues/414 | IC_kwDOCGYnMM4_gHEB | simonw 9599 | 2022-03-11T18:39:05Z | 2022-03-11T18:39:05Z | OWNER | https://sqlite-utils.datasette.io/en/3.25.1/changelog.html is currently wrong: <img width="971" alt="image" src="https://user-images.githubusercontent.com/9599/157931484-479f04ea-700c-4daf-8b63-10f3d8d40a94.png"> | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | I forgot to include the changelog in the 3.25.1 release 1166731361 | |
1021788260 | https://github.com/simonw/sqlite-utils/issues/388#issuecomment-1021788260 | https://api.github.com/repos/simonw/sqlite-utils/issues/388 | IC_kwDOCGYnMM4850Bk | simonw 9599 | 2022-01-26T02:04:17Z | 2022-01-26T02:04:17Z | OWNER | https://sqlite-utils.datasette.io/en/3.20/ now also shows the version warning banner. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Link to stable docs from older versions 1114543475 | |
1017994925 | https://github.com/simonw/datasette/issues/1608#issuecomment-1017994925 | https://api.github.com/repos/simonw/datasette/issues/1608 | IC_kwDOBm6k_c48rV6t | simonw 9599 | 2022-01-20T22:48:43Z | 2022-01-20T22:54:02Z | OWNER | https://sphinx-version-warning.readthedocs.io/ looks like it can show a banner for "You are looking at v0.36 but you should be looking at 0.40" but doesn't hand the case I need here which is "you are looking at /latest/ but you should be looking at /stable/". Just shipped my fix here: https://docs.datasette.io/en/latest/ <img width="994" alt="image" src="https://user-images.githubusercontent.com/9599/150434433-e2f0d472-77a8-430b-88e5-f22e2c6e8ef0.png"> | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Documentation should clarify /stable/ vs /latest/ 1109808154 | |
896175438 | https://github.com/simonw/sqlite-utils/pull/312#issuecomment-896175438 | https://api.github.com/repos/simonw/sqlite-utils/issues/312 | IC_kwDOCGYnMM41ao1O | simonw 9599 | 2021-08-10T17:28:19Z | 2021-08-10T17:28:19Z | OWNER | https://sphinx-rtd-tutorial.readthedocs.io/en/latest/sphinx-config.html#autodoc-configuration says do something like this at the top of `conf.py`: ```python import os import sys sys.path.insert(0, os.path.abspath('../../simpleble/')) ``` | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Add reference page to documentation using Sphinx autodoc 965143346 | |
339420462 | https://github.com/simonw/datasette/issues/16#issuecomment-339420462 | https://api.github.com/repos/simonw/datasette/issues/16 | MDEyOklzc3VlQ29tbWVudDMzOTQyMDQ2Mg== | simonw 9599 | 2017-10-25T18:10:51Z | 2017-10-25T18:10:51Z | OWNER | https://sitesforprofit.com/responsive-table-plugins-and-patterns has some useful links. I really like the pattern from https://css-tricks.com/responsive-data-tables/ /* Max width before this PARTICULAR table gets nasty This query will take effect for any screen smaller than 760px and also iPads specifically. */ @media only screen and (max-width: 760px), (min-device-width: 768px) and (max-device-width: 1024px) { /* Force table to not be like tables anymore */ table, thead, tbody, th, td, tr { display: block; } /* Hide table headers (but not display: none;, for accessibility) */ thead tr { position: absolute; top: -9999px; left: -9999px; } tr { border: 1px solid #ccc; } td { /* Behave like a "row" */ border: none; border-bottom: 1px solid #eee; position: relative; padding-left: 50%; } td:before { /* Now like a table header */ position: absolute; /* Top/left values mimic padding */ top: 6px; left: 6px; width: 45%; padding-right: 10px; white-space: nowrap; } /* Label the data */ td:nth-of-type(1):before { content: "First Name"; } td:nth-of-type(2):before { content: "Last Name"; } td:nth-of-type(3):before { content: "Job Title"; } td:nth-of-type(4):before { content: "Favorite Color"; } td:nth-of-type(5):before { content: "Wars of Trek?"; } td:nth-of-type(6):before { content: "Porn Name"; } td:nth-of-type(7):before { content: "Date of Birth"; } td:nth-of-type(8):before { content: "Dream Vacation City"; } td:nth-of-type(9):before { content: "GPA"; } td:nth-of-type(10):before { conten… | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Default HTML/CSS needs to look reasonable and be responsive 267726219 | |
652681996 | https://github.com/simonw/datasette/issues/885#issuecomment-652681996 | https://api.github.com/repos/simonw/datasette/issues/885 | MDEyOklzc3VlQ29tbWVudDY1MjY4MTk5Ng== | simonw 9599 | 2020-07-01T22:44:47Z | 2020-07-01T22:44:47Z | OWNER | https://simonwillison.net/2020/Jul/1/datasette-045/ | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Blog entry about the release 649373451 | |
504879834 | https://github.com/simonw/datasette/issues/124#issuecomment-504879834 | https://api.github.com/repos/simonw/datasette/issues/124 | MDEyOklzc3VlQ29tbWVudDUwNDg3OTgzNA== | simonw 9599 | 2019-06-24T06:43:46Z | 2019-06-24T06:43:46Z | OWNER | https://simonwillison.net/2019/May/19/datasette-0-28/ | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Option to open readonly but not immutable 275125805 | |
348248957 | https://github.com/simonw/datasette/issues/126#issuecomment-348248957 | https://api.github.com/repos/simonw/datasette/issues/126 | MDEyOklzc3VlQ29tbWVudDM0ODI0ODk1Nw== | simonw 9599 | 2017-11-30T16:49:24Z | 2017-11-30T16:49:24Z | OWNER | https://simonwillison.net/2017/Nov/25/new-in-datasette/ | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Blog entry announcing foreign key support 275135535 | |
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 | |
713185173 | https://github.com/simonw/datasette/issues/1036#issuecomment-713185173 | https://api.github.com/repos/simonw/datasette/issues/1036 | MDEyOklzc3VlQ29tbWVudDcxMzE4NTE3Mw== | simonw 9599 | 2020-10-20T22:53:41Z | 2020-10-20T22:53:41Z | OWNER | https://security.stackexchange.com/questions/12896/does-x-content-type-options-really-prevent-content-sniffing-attacks says: > In Tangled Web Michal Zalewski says: > > > Refrain from using Content-Type: application/octet-stream and use application/binary instead, especially for unknown document types. Refrain from returning Content-Type: text/plain. > > > > For example, any code-hosting platform must exercise caution when returning executables or source archives as application/octet-stream, because there is a risk they may be misinterpreted as HTML and displayed inline. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Make it possible to download BLOB data from the Datasette UI 725996507 | |
1537513912 | https://github.com/simonw/sqlite-utils/issues/540#issuecomment-1537513912 | https://api.github.com/repos/simonw/sqlite-utils/issues/540 | IC_kwDOCGYnMM5bpJm4 | simonw 9599 | 2023-05-07T18:39:29Z | 2023-05-07T18:39:29Z | OWNER | https://readthedocs.org/projects/sqlite-utils/builds/20513034/ said: > Problem in your project's configuration. Invalid "python.version": expected one of (2, 2.7, 3, 3.5, 3.6, 3.7, 3.8, pypy3.5), got 3.11 | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | sphinx.builders.linkcheck build error 1699184583 | |
733221359 | https://github.com/simonw/datasette/issues/1106#issuecomment-733221359 | https://api.github.com/repos/simonw/datasette/issues/1106 | MDEyOklzc3VlQ29tbWVudDczMzIyMTM1OQ== | simonw 9599 | 2020-11-24T20:40:21Z | 2020-11-24T20:40:21Z | OWNER | https://readthedocs.org/dashboard/datasette/redirects/ | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Rebrand and redirect config.rst as settings.rst 749983857 | |
645063058 | https://github.com/simonw/datasette/issues/850#issuecomment-645063058 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA2MzA1OA== | simonw 9599 | 2020-06-16T23:32:57Z | 2020-06-16T23:32:57Z | OWNER | https://q7lymja3sj.execute-api.us-east-1.amazonaws.com/Prod/hello/ is now giving me a 500 internal server error. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645058947 | https://github.com/simonw/datasette/issues/850#issuecomment-645058947 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA1ODk0Nw== | simonw 9599 | 2020-06-16T23:18:18Z | 2020-06-16T23:18:18Z | OWNER | https://q7lymja3sj.execute-api.us-east-1.amazonaws.com/Prod/hello/ That's a pretty ugly URL. I'm not sure how to get rid of the `/Prod/` prefix on it. Might have to use the `base_url` setting to get something working: https://datasette.readthedocs.io/en/stable/config.html#base-url | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
803694359 | https://github.com/simonw/datasette/issues/1249#issuecomment-803694359 | https://api.github.com/repos/simonw/datasette/issues/1249 | MDEyOklzc3VlQ29tbWVudDgwMzY5NDM1OQ== | simonw 9599 | 2021-03-22T00:45:47Z | 2021-03-22T00:45:47Z | OWNER | https://pythonspeed.com/articles/base-image-python-docker-images/ suggests using `python:3.9-slim-buster` or `ubuntu:20.04` - but 20.04 is focal which still has SpatiaLite `4.3.0a-6build1` - It's `20.10` that has 5.0: https://packages.ubuntu.com/groovy/libspatialite-dev | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Updated Dockerfile with SpatiaLite version 5.0 824064069 | |
1000673444 | https://github.com/simonw/datasette/issues/1577#issuecomment-1000673444 | https://api.github.com/repos/simonw/datasette/issues/1577 | IC_kwDOBm6k_c47pRCk | simonw 9599 | 2021-12-24T06:08:58Z | 2021-12-24T06:08:58Z | OWNER | https://pypistats.org/packages/datasette shows a breakdown of downloads by Python version: <img width="986" alt="image" src="https://user-images.githubusercontent.com/9599/147323253-1ee22d93-3be2-472b-8ead-495d925958e5.png"> It looks like on a recent day I had 4,071 downloads from Python 3.7... and just 2 downloads from Python 3.6! | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Drop support for Python 3.6 1087913724 | |
1017108960 | https://github.com/simonw/datasette/issues/1606#issuecomment-1017108960 | https://api.github.com/repos/simonw/datasette/issues/1606 | IC_kwDOBm6k_c48n9ng | simonw 9599 | 2022-01-20T04:26:36Z | 2022-01-20T04:26:36Z | OWNER | https://pypistats.org/packages/datasette shows Python 3.6 is 0.24% of Datasette downloads. <img width="941" alt="image" src="https://user-images.githubusercontent.com/9599/150273301-18ec2ec8-f9ce-49a3-b57d-e74826a5c7ae.png"> | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Tests failing against Python 3.6 1108846067 | |
1331207334 | https://github.com/simonw/datasette/issues/1913#issuecomment-1331207334 | https://api.github.com/repos/simonw/datasette/issues/1913 | IC_kwDOBm6k_c5PWJym | simonw 9599 | 2022-11-29T19:50:37Z | 2022-11-29T19:50:37Z | OWNER | https://pypi.org/project/setuptools/65.6.3/ came out most recently - 23rd November (wheel and twine are older). No search results at all for that error message. This is very weird, I would have expected it to have been reported by now. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Release Datasette 1.0a0 1468603401 | |
1331208206 | https://github.com/simonw/datasette/issues/1913#issuecomment-1331208206 | https://api.github.com/repos/simonw/datasette/issues/1913 | IC_kwDOBm6k_c5PWKAO | simonw 9599 | 2022-11-29T19:51:31Z | 2022-11-29T19:51:31Z | OWNER | https://pypi.org/project/pkginfo/#history - 1.9.0 came out 39 minutes ago! | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Release Datasette 1.0a0 1468603401 | |
631229409 | https://github.com/dogsheep/dogsheep-photos/issues/26#issuecomment-631229409 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/26 | MDEyOklzc3VlQ29tbWVudDYzMTIyOTQwOQ== | simonw 9599 | 2020-05-20T04:30:40Z | 2020-05-20T04:30:40Z | MEMBER | https://pypi.org/project/photos-to-sqlite/ now links to dogsheep-photos. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Rename project to dogsheep-photos 621444763 | |
631229485 | https://github.com/dogsheep/dogsheep-photos/issues/26#issuecomment-631229485 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/26 | MDEyOklzc3VlQ29tbWVudDYzMTIyOTQ4NQ== | simonw 9599 | 2020-05-20T04:31:02Z | 2020-05-20T04:31:02Z | MEMBER | https://pypi.org/project/dogsheep-photos/ is live. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Rename project to dogsheep-photos 621444763 | |
1356652057 | https://github.com/simonw/datasette/issues/1963#issuecomment-1356652057 | https://api.github.com/repos/simonw/datasette/issues/1963 | IC_kwDOBm6k_c5Q3N4Z | simonw 9599 | 2022-12-18T03:23:22Z | 2022-12-18T03:23:22Z | OWNER | https://pypi.org/project/datasette/0.63.3/ is released. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | 0.63.3 bugfix release 1501713288 | |
646320237 | https://github.com/simonw/datasette/issues/807#issuecomment-646320237 | https://api.github.com/repos/simonw/datasette/issues/807 | MDEyOklzc3VlQ29tbWVudDY0NjMyMDIzNw== | simonw 9599 | 2020-06-18T21:41:16Z | 2020-06-18T21:41:16Z | OWNER | https://pypi.org/project/datasette/0.45a0/ is the release on PyPI. And in a fresh virtual environment: ``` $ pip install datasette==0.45a0 ... $ datasette --version datasette, version 0.45a0 ``` But running `pip install datasette` still gets 0.44. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Ability to ship alpha and beta releases 632843030 | |
646293670 | https://github.com/simonw/datasette/issues/807#issuecomment-646293670 | https://api.github.com/repos/simonw/datasette/issues/807 | MDEyOklzc3VlQ29tbWVudDY0NjI5MzY3MA== | simonw 9599 | 2020-06-18T20:38:50Z | 2020-06-18T20:38:50Z | OWNER | https://pypi.org/project/datasette-render-images/#history worked: <img width="904" alt="Banners_and_Alerts_and_datasette-render-images_·_PyPI" src="https://user-images.githubusercontent.com/9599/85069459-02825600-b169-11ea-9747-cb24e26888d1.png"> I'm now confident enough that I'll make these changes and ship an alpha of Datasette itself. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Ability to ship alpha and beta releases 632843030 | |
615993178 | https://github.com/dogsheep/dogsheep-photos/issues/7#issuecomment-615993178 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/7 | MDEyOklzc3VlQ29tbWVudDYxNTk5MzE3OA== | simonw 9599 | 2020-04-19T00:37:08Z | 2020-04-19T00:37:08Z | MEMBER | https://pypi.org/project/ImageHash/ Is one option. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Integrate image content hashing 602585497 | |
609889528 | https://github.com/simonw/datasette/issues/717#issuecomment-609889528 | https://api.github.com/repos/simonw/datasette/issues/717 | MDEyOklzc3VlQ29tbWVudDYwOTg4OTUyOA== | simonw 9599 | 2020-04-06T16:11:07Z | 2020-04-06T16:11:07Z | OWNER | https://now-2-datasette-e4l4whc9f.now.sh/-/versions ```json { "python": { "version": "3.6.10", "full": "3.6.10 (default, Mar 10 2020, 22:54:43) \n[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)]" }, "datasette": { "version": "0.39" }, "asgi": "3.0", "uvicorn": "0.11.3", "sqlite": { "version": "3.7.17", "fts_versions": [ "FTS4", "FTS3" ], "extensions": {}, "compile_options": [ "DISABLE_DIRSYNC", "ENABLE_COLUMN_METADATA", "ENABLE_FTS3", "ENABLE_RTREE", "ENABLE_UNLOCK_NOTIFY", "SECURE_DELETE", "TEMP_STORE=1", "THREADSAFE=1" ] } } ``` SQLite 3.7.17 is from May 2013: http://www.sqlite.org/releaselog/3_7_17.html - and there's no FTS5 (but we do get FTS4). So the Now v2 version will be a bit limited (no support for table names containing `/` and an ancient SQLite version without FTS5) - but it's definitely enough for a `datasette-publish-now` plugin. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | See if I can get Datasette working on Zeit Now v2 594189527 | |
609883545 | https://github.com/simonw/datasette/issues/717#issuecomment-609883545 | https://api.github.com/repos/simonw/datasette/issues/717 | MDEyOklzc3VlQ29tbWVudDYwOTg4MzU0NQ== | simonw 9599 | 2020-04-06T16:00:41Z | 2020-04-06T16:03:21Z | OWNER | https://now-2-datasette-e4l4whc9f.now.sh/ - first proof of concept! It's just four files right now, all in the same directory and deployed by running `now`. `now.json` ```json { "version": 2, "builds": [ { "src": "index.py", "use": "@now/python" } ], "routes": [ { "src": "(.*)", "dest": "index.py" } ] } ``` `requirements.txt`: ``` datasette datasette-debug-asgi ``` `index.py`: ```python from datasette.app import Datasette app = Datasette(["fixtures.db"]).app() ``` Plus a copy of the standard `fixtures.db` file. It almost entirely works! Just one bug so far: https://now-2-datasette-e4l4whc9f.now.sh/fixtures/table%2Fwith%2Fslashes.csv returns a 404 https://latest.datasette.io/fixtures/table%2Fwith%2Fslashes.csv does not. Plugins work too - here's the output from `datasette-debug-asgi`: https://now-2-datasette-e4l4whc9f.now.sh/-/asgi-scope | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | See if I can get Datasette working on Zeit Now v2 594189527 | |
892957281 | https://github.com/simonw/sqlite-utils/issues/308#issuecomment-892957281 | https://api.github.com/repos/simonw/sqlite-utils/issues/308 | IC_kwDOCGYnMM41OXJh | simonw 9599 | 2021-08-04T20:37:00Z | 2021-08-04T20:37:00Z | OWNER | https://mybinder.org/v2/gh/simonw/sqlite-utils/main?filepath=docs%2Ftutorial.ipynb | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Add an interactive tutorial as a Jupyter notebook 961008507 | |
719053669 | https://github.com/simonw/datasette/issues/1051#issuecomment-719053669 | https://api.github.com/repos/simonw/datasette/issues/1051 | MDEyOklzc3VlQ29tbWVudDcxOTA1MzY2OQ== | simonw 9599 | 2020-10-29T22:12:16Z | 2020-10-29T22:12:16Z | OWNER | https://latest.datasette.io/fixtures?sql=select+rowid%2C+data+from+binary_data+order+by+rowid+limit+101 now looks like this: <img width="816" alt="fixtures__select_rowid__data_from_binary_data_order_by_rowid_limit_101_and_understanding_Google_auths_-_for_your_information" src="https://user-images.githubusercontent.com/9599/97638086-15e7dc80-19f9-11eb-90a9-686e012c4db9.png"> | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Better display of binary data on arbitrary query results page 729096595 | |
813480043 | https://github.com/simonw/datasette/issues/1293#issuecomment-813480043 | https://api.github.com/repos/simonw/datasette/issues/1293 | MDEyOklzc3VlQ29tbWVudDgxMzQ4MDA0Mw== | simonw 9599 | 2021-04-05T16:16:17Z | 2021-04-05T16:16:17Z | OWNER | https://latest.datasette.io/fixtures?sql=explain+select+*+from+paginated_view will be an interesting test query - because `paginated_view` is defined like this: ```sql CREATE VIEW paginated_view AS SELECT content, '- ' || content || ' -' AS content_extra FROM no_primary_key; ``` So this will help test that the mechanism isn't confused by output columns that are created through a concatenation expression. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Show column metadata plus links for foreign keys on arbitrary query results 849978964 | |
1214407104 | https://github.com/simonw/datasette/issues/1773#issuecomment-1214407104 | https://api.github.com/repos/simonw/datasette/issues/1773 | IC_kwDOBm6k_c5IYmHA | simonw 9599 | 2022-08-14T16:06:25Z | 2022-08-14T16:06:25Z | OWNER | https://latest.datasette.io/fixtures/sortable?_sort_desc=sortable&_col=sortable_with_nulls works now. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | 500 error if sorted by a column not in the ?_col= list 1318907685 | |
721926827 | https://github.com/simonw/datasette/issues/1083#issuecomment-721926827 | https://api.github.com/repos/simonw/datasette/issues/1083 | MDEyOklzc3VlQ29tbWVudDcyMTkyNjgyNw== | simonw 9599 | 2020-11-04T19:23:42Z | 2020-11-04T19:23:42Z | OWNER | https://latest.datasette.io/fixtures/sortable#export has advanced export options, but https://latest.datasette.io/fixtures?sql=select+pk1%2C+pk2%2C+content%2C+sortable%2C+sortable_with_nulls%2C+sortable_with_nulls_2%2C+text+from+sortable+order+by+pk1%2C+pk2+limit+101 does not. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Advanced CSV export for arbitrary queries 736365306 | |
614282980 | https://github.com/simonw/datasette/issues/727#issuecomment-614282980 | https://api.github.com/repos/simonw/datasette/issues/727 | MDEyOklzc3VlQ29tbWVudDYxNDI4Mjk4MA== | simonw 9599 | 2020-04-15T21:13:00Z | 2020-04-15T21:13:00Z | OWNER | https://latest.datasette.io/fixtures/neighborhood_search now has the following: ```html <body class="query db-fixtures query-neighborhood_search"> ``` | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Custom CSS class on body for styling canned queries 600583271 | |
483458569 | https://github.com/simonw/datasette/issues/288#issuecomment-483458569 | https://api.github.com/repos/simonw/datasette/issues/288 | MDEyOklzc3VlQ29tbWVudDQ4MzQ1ODU2OQ== | simonw 9599 | 2019-04-15T23:45:04Z | 2019-04-15T23:45:04Z | OWNER | https://latest.datasette.io/fixtures/facetable?tags__arraycontains=tag1&tags__arraycontains=tag2 now works. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Support multiple filters of the same type 326767626 | |
974913180 | https://github.com/simonw/datasette/issues/1525#issuecomment-974913180 | https://api.github.com/repos/simonw/datasette/issues/1525 | IC_kwDOBm6k_c46G_6c | simonw 9599 | 2021-11-21T22:57:08Z | 2021-11-21T22:57:08Z | OWNER | https://latest.datasette.io/fixtures/facetable can't quite demonstrate the bug because `_neighborhood` isn't a foreign key - I should rename `city_id` to `_city_id`. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | "Links from other tables" broken for columns starting with underscore 1059509927 | |
636370064 | https://github.com/simonw/datasette/issues/782#issuecomment-636370064 | https://api.github.com/repos/simonw/datasette/issues/782 | MDEyOklzc3VlQ29tbWVudDYzNjM3MDA2NA== | simonw 9599 | 2020-05-30T18:51:19Z | 2020-05-30T18:51:19Z | OWNER | https://latest.datasette.io/fixtures/compound_three_primary_keys.json?_size=2&_shape=array returns this: ```json [ { "pk1": "a", "pk2": "a", "pk3": "a", "content": "a-a-a" }, { "pk1": "a", "pk2": "a", "pk3": "b", "content": "a-a-b" } ] ``` There's one big problem with this format: it doesn't provide any space for pagination information. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Redesign default .json format 627794879 | |
1368269283 | https://github.com/simonw/datasette/issues/782#issuecomment-1368269283 | https://api.github.com/repos/simonw/datasette/issues/782 | IC_kwDOBm6k_c5RjiHj | simonw 9599 | 2022-12-31T19:29:45Z | 2022-12-31T19:29:45Z | OWNER | https://latest.datasette.io/fixtures/compound_three_primary_keys.json?_size=2 now shows the new default: ```json { "database": "fixtures", "table": "compound_three_primary_keys", "is_view": false, "human_description_en": "", "rows": [ { "pk1": "a", "pk2": "a", "pk3": "a", "content": "a-a-a" }, { "pk1": "a", "pk2": "a", "pk3": "b", "content": "a-a-b" } ], ``` The old format can be had like this: https://latest.datasette.io/fixtures/compound_three_primary_keys.json?_size=2&_shape=arrays | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Redesign default .json format 627794879 | |
1368285442 | https://github.com/simonw/datasette/issues/782#issuecomment-1368285442 | https://api.github.com/repos/simonw/datasette/issues/782 | IC_kwDOBm6k_c5RjmEC | simonw 9599 | 2022-12-31T22:02:16Z | 2022-12-31T22:02:16Z | OWNER | https://latest.datasette.io/fixtures/compound_three_primary_keys.json?_size=2 now returns `count`: ```json { "database": "fixtures", "table": "compound_three_primary_keys", "is_view": false, "human_description_en": "", "rows": [ { "pk1": "a", "pk2": "a", "pk3": "a", "content": "a-a-a" }, { "pk1": "a", "pk2": "a", "pk3": "b", "content": "a-a-b" } ], "truncated": false, "count": 1001, ``` | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Redesign default .json format 627794879 | |
508858510 | https://github.com/simonw/datasette/issues/540#issuecomment-508858510 | https://api.github.com/repos/simonw/datasette/issues/540 | MDEyOklzc3VlQ29tbWVudDUwODg1ODUxMA== | simonw 9599 | 2019-07-05T20:43:20Z | 2019-07-05T20:43:20Z | OWNER | https://latest.datasette.io/fixtures/attraction_characteristic/1 now looks like this: <img width="790" alt="fixtures__attraction_characteristic" src="https://user-images.githubusercontent.com/9599/60744452-d60b0500-9f2a-11e9-8ac6-b35aaaf8120c.png"> | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Add a universal navigation bar which can be modified by plugins 464449570 | |
1546117538 | https://github.com/simonw/datasette/issues/2073#issuecomment-1546117538 | https://api.github.com/repos/simonw/datasette/issues/2073 | IC_kwDOBm6k_c5cJ-Gi | simonw 9599 | 2023-05-12T18:21:38Z | 2023-05-12T18:21:38Z | OWNER | https://latest.datasette.io/fixtures doesn't currently have a view with any integer columns in it, making this bug harder to demonstrate there. I can't replicate the bug using https://datasette.io/content/plugins?_facet=stargazers_count&stargazers_count=3 - I would expect that not to work correctly. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Faceting doesn't work against integer columns in views 1708030220 | |
749771231 | https://github.com/simonw/datasette/issues/1099#issuecomment-749771231 | https://api.github.com/repos/simonw/datasette/issues/1099 | MDEyOklzc3VlQ29tbWVudDc0OTc3MTIzMQ== | simonw 9599 | 2020-12-22T20:54:25Z | 2020-12-22T20:54:25Z | OWNER | https://latest.datasette.io/_internal/foreign_keys (use https://latest.datasette.io/login-as-root first) is now a compound foreign key table: ```sql CREATE TABLE foreign_keys ( "database_name" TEXT, "table_name" TEXT, "id" INTEGER, "seq" INTEGER, "table" TEXT, "from" TEXT, "to" TEXT, "on_update" TEXT, "on_delete" TEXT, "match" TEXT, PRIMARY KEY (database_name, table_name, id, seq), FOREIGN KEY (database_name) REFERENCES databases(database_name), FOREIGN KEY (database_name, table_name) REFERENCES tables(database_name, table_name) ); ``` Currently the `database_name` column becomes a link (because it's a single foreign key) but the `table_name` one remains a non-link: <img width="1079" alt="_internal__foreign_keys__24_rows" src="https://user-images.githubusercontent.com/9599/102932110-87ba3080-4454-11eb-9ad5-b70a65129588.png"> My original idea for compound foreign keys was to turn both of those columns into links, but that doesn't fit here because `database_name` is already part of a different foreign key. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Support linking to compound foreign keys 743371103 | |
1368268233 | https://github.com/simonw/datasette/issues/1970#issuecomment-1368268233 | https://api.github.com/repos/simonw/datasette/issues/1970 | IC_kwDOBm6k_c5Rjh3J | simonw 9599 | 2022-12-31T19:22:58Z | 2022-12-31T19:22:58Z | OWNER | https://latest.datasette.io/_internal/databases shows the fix now: <img width="542" alt="image" src="https://user-images.githubusercontent.com/9599/210153822-11a94a8e-9049-42e9-89b5-c709cde63467.png"> | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Path "None" in _internal database table 1515182998 | |
1288340476 | https://github.com/simonw/datasette/issues/1848#issuecomment-1288340476 | https://api.github.com/repos/simonw/datasette/issues/1848 | IC_kwDOBm6k_c5MyoP8 | simonw 9599 | 2022-10-24T02:50:29Z | 2022-10-24T02:50:29Z | OWNER | https://latest.datasette.io/_internal now looks like this: <img width="771" alt="image" src="https://user-images.githubusercontent.com/9599/197439086-25d02a4f-3831-42bc-8097-c487290d7c32.png"> | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Private database page should show padlock on every table 1420090659 | |
634950200 | https://github.com/simonw/datasette/issues/758#issuecomment-634950200 | https://api.github.com/repos/simonw/datasette/issues/758 | MDEyOklzc3VlQ29tbWVudDYzNDk1MDIwMA== | simonw 9599 | 2020-05-27T21:26:37Z | 2020-05-27T21:26:37Z | OWNER | https://latest.datasette.io/.json currently returns: ``` { "fixtures": { "name": "fixtures", "hash": "87b3f2c55dfb81ff1452dd306c2623fa5550b90982cfa32bad404c4d8bbedde2", "color": "87b3f2", "path": "/fixtures", "tables_and_views_truncated": [ ``` I published `fixtures.db` here like this: datasette publish cloudrun fixtures.db --service datasette-hash-urls --extra-options '--config hash_urls:1' https://datasette-hash-urls-j7hipcg4aq-uw.a.run.app/.json ``` { "fixtures": { "name": "fixtures", "hash": "bda7daa889c23f9a8f06e46d7d280dd423c76275e9593c4c1cad7c53b19032fe", "color": "bda7da", "path": "/fixtures-bda7daa", ``` | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Question: Access to immutable database-path 612382643 |
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]);
updated_at (date) >30 ✖