github
id | node_id | number | title | user | state | locked | assignee | milestone | comments | created_at | updated_at | closed_at | author_association | pull_request | body | repo | type | active_lock_reason | performed_via_github_app | reactions | draft | state_reason |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1874255116 | I_kwDOBm6k_c5vtt0M | 2164 | Ability to only load a specific list of plugins | 9599 | closed | 0 | 1 | 2023-08-30T19:33:41Z | 2023-09-08T04:35:46Z | 2023-08-30T22:12:27Z | OWNER | I'm going to try and get this working through an environment variable, so that you can start Datasette and it will only load a subset of plugins including those that use the `register_commands()` hook. Initial research on this: - https://github.com/pytest-dev/pluggy/issues/422 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/2164/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1292370469 | I_kwDOBm6k_c5NCAIl | 1765 | Document plugins providing new plugin hook- | 9599 | closed | 0 | 1 | 2022-07-03T17:05:14Z | 2023-08-31T23:08:24Z | 2023-08-31T23:06:31Z | OWNER | I've used this pattern twice now: https://til.simonwillison.net/datasette/register-new-plugin-hooks - in `datasette-graphql` and `datasette-low-disk-space-hook`. I should describe the pattern on https://docs.datasette.io/en/stable/writing_plugins.html | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1765/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
742041667 | MDU6SXNzdWU3NDIwNDE2Njc= | 1092 | Make cascading permission checks available to plugins | 9599 | closed | 0 | 1 | 2020-11-13T01:02:55Z | 2023-08-30T22:17:42Z | 2023-08-30T22:17:41Z | OWNER | The `BaseView` class has a method for cascading permission checks, but it's not easily accessible to plugins. https://github.com/simonw/datasette/blob/5eb8e9bf250b26e30b017d39a392c33973997656/datasette/views/base.py#L75-L99 This leaves plugins like `datasette-graphql` having to implement their own versions of this logic, which is bad: https://github.com/simonw/datasette-graphql/issues/65 > First check `view-database` - if that says `False` then disallow access, if it says `True` then allow access. If it says `None` check `view-instance`. This should become a supported API that plugins are encouraged to use. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1092/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1872043170 | I_kwDOBm6k_c5vlRyi | 2163 | Rename core_X to catalog_X in the internals | 9599 | closed | 0 | 1 | 2023-08-29T16:45:00Z | 2023-08-29T17:01:31Z | 2023-08-29T17:01:31Z | OWNER | Discussed with Alex this morning. We think the American spelling is fine here (it's shorter than `catalogue`) and that it's a slightly less lazy name than `core_`. Follows: - https://github.com/simonw/datasette/issues/2157 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/2163/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1847201263 | I_kwDOBm6k_c5uGg3v | 2140 | Remove all remaining documentation instances of '$ ' | 9599 | closed | 0 | 1 | 2023-08-11T17:42:13Z | 2023-08-11T17:52:25Z | 2023-08-11T17:45:00Z | OWNER | For example this: https://github.com/simonw/datasette/blob/4535568f2ce907af646304d0ebce2500ebd55677/docs/authentication.rst?plain=1#L33-L35 The problem with that `$ ` prefix is that it prevents users from copying and pasting the raw command. <img width="773" alt="image" src="https://github.com/simonw/datasette/assets/9599/9414437d-1eb9-416b-ae51-0f4f5d665b80"> https://docs.datasette.io/en/stable/authentication.html#using-the-root-actor | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/2140/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1560662739 | I_kwDOBm6k_c5dBdLT | 2007 | `render_cell()` hook should take an optional `request` argument | 9599 | closed | 0 | 1 | 2023-01-28T03:13:00Z | 2023-08-09T17:15:03Z | 2023-01-28T03:34:26Z | OWNER | From Discord: https://discordapp.com/channels/823971286308356157/996877076982415491/1068227071156965486 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/2007/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1841343173 | I_kwDOBm6k_c5twKrF | 2132 | Get form fields on query page working again | 9599 | closed | 0 | 9700784 | 1 | 2023-08-08T13:39:05Z | 2023-08-08T13:45:10Z | 2023-08-08T13:45:09Z | OWNER | Caused by: - #2112 https://latest.datasette.io/fixtures?sql=select+pk1%2C+pk2%2C+pk3%2C+content+from+compound_three_primary_keys+where+%22pk1%22+%3D+%3Ap0+order+by+pk1%2C+pk2%2C+pk3+limit+101&p0=b <img width="1100" alt="image" src="https://github.com/simonw/datasette/assets/9599/7ca20120-923b-4b7d-988d-cdb0e7c30afb"> The `:p0` form field is missing. Submitting the form results in this error: <img width="687" alt="image" src="https://github.com/simonw/datasette/assets/9599/f900ee16-71fd-42aa-86d7-0058af8457aa"> | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/2132/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1822982933 | I_kwDOBm6k_c5sqIMV | 2117 | Figure out what to do about `DatabaseView.name` | 9599 | closed | 0 | 9700784 | 1 | 2023-07-26T18:58:06Z | 2023-08-08T02:02:07Z | 2023-08-08T02:02:07Z | OWNER | In the old code: https://github.com/simonw/datasette/blob/08181823990a71ffa5a1b57b37259198eaa43e06/datasette/views/database.py#L34-L35 This `name` class attribute was later used by some of the plugin hooks, passed as `view_name`: https://github.com/simonw/datasette/blob/18dd88ee4d78fe9d760e9da96028ae06d938a85c/datasette/hookspecs.py#L50-L54 Figure out how that should work once I've refactored those classes to view functions instead. Refs: - #2109 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/2117/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1822936521 | I_kwDOBm6k_c5sp83J | 2110 | Merge database index page and query view | 9599 | closed | 0 | 9700784 | 1 | 2023-07-26T18:21:57Z | 2023-07-26T19:53:25Z | 2023-07-26T19:53:25Z | OWNER | Refs: - #2109 The idea here is that hitting `/content` without a `?sql=` will show an empty result set AND default to including a bunch of extras about the list of tables in the database. Then I won't have to think about `/content` and `/content?sql=` as separate pages any more. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/2110/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1578609658 | I_kwDOBm6k_c5eF6v6 | 2022 | Error 500 - not clear the cause | 1667631 | closed | 0 | 1 | 2023-02-09T20:57:17Z | 2023-02-09T21:13:50Z | 2023-02-09T21:13:50Z | NONE | On the database that I have sent via linkedIn, datasette works great, but the following URL gives a 500 error. http://127.0.0.1:8001/literature/authors_papers?authorId=100550354 The cause of the error is not apparent. Is this expected behaviour? David | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/2022/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1528448642 | I_kwDOBm6k_c5bGkaC | 1985 | Don't let Datasette(path) without a list cause weird errors | 9599 | closed | 0 | 1 | 2023-01-11T05:17:44Z | 2023-01-11T18:25:04Z | 2023-01-11T18:25:04Z | OWNER | I got a confusing `sqlite3.OperationalError: disk I/O error` error in my tests, it turned out it was because this: ```python ds = Datasette(path) ``` Should have been this: ```python ds = Datasette([path]) ``` _Originally posted by @simonw in https://github.com/simonw/datasette-faiss/issues/1#issuecomment-1378252673_ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1985/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1501900064 | I_kwDOBm6k_c5ZhS0g | 1966 | Broken link to live demo in Getting started docs | 7551922 | closed | 0 | 1 | 2022-12-18T13:17:00Z | 2022-12-31T19:15:19Z | 2022-12-31T19:15:10Z | NONE | The link in [Play with a live demo in Getting started](https://github.com/simonw/datasette/blob/main/docs/getting_started.rst#play-with-a-live-demo) to [https://fivethirtyeight.datasettes.com/fivethirtyeight](https://fivethirtyeight.datasettes.com/fivethirtyeight) is broken and the datasette is no longer working (maybe due to the end of the free tier). | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1966/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1471969984 | I_kwDOBm6k_c5XvHrA | 1926 | Release notes for 1.0a1 (and release it) | 9599 | closed | 0 | 7867486 | 1 | 2022-12-01T21:18:12Z | 2022-12-01T22:06:13Z | 2022-12-01T22:06:12Z | OWNER | Mainly CORS support and a few small bug fixes. Changes: https://github.com/simonw/datasette/compare/1.0a0...99da46f7258225fc6fd8e94ddc20859ccccc4109 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1926/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1469044738 | I_kwDOBm6k_c5Xj9gC | 1918 | API explorer should list mutable databases first | 9599 | closed | 0 | 7867486 | 1 | 2022-11-30T04:53:33Z | 2022-11-30T05:22:07Z | 2022-11-30T05:07:56Z | OWNER | https://latest.datasette.io/-/api hides `ephemeral` down at the bottom, would be more interesting if it was at the top. Related: - #1915 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1918/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1469015001 | I_kwDOBm6k_c5Xj2PZ | 1916 | GET requests against POST endpoints should not 500 error | 9599 | closed | 0 | 7867486 | 1 | 2022-11-30T04:04:43Z | 2022-11-30T05:15:19Z | 2022-11-30T05:15:19Z | OWNER | ![CF37BA4D-0677-4DDD-A339-EAF163BB63B7](https://user-images.githubusercontent.com/9599/204705025-6f88e9f7-757d-45e8-a89c-ab97e84781e8.png) | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1916/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1432012302 | I_kwDOBm6k_c5VWsYO | 1877 | Refactor and tidy up final write API code | 9599 | closed | 0 | 1 | 2022-11-01T20:00:11Z | 2022-11-29T19:44:16Z | 2022-11-29T19:44:07Z | OWNER | - `views/table.py` has got a bit too big - I think the write classes should be pulled out into a separate module. - [x] There's duplicate logic for deciding if the table and database exist and checking permissions | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1877/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1447439985 | I_kwDOBm6k_c5WRi5x | 1888 | API explorer should take immutability into account | 9599 | closed | 0 | 8658075 | 1 | 2022-11-14T06:00:14Z | 2022-11-15T19:59:10Z | 2022-11-14T06:04:48Z | OWNER | Refs: - #1871 I noticed the API explorer doesn't show any links on https://latest-1-0-dev.datasette.io/-/api because the `fixtures` database is immutable. It should still show read examples there. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1888/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1423347412 | I_kwDOBm6k_c5U1o7U | 1857 | Prevent API tokens from using /-/create-token to create more tokens | 9599 | closed | 0 | 8658075 | 1 | 2022-10-26T02:38:09Z | 2022-11-15T19:57:11Z | 2022-10-26T02:57:26Z | OWNER | > It strikes me that users should NOT be able to use a token to create additional tokens. > > The current design actually does allow that, since the `dstok_` Bearer token can be used to authenticate calls to the `/-/create-token` page. > > So I think I need a mechanism whereby that page can only allow access to users authenticated by cookie. > > Not obvious how to do that though, since Datasette's authentication actor system is designed to abstract that detail away! _Originally posted by @simonw in https://github.com/simonw/datasette/issues/1850#issuecomment-1291417100_ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1857/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1425682079 | I_kwDOBm6k_c5U-i6f | 1865 | Stop syncing main to master | 9599 | closed | 0 | 1 | 2022-10-27T13:55:38Z | 2022-10-27T13:58:27Z | 2022-10-27T13:56:13Z | OWNER | I think it's been long enough now that I can drop the code that syncs the main branch to master. I originally added this for people who might be using `datasette publish ... --branch master` - which might only have been me anyway! | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1865/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
642297505 | MDU6SXNzdWU2NDIyOTc1MDU= | 857 | Comprehensive documentation for variables made available to templates | 9599 | closed | 0 | 3268330 | 1 | 2020-06-20T03:19:43Z | 2022-10-26T02:58:17Z | 2022-10-26T02:58:17Z | OWNER | Needed for the Datasette 1.0 release, so template authors can trust that Datasette is unlikely to break their templates. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/857/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1386734383 | I_kwDOBm6k_c5Sp-Mv | 1821 | Release Datasette 0.63a0 | 9599 | closed | 0 | 1 | 2022-09-26T21:15:27Z | 2022-09-26T22:06:39Z | 2022-09-26T22:06:39Z | OWNER | > - The [prepare_jinja2_environment(env, datasette)](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-prepare-jinja2-environment) plugin hook now accepts an optional `datasette` argument. Hook implementations can also now return an `async` function which will be awaited automatically. ([#1809](https://github.com/simonw/datasette/issues/1809)) > - `--load-extension` option now supports entrypoints. Thanks, Alex Garcia. ([#1789](https://github.com/simonw/datasette/pull/1789)) > - New tutorial: [Cleaning data with sqlite-utils and Datasette](https://datasette.io/tutorials/clean-data). > - Facet size can now be set per-table with the new `facet_size` table metadata option. ([#1804](https://github.com/simonw/datasette/issues/1804)) > - `truncate_cells_html` setting now also affects long URLs in columns. ([#1805](https://github.com/simonw/datasette/issues/1805)) > - `Database(is_mutable=)` now defaults to `True`. ([#1808](https://github.com/simonw/datasette/issues/1808)) > - Non-JavaScript textarea now increases height to fit the SQL query. ([#1786](https://github.com/simonw/datasette/issues/1786)) > - More detailed command descriptions on the [CLI reference](https://docs.datasette.io/en/latest/cli-reference.html#cli-reference) page. ([#1787](https://github.com/simonw/datasette/issues/1787)) > - Datasette no longer enforces upper bounds on its depenedencies. ([#1800](https://github.com/simonw/datasette/issues/1800)) > - Facets are now displayed with better line-breaks in long values. Thanks, Daniel Rech. ([#1794](https://github.com/simonw/datasette/pull/1794)) > - The `settings.json` file used in [Configuration directory mode](https://docs.datasette.io/en/latest/settings.html#config-dir) is now validated on startup. ([#1816](https://github.com/simonw/datasette/issues/1816)) | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1821/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1377811868 | I_kwDOBm6k_c5SH72c | 1813 | missing next and next_url in JSON responses from an instance deployed on Fly | 883348 | closed | 0 | 1 | 2022-09-19T11:32:34Z | 2022-09-19T11:34:45Z | 2022-09-19T11:34:45Z | CONTRIBUTOR | 👋 thank you for an incredibly useful project! I have noticed that my deployed instance on Fly does not include the `next` and `next_url` keys even for a truncated response : <img width="815" alt="Screenshot 2022-09-19 at 13 25 07" src="https://user-images.githubusercontent.com/883348/191007558-c0e9df03-7ee3-4e03-bd1c-26c608c3bdf9.png"> This is publically accessible here: `https://collectif-objets-datasette.fly.dev/collectif-objets.json?sql=select+*+from+mairies` However when I run the dataset server locally with the same data I get these next keys for the exact same query: <img width="695" alt="Screenshot 2022-09-19 at 13 24 05" src="https://user-images.githubusercontent.com/883348/191007464-c3905896-cd6f-46c0-8d6a-0f1c0b4471ca.png"> I am wondering if I've missed some config or something specific to deployments on Fly.io? I am running datasette v0.62, without any specific config : - locally `poetry run datasette data/collectif-objets.sqlite` - for the deploy : `poetry run datasette publish fly data/collectif-objets.sqlite` as visible in [the Makefile](https://github.com/adipasquale/collectif-objets-datasette/blob/main/Makefile). _The very limited codebase is public but the sqlite db is not versioned yet because it is too large._ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1813/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1338137350 | I_kwDOBm6k_c5PwlsG | 1781 | Ensure Datasette Lite is promoted in docs and README | 9599 | closed | 0 | 8303187 | 1 | 2022-08-14T05:12:35Z | 2022-08-14T15:24:40Z | 2022-08-14T15:24:40Z | OWNER | As of 0.62 https://lite.datasette.io is a supported piece of the overall Datasette ecosystem. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1781/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
663145122 | MDU6SXNzdWU2NjMxNDUxMjI= | 903 | Add temporary plugin testing pattern to the testing docs | 9599 | closed | 0 | 1 | 2020-07-21T16:22:34Z | 2022-07-18T21:34:33Z | 2022-07-18T21:31:22Z | OWNER | https://til.simonwillison.net/pytest/registering-plugins-in-tests Would be useful to include this pattern on https://datasette.readthedocs.io/en/stable/testing_plugins.html | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/903/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1251710928 | I_kwDOBm6k_c5Km5fQ | 1751 | Add scrollbars to table presentation in default layout | 408765 | closed | 0 | 1 | 2022-05-28T19:44:57Z | 2022-05-28T19:52:17Z | 2022-05-28T19:52:17Z | NONE | (As you will be able to tell from the terminology I use, I am not a frontend guy, but I hope you will understand.) When a table is wide and needs horizontal scrolling to see the columns towards the end, the user needs to scroll horizontally. However, since the container for the HTML table (`div` with class `table-wrapper`) isn't limited by the window size, I first need to vertically scroll near to the bottom of the page in order to scroll horizontally. Then I can scroll back up again. This isn't very user friendly. Instead, I think it would make sense to constrain the table's size (when necessary), so that the vertical and horizontal scrollbars either always are visible or at least not far out of reach. I understand that I could provide my own template and / or CSS, but I think it would probably make sense to adjust the default in this regard. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1751/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1243512344 | I_kwDOBm6k_c5KHn4Y | 1747 | Add tutorials to the getting started guide | 9599 | closed | 0 | 1 | 2022-05-20T19:01:52Z | 2022-05-20T19:12:30Z | 2022-05-20T19:05:34Z | OWNER | On https://docs.datasette.io/en/stable/getting_started.html | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1747/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1239080102 | I_kwDOBm6k_c5J2tym | 1745 | Documentation on running cog | 9599 | closed | 0 | 1 | 2022-05-17T19:41:06Z | 2022-05-17T19:45:51Z | 2022-05-17T19:43:45Z | OWNER | Noticed that `cog -r docs/*.rst` isn't documented in https://docs.datasette.io/en/latest/contributing.html#editing-and-building-the-documentation | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1745/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1223263540 | I_kwDOBm6k_c5I6YU0 | 1735 | Datasette setting to disable threading (for Pyodide) | 9599 | closed | 0 | 1 | 2022-05-02T19:31:08Z | 2022-05-02T23:25:49Z | 2022-05-02T20:13:52Z | 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: > > datasette mydatabase.db --setting num_sql_threads 10 > > I'm going to let users set that to `0` to disable threaded execution of SQL queries. _Originally posted by @simonw in https://github.com/simonw/datasette/issues/1733#issuecomment-1115278325_ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1735/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1212838949 | I_kwDOBm6k_c5ISnQl | 1716 | Configure git blame to ignore Black commit | 9599 | closed | 0 | 1 | 2022-04-22T21:56:37Z | 2022-04-22T22:02:19Z | 2022-04-22T22:02:19Z | OWNER | GitHub can support this in blame views now too: https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file#ignore-commits-in-the-blame-view | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1716/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1200649889 | I_kwDOBm6k_c5HkHah | 1710 | Guide for plugin authors to upgrade their plugins for 1.0 | 9599 | closed | 0 | 1 | 2022-04-11T22:58:25Z | 2022-04-11T23:04:01Z | 2022-04-11T23:03:25Z | OWNER | I'll also encourage testing against both Datasette 0.x and Datasette 1.0 using a GitHub Actions matrix. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1710/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1190828163 | I_kwDOBm6k_c5G-piD | 1698 | Add a warning about bots and Cloud Run | 9599 | closed | 0 | 1 | 2022-04-03T05:57:17Z | 2022-04-03T06:10:24Z | 2022-04-03T06:10:24Z | OWNER | Recommend the https://github.com/simonw/datasette-block-robots plugin if you are going to run a large database in Cloud Run (one with a lot of rows). | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1698/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1189113609 | I_kwDOBm6k_c5G4G8J | 1697 | `Request.fake(..., url_vars={})` | 9599 | closed | 0 | 3268330 | 1 | 2022-04-01T01:48:40Z | 2022-04-01T02:02:18Z | 2022-04-01T02:02:10Z | OWNER | I just created an alternative `.fake()` method because I wanted to fake the `url_vars` captured in the route as well: ```python from datasette.utils.asgi import Request class Request(Request): @classmethod def fake(cls, path_with_query_string, method="GET", scheme="http", url_vars=None): """Useful for constructing Request objects for tests""" path, _, query_string = path_with_query_string.partition("?") scope = { "http_version": "1.1", "method": method, "path": path, "raw_path": path_with_query_string.encode("latin-1"), "query_string": query_string.encode("latin-1"), "scheme": scheme, "type": "http", } if url_vars: scope["url_route"] = { "kwargs": url_vars } return cls(scope, None) ``` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1697/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1182065616 | I_kwDOBm6k_c5GdOPQ | 1689 | datasette.add_message() documentation is incorrect | 9599 | closed | 0 | 1 | 2022-03-26T20:49:42Z | 2022-03-26T21:35:57Z | 2022-03-26T20:51:21Z | OWNER | https://docs.datasette.io/en/0.61.1/internals.html#add-message-request-message-message-type-datasette-info says: `.add_message(request, message, message_type=datasette.INFO)` But in the code it's: https://github.com/simonw/datasette/blob/6b99e4a66ba0ed8fca8ee41ceb7206928b60d5d1/datasette/app.py#L582 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1689/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1089529555 | I_kwDOBm6k_c5A8ObT | 1581 | when hashed urls are turned on, the _memory db has improperly long-lived cache expiry | 536941 | closed | 0 | 1 | 2021-12-28T00:05:48Z | 2022-03-24T04:08:18Z | 2022-03-24T04:08:18Z | CONTRIBUTOR | if hashed_urls are on, then a -000 suffix is added to the `_memory` database, and the cache settings are set just as if it was a normal hashed database. in particular, this header is set: `cache-control: max-age=31536000` this is not appropriate because the `_memory-000` database isn't really hashed based on the contents of the databases (see #1561). Either the cache-control header should be changed, or the _memory db should have a hash suffix that does depend on the contents of the databases. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1581/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1178521513 | I_kwDOBm6k_c5GPs-p | 1682 | SQL queries against databases with different routes are broken | 9599 | closed | 0 | 1 | 2022-03-23T18:42:57Z | 2022-03-23T18:48:16Z | 2022-03-23T18:48:16Z | OWNER | 500 error on https://datasette-hashed-urls-preview.vercel.app/fixtures-09f8f95?sql=select+*+from+facetable Here's the trace: ``` File "/Users/simon/.local/share/virtualenvs/datasette-hashed-urls-ssI2fO50/lib/python3.10/site-packages/datasette/views/database.py", line 54, in data return await QueryView(self.ds).data( File "/Users/simon/.local/share/virtualenvs/datasette-hashed-urls-ssI2fO50/lib/python3.10/site-packages/datasette/views/database.py", line 232, in data self.ds.get_database(database), sql File "/Users/simon/.local/share/virtualenvs/datasette-hashed-urls-ssI2fO50/lib/python3.10/site-packages/datasette/app.py", line 401, in get_database return self.databases[name] KeyError: 'fixtures-aa7318b' ``` It looks like this is a Datasette bug, which is frustrating because I just shipped Datasette 0.61 five minutes ago! _Originally posted by @simonw in https://github.com/simonw/datasette-hashed-urls/issues/13#issuecomment-1076693667_ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1682/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1175715988 | I_kwDOBm6k_c5GFACU | 1678 | Make `check_visibility()` a documented API | 9599 | closed | 0 | 3268330 | 1 | 2022-03-21T17:30:34Z | 2022-03-21T19:04:03Z | 2022-03-21T19:01:46Z | OWNER | Spotted this while working on: - #1677 https://github.com/simonw/datasette/blob/e627510b760198ccedba9e5af47a771e847785c9/datasette/utils/__init__.py#L1005-L1021 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1678/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1175694248 | I_kwDOBm6k_c5GE6uo | 1677 | Remove `check_permission()` from `BaseView` | 9599 | closed | 0 | 3268330 | 1 | 2022-03-21T17:18:18Z | 2022-03-21T18:45:04Z | 2022-03-21T18:45:03Z | OWNER | Follow-on from: - #1675 Refs: - #1660 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1677/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1169840669 | I_kwDOBm6k_c5Fulod | 1658 | Revert main to version that passes tests | 9599 | closed | 0 | 3268330 | 1 | 2022-03-15T15:37:02Z | 2022-03-19T04:04:50Z | 2022-03-15T15:42:58Z | OWNER | > I've made a real mess of this. I'm going to revert Datasette`main` back to the last commit that passed the tests and try this again in a branch. _Originally posted by @simonw in https://github.com/simonw/datasette/issues/1657#issuecomment-1068125636_ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1658/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1170497629 | I_kwDOBm6k_c5FxGBd | 1662 | [feature request] Publish to fully static website | 32609395 | closed | 0 | 1 | 2022-03-16T03:32:28Z | 2022-03-19T00:42:23Z | 2022-03-19T00:42:23Z | NONE | It seems currently all datasette publish requires a real backend server which is able to query the database and send results back to the frontend. There are a few projects to on-demand download a portion of data from the database from a sqlite lite database url, and present it directly to the user. These methods leverages web assembly under the hood. I think datasette is a perfect use case for this technology. Below are a few examples of querying sqlite database from frontend directly. * [Using sqlite3 as a notekeeping document graph with automatic reference indexing](https://epilys.github.io/bibliothecula/notekeeping.html) * [Hosting SQLite databases on Github Pages - (or any static file hoster) - phiresky's blog](https://phiresky.github.io/blog/2021/hosting-sqlite-databases-on-github-pages/) * [Static torrent website with peer-to-peer queries over BitTorrent on 2M records](https://boredcaveman.xyz/post/0x2_static-torrent-website-p2p-queries.html) | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1662/reactions", "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1152072027 | I_kwDOBm6k_c5Eqzlb | 1642 | Dependency issue with asgiref and uvicorn | 9599 | closed | 0 | 1 | 2022-02-26T18:00:35Z | 2022-03-05T01:11:27Z | 2022-03-05T01:11:17Z | OWNER | ``` ERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts. We recommend you use --use-feature=2020-resolver to test your packages with the new resolver before it becomes the default. datasette 0.60.2 requires asgiref<3.5.0,>=3.2.10, but you'll have asgiref 3.5.0 which is incompatible. ``` That's after I forced an upgrade of `uvicorn` due to this warning: ``` ERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts. We recommend you use --use-feature=2020-resolver to test your packages with the new resolver before it becomes the default. uvicorn 0.13.1 requires click==7.*, but you'll have click 8.0.4 which is incompatible. ``` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1642/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1083581011 | I_kwDOBm6k_c5AliJT | 1564 | _prepare_connection not called on write connections | 9599 | closed | 0 | 7571612 | 1 | 2021-12-17T20:06:47Z | 2022-01-20T21:29:43Z | 2021-12-18T01:58:44Z | OWNER | I was trying to initalize SpatiaLite in a write connection: ```pycon >>> from datasette.app import Datasette >>> ds = Datasette(memory=True, files=[], sqlite_extensions=["spatialite"]) >>> db = ds.add_memory_database('geo') >>> await db.execute_write("select InitSpatialMetadata(1)") UUID('3f143baa-4e3d-5842-a36f-4fa2f683b72f') no such function: InitSpatialMetadata ``` It looks like the code that loads additional modules only works on read-only connections, not on write connections: https://github.com/simonw/datasette/blob/92a5280d2e75c39424a75ad6226fc74400ae984f/datasette/database.py#L146-L153 Compared to: https://github.com/simonw/datasette/blob/92a5280d2e75c39424a75ad6226fc74400ae984f/datasette/database.py#L124-L132 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1564/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
752995227 | MDU6SXNzdWU3NTI5OTUyMjc= | 1115 | SpatiaLite error could suggest --load-extension=spatialite | 9599 | closed | 0 | 1 | 2020-11-29T20:05:07Z | 2022-01-20T21:29:42Z | 2020-11-29T20:13:22Z | OWNER | https://github.com/simonw/datasette/blob/242bc89fdf2e775e340d69a4e851b3a9accb31c6/datasette/cli.py#L533-L548 This could use the `find_spatialite()` function and, if it finds something, suggest the user use `--load-extension=spatialite` https://github.com/simonw/datasette/blob/242bc89fdf2e775e340d69a4e851b3a9accb31c6/datasette/utils/__init__.py#L1015-L1019 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1115/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
723803777 | MDU6SXNzdWU3MjM4MDM3Nzc= | 1028 | --load-extension=spatialite shortcut | 9599 | closed | 0 | 6026070 | 1 | 2020-10-17T17:02:08Z | 2022-01-20T21:29:41Z | 2020-10-19T22:37:55Z | OWNER | I added this to `sqlite-utils` in https://github.com/simonw/sqlite-utils/issues/136 and I really like it: pass a special value of `spatialite` and Datasette should attempt to load it from known likely installation locations. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1028/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1104691662 | I_kwDOBm6k_c5B2EHO | 1600 | plugins --all example should use cog | 9599 | closed | 0 | 1 | 2022-01-15T11:47:49Z | 2022-01-20T05:06:21Z | 2022-01-20T05:04:16Z | OWNER | The example output for `datasette plugins --all`on this page has got out of date: https://docs.datasette.io/en/stable/plugins.html#seeing-what-plugins-are-installed | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1600/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1102637351 | I_kwDOBm6k_c5BuOkn | 1598 | Replace update-docs-help.py script with cog | 9599 | closed | 0 | 1 | 2022-01-14T00:33:27Z | 2022-01-14T00:47:57Z | 2022-01-14T00:47:57Z | OWNER | I introduced `cog` in #1594 - I can use this to replace the older `update-docs-help.py` mechanism: https://github.com/simonw/datasette/blob/76d66d5b2bf10249c0beaac0999b93ac8d757f48/tests/test_docs.py#L36-L53 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1598/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1102612922 | I_kwDOBm6k_c5BuIm6 | 1597 | "datasette inspect" has no help summary | 9599 | closed | 0 | 1 | 2022-01-14T00:02:16Z | 2022-01-14T00:07:36Z | 2022-01-14T00:07:36Z | OWNER | Made obvious by the new CLI reference page added in #1594. https://docs.datasette.io/en/latest/cli-reference.html#datasette-inspect-help ``` Commands: serve* Serve up specified SQLite database files with a web UI inspect install Install Python packages - e.g. ``` ``` Usage: datasette inspect [OPTIONS] [FILES]... Options: --inspect-file TEXT --load-extension TEXT Path to a SQLite extension to load --help Show this message and exit. ``` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1597/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1082564912 | I_kwDOBm6k_c5AhqEw | 1557 | `?_nosuggest=1` parameter for disabling facet suggestions on table view | 9599 | closed | 0 | 7571612 | 1 | 2021-12-16T19:21:42Z | 2022-01-13T22:26:48Z | 2021-12-16T19:24:59Z | OWNER | Found I wanted this while I was debugging #625 just to clean up the debug traces, but it makes sense as a partner to `?_nofacet=1` and `?_nocount=1` from #1350 and #1353. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1557/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1081318247 | I_kwDOBm6k_c5Ac5tn | 1556 | Show count of facet values always, not just for `?_facet_size=max` | 9599 | closed | 0 | 7571612 | 1 | 2021-12-15T17:49:01Z | 2022-01-13T22:26:07Z | 2021-12-15T17:58:06Z | OWNER | > You've caused me to rethink this feature - I no longer think there's value in only showing these numbers if `?_facet_size=max` as opposed to all of the time. _Originally posted by @simonw in https://github.com/simonw/datasette/issues/1423#issuecomment-995023410_ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1556/reactions", "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 1, "rocket": 0, "eyes": 0 } |
completed | |||||
1084257842 | I_kwDOBm6k_c5AoHYy | 1575 | __call__() got an unexpected keyword argument 'specname' | 9599 | closed | 0 | 1 | 2021-12-20T01:24:04Z | 2021-12-20T01:48:03Z | 2021-12-20T01:47:57Z | OWNER | > I've installed the alpha version but get an error when starting up Datasette: ``` Traceback (most recent call last): File "/Users/tim/.pyenv/versions/stock-exchange/bin/datasette", line 5, in <module> from datasette.cli import cli File "/Users/tim/.pyenv/versions/3.8.5/envs/stock-exchange/lib/python3.8/site-packages/datasette/cli.py", line 15, in <module> from .app import Datasette, DEFAULT_SETTINGS, SETTINGS, SQLITE_LIMIT_ATTACHED, pm File "/Users/tim/.pyenv/versions/3.8.5/envs/stock-exchange/lib/python3.8/site-packages/datasette/app.py", line 31, in <module> from .views.database import DatabaseDownload, DatabaseView File "/Users/tim/.pyenv/versions/3.8.5/envs/stock-exchange/lib/python3.8/site-packages/datasette/views/database.py", line 25, in <module> from datasette.plugins import pm File "/Users/tim/.pyenv/versions/3.8.5/envs/stock-exchange/lib/python3.8/site-packages/datasette/plugins.py", line 29, in <module> mod = importlib.import_module(plugin) File "/Users/tim/.pyenv/versions/3.8.5/lib/python3.8/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "/Users/tim/.pyenv/versions/3.8.5/envs/stock-exchange/lib/python3.8/site-packages/datasette/filters.py", line 9, in <module> @hookimpl(specname="filters_from_request") TypeError: __call__() got an unexpected keyword argument 'specname' ``` _Originally posted by @wragge in https://github.com/simonw/datasette/issues/1547#issuecomment-997511968_ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1575/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1076057610 | I_kwDOBm6k_c5AI1YK | 1546 | validating the sql | 50336793 | closed | 0 | 1 | 2021-12-09T21:35:57Z | 2021-12-18T02:05:17Z | 2021-12-18T02:05:16Z | NONE | Could someone tell me that part of the code is responsible for validating the sql that guarantees that only a table can be read | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1546/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1050163432 | I_kwDOBm6k_c4-mDjo | 1503 | `?_nocol=` removes that column from the filter interface | 9599 | closed | 0 | 1 | 2021-11-10T18:22:50Z | 2021-11-14T05:08:27Z | 2021-11-14T04:53:07Z | OWNER | e.g. on https://latest.datasette.io/fixtures/sortable?_nocol=sortable <img width="723" alt="fixtures__sortable__201_rows" src="https://user-images.githubusercontent.com/9599/141170777-733b1ab2-c153-4276-8ba2-d975ed84156e.png"> This causes weird behaviour when you e.g. facet by a hidden column, since selecting facets and then re-submitting the form will clear the selected filter. ![nocol-bug](https://user-images.githubusercontent.com/9599/141171135-aded71d1-a4cb-4b7f-a4ea-26828fa98906.gif) | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1503/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1052826038 | I_kwDOBm6k_c4-wNm2 | 1506 | Columns beginning with an underscore do not facet correctly | 9599 | closed | 0 | 1 | 2021-11-14T02:20:32Z | 2021-11-14T04:45:21Z | 2021-11-14T04:45:21Z | OWNER | Datasette treats columns that start with an underscore as querystring parameters it should ignore! <img width="914" alt="bchydro__item_versions__99_918_rows" src="https://user-images.githubusercontent.com/9599/141664864-119990d5-42b2-47f7-91bd-09a74a288af9.png"> Discovered in https://github.com/simonw/git-history/issues/14#issuecomment-968192464 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1506/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1033864602 | I_kwDOBm6k_c49n4Wa | 1496 | Named parameters docs should include an example of a cast | 9599 | closed | 0 | 1 | 2021-10-22T18:56:04Z | 2021-10-22T19:38:23Z | 2021-10-22T19:34:27Z | OWNER | https://docs.datasette.io/en/stable/sql_queries.html#named-parameters It's not obvious that the values from parameters are always SQLite strings, which means that you can't do e.g. integer comparisons on them without casting them first. The documentation here should include an example of this. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1496/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1028115674 | I_kwDOBm6k_c49R8za | 1493 | `--get '/:memory:.json?sql=select+3*5'` error with datasette 0.59 | 1580956 | closed | 0 | 1 | 2021-10-16T18:22:22Z | 2021-10-19T04:39:11Z | 2021-10-19T04:39:11Z | NONE | 👋 trying to upgrade the formula to use the latest release, but runs into some regression test issue with `--get` command. My QQ is does this `datasette --get '/:memory:.json?sql=select+3*5'` supposed to return 15? Thanks! relates to https://github.com/Homebrew/homebrew-core/pull/87369 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1493/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
981681138 | MDU6SXNzdWU5ODE2ODExMzg= | 1450 | Datasette --help should show something more useful than "Datasette!" | 9599 | closed | 0 | 1 | 2021-08-28T00:44:51Z | 2021-08-28T00:49:07Z | 2021-08-28T00:49:07Z | OWNER | https://github.com/simonw/datasette/blob/a1a33bb5822214be1cebd98cd858b2058d91a4aa/datasette/cli.py#L122-L127 _Originally spotted by @simonw in https://github.com/simonw/datasette/issues/1449#issuecomment-907539668_ ``` ~ % datasette --help Usage: datasette [OPTIONS] COMMAND [ARGS]... Datasette! Options: --version Show the version and exit. --help Show this message and exit. ``` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1450/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
974995592 | MDU6SXNzdWU5NzQ5OTU1OTI= | 1443 | datasette.databases should be a documented property | 9599 | closed | 0 | 1 | 2021-08-19T19:53:04Z | 2021-08-19T21:25:07Z | 2021-08-19T21:23:47Z | OWNER | https://github.com/simonw/datasette/blob/adb5b70de5cec3c3dd37184defe606a082c232cf/datasette/app.py#L231 I want to use it in https://github.com/simonw/datasette-block-robots/issues/5 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1443/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
969840302 | MDU6SXNzdWU5Njk4NDAzMDI= | 1431 | `--help-config` should be called `--help-settings` | 9599 | closed | 0 | 1 | 2021-08-13T00:46:48Z | 2021-08-13T01:01:58Z | 2021-08-13T01:01:58Z | OWNER | Follow-on from #1105 rebranding exercise. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1431/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
959278472 | MDU6SXNzdWU5NTkyNzg0NzI= | 1417 | Use codespell in CI to spot spelling errors | 9599 | closed | 0 | 1 | 2021-08-03T16:14:15Z | 2021-08-03T16:36:40Z | 2021-08-03T16:36:40Z | OWNER | I noticed Rich is using this: https://github.com/willmcgugan/rich/commit/9c12a4537499797c43725fff5276ef0da62423ef#diff-ce84a1b2c9eb4ab3ea22f610cad7111cb9a2f66365c3b24679901376a2a73ab2 Ran it against the Datasette docs and found a bunch of obvious fixes, surprisingly with no false positives. ``` datasette % codespell docs/*.rst docs/authentication.rst:63: perfom ==> perform docs/authentication.rst:76: perfom ==> perform docs/changelog.rst:429: repsonse ==> response docs/changelog.rst:503: permissons ==> permissions docs/changelog.rst:717: compatibilty ==> compatibility docs/changelog.rst:1172: browseable ==> browsable docs/deploying.rst:191: similiar ==> similar docs/internals.rst:434: Respons ==> Response, respond docs/internals.rst:440: Respons ==> Response, respond docs/internals.rst:717: tha ==> than, that, the docs/performance.rst:42: databse ==> database docs/plugin_hooks.rst:667: utilites ==> utilities docs/publish.rst:168: countainer ==> container docs/settings.rst:352: inalid ==> invalid docs/sql_queries.rst:406: preceeded ==> preceded, proceeded ``` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1417/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
810394616 | MDU6SXNzdWU4MTAzOTQ2MTY= | 1227 | Configure sphinx.ext.extlinks for issues | 9599 | closed | 0 | 1 | 2021-02-17T17:38:02Z | 2021-08-02T21:38:39Z | 2021-02-18T01:20:33Z | OWNER | Spotted this in the aspw documentation: https://github.com/rogerbinns/apsw/blob/3.34.0-r1/doc/conf.py#L29-L36 ```python extlinks={ 'cvstrac': ('https://sqlite.org/cvstrac/tktview?tn=%s', 'SQLite ticket #'), 'sqliteapi': ('https://sqlite.org/c3ref/%s.html', 'XXYouShouldNotSeeThisXX'), 'issue': ('https://github.com/rogerbinns/apsw/issues/%s', 'APSW issue '), 'source': ('https://github.com/rogerbinns/apsw/blob/master/%s', ''), } ``` Which lets you link to issues like this: :issue:`268` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1227/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
957345476 | MDU6SXNzdWU5NTczNDU0NzY= | 1411 | Canned query ?sql= is pointlessly echoed in query string starting from hidden mode | 9599 | closed | 0 | 1 | 2021-08-01T00:17:13Z | 2021-08-01T03:27:30Z | 2021-08-01T00:58:17Z | OWNER | Example: https://latest.datasette.io/fixtures/neighborhood_search?text=cork&_hide_sql=1 Submitting that form again results in this: https://latest.datasette.io/fixtures/neighborhood_search?sql=%0D%0Aselect+neighborhood%2C+facet_cities.name%2C+state%0D%0Afrom+facetable%0D%0A++++join+facet_cities%0D%0A++++++++on+facetable.city_id+%3D+facet_cities.id%0D%0Awhere+neighborhood+like+%27%25%27+%7C%7C+%3Atext+%7C%7C+%27%25%27%0D%0Aorder+by+neighborhood%3B%0D%0A&_hide_sql=1&text=cork Because the HTML on https://latest.datasette.io/fixtures/neighborhood_search?text=cork&_hide_sql=1 includes this: ```html <h3>Custom SQL query returning 1 row <span class="show-hide-sql">(<a href="/fixtures/neighborhood_search?text=cork">show</a>)</span></h3> <input type="hidden" name="sql" value=" select neighborhood, facet_cities.name, state from facetable join facet_cities on facetable.city_id = facet_cities.id where neighborhood like '%' || :text || '%' order by neighborhood; "> <input type="hidden" name="_hide_sql" value="1"> ``` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1411/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
953352015 | MDU6SXNzdWU5NTMzNTIwMTU= | 1404 | `register_routes()` hook should take `datasette` argument | 9599 | closed | 0 | 1 | 2021-07-26T23:00:33Z | 2021-07-26T23:27:07Z | 2021-07-26T23:26:00Z | OWNER | Currently that plugin hook takes no arguments at all. This means it's not possible to conditionally register routes based on Datasette plugin configuration. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1404/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
913017577 | MDU6SXNzdWU5MTMwMTc1Nzc= | 1365 | pathlib.Path breaks internal schema | 25778 | closed | 0 | 1 | 2021-06-07T01:40:37Z | 2021-06-21T15:57:39Z | 2021-06-21T15:57:39Z | CONTRIBUTOR | Ran into an issue while trying to build a plugin to render GeoJSON. I'm using pytest's `tmp_path` fixture, which is a `pathlib.Path`, to get a temporary database path. I was getting a weird error involving writes, but I was doing reads. Turns out it's the internal database trying to insert a `Path` where it wants a string. My test looked like this: ```python @pytest.mark.asyncio async def test_render_feature_collection(tmp_path): database = tmp_path / "test.db" datasette = Datasette([database]) # this will break with a path await datasette.refresh_schemas() # build a url url = datasette.urls.table(database.stem, TABLE_NAME, format="geojson") response = await datasette.client.get(url) fc = response.json() assert 200 == response.status_code ``` I only ran into this while running tests, because passing in database paths from the CLI uses strings, but it's a weird error and probably something other people have run into. The fix is easy enough: Convert the path to a string and everything works. So this: ```python @pytest.mark.asyncio async def test_render_feature_collection(tmp_path): database = tmp_path / "test.db" datasette = Datasette([str(database)]) # this is fine now await datasette.refresh_schemas() ``` This could (probably, haven't tested) be fixed [here](https://github.com/simonw/datasette/blob/03ec71193b9545536898a4bc7493274fec48bdd7/datasette/app.py#L357) by calling `str(db.path)` or by doing that conversion earlier. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1365/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
925406964 | MDU6SXNzdWU5MjU0MDY5NjQ= | 1382 | Datasette with Glitch - is it possible to use CSV with ISO-8859-1 encoding? | 23701514 | closed | 0 | 1 | 2021-06-19T14:37:20Z | 2021-06-20T00:21:02Z | 2021-06-20T00:20:06Z | NONE | Hi Please, I used Remix on Glitch to create a project on Glitch and uploaded a CSV But it's a CSV with ISO-8859-1 encoding (https://en.wikipedia.org/wiki/ISO/IEC_8859-1) Is it possible for me to change the encoding to correctly visualize the data? Example: https://emphasized-carpal-pillow.glitch.me/data/Emendas Best | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1382/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
268176505 | MDU6SXNzdWUyNjgxNzY1MDU= | 34 | Support CSV export with a .csv extension | 9599 | closed | 0 | 1 | 2017-10-24T20:34:43Z | 2021-06-17T18:14:48Z | 2018-05-28T20:45:34Z | OWNER | Maybe do this using streaming with multiple pagination SQL queries so we can support arbritrarily large exports. How would this work against a view which doesn’t have an obvious efficient pagination mechanism? Maybe limit views to up to 1000 exported records? Relates to #5 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/34/reactions", "total_count": 2, "+1": 2, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
333000163 | MDU6SXNzdWUzMzMwMDAxNjM= | 312 | HTML, CSV and JSON views should support ?_col=&_col= | 9599 | closed | 0 | 1 | 2018-06-16T16:53:35Z | 2021-06-17T18:14:24Z | 2018-06-16T17:00:12Z | OWNER | To support whitelisting columns to display. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/312/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
335141434 | MDU6SXNzdWUzMzUxNDE0MzQ= | 326 | CSV should respect --cors and return cors headers | 9599 | closed | 0 | 1 | 2018-06-24T00:44:07Z | 2021-06-17T18:14:24Z | 2018-06-24T00:59:45Z | OWNER | Otherwise tools like Vega can't load data via CSV. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/326/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
508100844 | MDU6SXNzdWU1MDgxMDA4NDQ= | 598 | Character encoding bug with CSV export | 46313 | closed | 0 | 1 | 2019-10-16T21:09:30Z | 2021-06-17T18:13:20Z | 2019-10-18T22:52:21Z | NONE | I was just poking around, and at [this URL](https://sql-murder-mystery.datasette.io/sql-murder-mystery/crime_scene_report.csv?_stream=on&type=arson&_size=max), I encountered this error: ``` 'latin-1' codec can't encode character '\u2019' in position 27: ordinal not in range(256) ``` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/598/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
906993731 | MDU6SXNzdWU5MDY5OTM3MzE= | 1351 | Get `?_trace=1` working with CSV and streaming CSVs | 9599 | closed | 0 | 1 | 2021-05-31T03:02:15Z | 2021-06-17T18:12:32Z | 2021-06-01T15:50:09Z | OWNER | > I think it's worth getting `?_trace=1` to work with streaming CSV - this would have helped me spot this issue a long time ago. _Originally posted by @simonw in https://github.com/simonw/datasette/issues/1349#issuecomment-851133125_ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1351/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
915455228 | MDU6SXNzdWU5MTU0NTUyMjg= | 1371 | Menu plugin hooks should include the request | 9599 | closed | 0 | 1 | 2021-06-08T20:23:35Z | 2021-06-10T04:46:01Z | 2021-06-10T04:46:01Z | OWNER | https://docs.datasette.io/en/stable/plugin_hooks.html#menu-links-datasette-actor - `menu_links(datasette, actor)` - `table_actions(datasette, actor, database, table)` - `database_actions(datasette, actor, database)` All three of these should optionally also accept the `request` object. This would allow them to take into account additional cookies, `Authorization` headers or the current request URL (including the domain/subdomain) - or even access `request.scope` for extra context that might have been passed down from ASGI middleware. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1371/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
913823889 | MDU6SXNzdWU5MTM4MjM4ODk= | 1367 | Navigation menu display bug | 9599 | closed | 0 | 1 | 2021-06-07T18:18:08Z | 2021-06-07T18:24:19Z | 2021-06-07T18:24:19Z | OWNER | With Datasette 0.57 the navigation menu looks like this: <img width="991" alt="Datasette_Fixtures___memory___internal__fixtures__extra_database" src="https://user-images.githubusercontent.com/9599/121069137-ffb9b000-c781-11eb-962a-b250a2772590.png"> | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1367/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
656959584 | MDU6SXNzdWU2NTY5NTk1ODQ= | 893 | pip3 install datasette not serving static on linuxbrew. | 44167 | closed | 0 | 1 | 2020-07-14T23:33:38Z | 2021-06-02T04:29:56Z | 2021-06-02T04:29:56Z | NONE | *This error wasn't thrown* ``` Traceback (most recent call last): File "/home/linuxbrew/.linuxbrew/opt/python@3.8/lib/python3.8/site-packages/datasette/utils/asgi.py", line 289, in inner_static full_path.relative_to(root_path) File "/home/linuxbrew/.linuxbrew/opt/python@3.8/lib/python3.8/pathlib.py", line 904, in relative_to raise ValueError("{!r} does not start with {!r}" ValueError: '/home/linuxbrew/.linuxbrew/lib/python3.8/site-packages/datasette/static/app.css' does not start with '/home/linuxbrew/.linuxbrew/opt/python@3.8/lib/python3.8/site-packages/datasette/static' ``` Linuxbrew install python@3.8 with symbolic links when You call the full_path.relative_to(root_path) throw ValueError. This happened when you install from pip3 when you install with python3 setup.py develop , works good. Well at the end the static wasn't serving. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/893/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
756818250 | MDU6SXNzdWU3NTY4MTgyNTA= | 1127 | Make the custom SQL query text box larger or resizable | 596279 | closed | 0 | 1 | 2020-12-04T05:37:11Z | 2021-06-02T04:29:06Z | 2021-06-02T04:28:55Z | NONE | The text entry field for custom SQL queries is too small to display a moderately complex query, especially when it's been formatted. Would it be easy to make the textbox resizable by the user rather than having a fixed height? | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1127/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
800669347 | MDU6SXNzdWU4MDA2NjkzNDc= | 1216 | /-/databases should reflect connection order, not alphabetical order | 9599 | closed | 0 | 1 | 2021-02-03T20:20:23Z | 2021-06-02T03:10:19Z | 2021-06-02T03:10:19Z | OWNER | The order in which databases are attached to Datasette matters - it affects the homepage, and it's beginning to influence how certain plugins work (see https://github.com/simonw/datasette-tiles/issues/8). Two years ago in cccea85be6aaaeadb31f3b588ec7f732628815f5 I made `/-/databases` return things in alphabetical order, to fix a test failure in Python 3.5. Python 3.5 is no longer supported, so this is no longer necessary - and this behaviour should now be treated as a bug. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1216/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
908465747 | MDU6SXNzdWU5MDg0NjU3NDc= | 1354 | Update help in tests for latest Click | 9599 | closed | 0 | 1 | 2021-06-01T16:14:31Z | 2021-06-01T16:17:04Z | 2021-06-01T16:17:04Z | OWNER | Now that Uvicorn 0.14 is out with an unpinned Click dependency - https://github.com/encode/uvicorn/pull/1033 - our test suite runs against Click 8.0 - which subtly changes the output of `--help` causing test failures: https://github.com/simonw/datasette/runs/2720383031?check_suite_focus=true ``` def test_help_includes(name, filename): expected = (docs_path / filename).read_text() runner = CliRunner() result = runner.invoke(cli, name.split() + ["--help"], terminal_width=88) actual = f"$ datasette {name} --help\n\n{result.output}" # actual has "Usage: cli package [OPTIONS] FILES" # because it doesn't know that cli will be aliased to datasette expected = expected.replace("Usage: datasette", "Usage: cli") > assert expected == actual E AssertionError: assert '$ datasette ...e and exit.\n' == '$ datasette ...e and exit.\n' E Skipping 848 identical leading characters in diff, use -v to show E nt_id xxx E + E --version-note TEXT Additional note to show on /-/versions E --secret TEXT Secret used for signing secure values, such as signed E cookies E + E --title TEXT Title for metadata ``` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1354/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
903200328 | MDU6SXNzdWU5MDMyMDAzMjg= | 1341 | "Show all columns" cog menu item should show if ?_col= is used | 9599 | closed | 0 | 1 | 2021-05-27T04:28:17Z | 2021-05-27T04:31:16Z | 2021-05-27T04:31:16Z | OWNER | On https://latest.datasette.io/fixtures/sortable?_col=sortable the "Show all columns" item (from #615) is not shown (it should be): <img width="630" alt="fixtures__sortable__201_rows" src="https://user-images.githubusercontent.com/9599/119766097-44337a80-be69-11eb-8674-8031e72cb17d.png"> | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1341/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
891969037 | MDU6SXNzdWU4OTE5NjkwMzc= | 1326 | How to limit fields returned from the JSON API? | 5268174 | closed | 0 | 1 | 2021-05-14T14:27:41Z | 2021-05-23T02:55:06Z | 2021-05-23T02:55:00Z | NONE | Hi, I have quite wide tables, and in many cases only want a subset of the data (to save on network bandwidth). I need to use the JSON API as handling pagination is so much easier, but I can't see a way to select specific columns. Is there a way to do this, or is it a feature request? Thanks! | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1326/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
842212586 | MDU6SXNzdWU4NDIyMTI1ODY= | 1277 | Facet by array breaks if table name contains a space | 9599 | closed | 0 | 1 | 2021-03-26T18:38:19Z | 2021-03-27T03:49:38Z | 2021-03-27T03:49:34Z | OWNER | It breaks when you try to select a filtered item. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1277/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
837208901 | MDU6SXNzdWU4MzcyMDg5MDE= | 1267 | Update Datasette alternativeto listening with details | 921217 | closed | 0 | 1 | 2021-03-21T23:20:20Z | 2021-03-22T04:37:26Z | 2021-03-22T04:37:26Z | NONE | Hello, I recently learned about Datasette from an old hackernews post. It seems like an awesome project and I actually have use case I might be trying out in the coming months. Alas, to get a better understanding of your project I looked it up on alternativeto to see what it is similar too. I promise it's not spam, it's reputable enough to have a [Wikipedia](https://en.wikipedia.org/wiki/AlternativeTo) page. There was no listing on the website so I went ahead and created a listing that is now approved. I encourage anyone who likes this project and hopes to spread the word to help update the listing by: 1. Adding to the list of software it compares to 2. Uploading screenshots 3. Writing a review 4. Adding "features" I know this may seem spammy but I promise I have no affiliation with alternativeto I'm just a happy user and know it's a popular site for discovering software. Here is the listing for datasette: https://alternativeto.net/software/datasette/about/ Cheers | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1267/reactions", "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
836273891 | MDU6SXNzdWU4MzYyNzM4OTE= | 1266 | Documentation for Response.asgi_send(send) method | 9599 | closed | 0 | 1 | 2021-03-19T18:52:49Z | 2021-03-20T21:35:00Z | 2021-03-20T21:32:28Z | OWNER | I found myself wanting to use this method for https://github.com/simonw/datasette-auth-passwords/issues/15 - but it's not documented. It should be documented. https://github.com/simonw/datasette/blob/8e18c7943181f228ce5ebcea48deb59ce50bee1f/datasette/utils/asgi.py#L320-L340 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1266/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
823035080 | MDU6SXNzdWU4MjMwMzUwODA= | 1248 | duckdb database (very low performance in SQLite) | 15836677 | closed | 0 | 1 | 2021-03-05T12:20:29Z | 2021-03-08T00:25:27Z | 2021-03-08T00:25:27Z | NONE | My sqlite is getting too big to be processed by datasette (more than 10 minutes waiting to load) so I am working with duckdb and is waaaaay faster. I think the fastest embeddable database actually. https://duckdb.org/ Taking into account DuckDb is SQLite based it would be GREAT to use it with datasette. is that possible? Regards and thanks for a superb job | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1248/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
817528452 | MDU6SXNzdWU4MTc1Mjg0NTI= | 1244 | Plugin tip: look at the examples linked from the hooks page | 9599 | closed | 0 | 1 | 2021-02-26T17:18:27Z | 2021-02-26T17:30:38Z | 2021-02-26T17:27:15Z | OWNER | Someone asked "what are good example plugins I can look at?" and I realized that the answer is to look through the example links on https://docs.datasette.io/en/stable/plugin_hooks.html - but that tip should be written down somewhere on the https://docs.datasette.io/en/stable/writing_plugins.html page. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1244/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
813978858 | MDU6SXNzdWU4MTM5Nzg4NTg= | 1239 | JSON filter fails if column contains spaces | 9599 | closed | 0 | 1 | 2021-02-23T00:18:07Z | 2021-02-23T00:22:53Z | 2021-02-23T00:22:53Z | OWNER | Got this exception: `ERROR: conn=<sqlite3.Connection object at 0x10ea68e40>, sql = 'select Address, Affiliation, County, [Has Report], [Latest report notes], [Latest report yes], Latitude, [Location Type], Longitude, Name, id, [Appointment scheduling instructions], [Availability Info], [Latest report] from locations where rowid in (\n select locations.rowid from locations, json_each(locations.Availability Info) j\n where j.value = :p0\n ) and "Latest report yes" = :p1 order by id limit 101', params = {'p0': 'Yes: appointment required', 'p1': '1'}: near "Info": syntax error` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1239/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
793881756 | MDU6SXNzdWU3OTM4ODE3NTY= | 1207 | Document the Datasette(..., pdb=True) testing pattern | 9599 | closed | 0 | 1 | 2021-01-26T02:48:10Z | 2021-01-29T02:37:19Z | 2021-01-29T02:12:34Z | OWNER | If you're writing tests for a Datasette plugin and you get a 500 error from inside Datasette, you can cause Datasette to open a PDB session within the application server code by doing this: ```python ds = Datasette([db_path], pdb=True) response = await ds.client.get("/") ``` You'll need to run `pytest -s` to interact with the debugger, otherwise you'll get an error. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1207/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
785588942 | MDU6SXNzdWU3ODU1ODg5NDI= | 1187 | extra_body_script() support for script type="module" | 9599 | closed | 0 | 6346396 | 1 | 2021-01-14T02:01:47Z | 2021-01-24T21:21:44Z | 2021-01-14T02:14:39Z | OWNER | Follows #1186. The `extra_body_script()` plugin hook should provide a mechanism for specifying that the script should use `<script type="module">`. Relevant docs: https://docs.datasette.io/en/stable/plugin_hooks.html#extra-body-script-template-database-table-columns-view-name-request-datasette | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1187/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
785573793 | MDU6SXNzdWU3ODU1NzM3OTM= | 1186 | script type="module" support | 9599 | closed | 0 | 6346396 | 1 | 2021-01-14T01:17:47Z | 2021-01-24T21:21:41Z | 2021-01-14T01:50:58Z | OWNER | Custom JavaScript can be loaded in `metadata.json` like this: ```json { "extra_js_urls": [ { "url": "https://code.jquery.com/jquery-3.2.1.slim.min.js", "sri": "sha256-k2WSCIexGzOj3Euiig+TlR8gA0EmPjuc79OEeY5L45g=" } ] } ``` Add a `"module": true` option which causes the resulting script element to use `<script type="module">` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1186/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
772438273 | MDU6SXNzdWU3NzI0MzgyNzM= | 1157 | Use time.perf_counter() instead of time.time() to measure performance | 9599 | closed | 0 | 6346396 | 1 | 2020-12-21T20:21:41Z | 2021-01-24T21:20:42Z | 2020-12-21T21:49:20Z | OWNER | I do that in a bunch of places: https://ripgrep.datasette.io/-/ripgrep?pattern=time%28%29&literal=on&glob=datasette%2F%2A%2A https://docs.python.org/3/library/time.html#time.perf_counter > `time.``perf_counter`() → float > > Return the value (in fractional seconds) of a performance counter, i.e. a clock with the highest available resolution to measure a short duration. It does include time elapsed during sleep and is system-wide. The reference point of the returned value is undefined, so that only the difference between the results of consecutive calls is valid. > > _New in version 3.3._ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1157/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
772408750 | MDU6SXNzdWU3NzI0MDg3NTA= | 1156 | Rename _schemas to _internal | 9599 | closed | 0 | 6346396 | 1 | 2020-12-21T19:27:58Z | 2021-01-24T21:20:39Z | 2020-12-21T19:51:18Z | OWNER | I like `_internal` as the name for the in-memory Datasette schema database better. Refs #1154 #1150 #1155 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1156/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
791381623 | MDU6SXNzdWU3OTEzODE2MjM= | 1197 | DB size limit for publishing with Heroku | 1186275 | closed | 0 | 1 | 2021-01-21T18:08:43Z | 2021-01-24T20:53:44Z | 2021-01-24T20:53:44Z | NONE | Hello, I tried searching for this, but can't seem to get a great answer: Does anybody know the size limit for databases deploying to Heroku? The files I'm working with are pretty large, but I might be able to pare them down if I have a limit in mind. I'm getting the following error when running `datasette heroku publish`: `RangeError [ERR_INVALID_OPT_VALUE]: The value "14504095744" is invalid for option "size"` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1197/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
792625812 | MDU6SXNzdWU3OTI2MjU4MTI= | 1198 | Plugin testing documentation on using pytest-httpx | 9599 | closed | 0 | 1 | 2021-01-23T18:46:16Z | 2021-01-24T20:40:38Z | 2021-01-24T20:38:43Z | OWNER | I keep on having to figure this out: if you use the https://pypi.org/project/pytest-httpx/ fixture to write tests against mocked external APIs, they will fail because that module will break Datasette's own `datasette.client` testing mechanism. You can fix this using: ```python @pytest.fixture def non_mocked_hosts(): return ["localhost"] ``` See https://github.com/simonw/datasette-indieauth/blob/1.2/tests/test_indieauth.py I can add this tip to the https://docs.datasette.io/en/stable/testing_plugins.html page. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1198/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
435819321 | MDU6SXNzdWU0MzU4MTkzMjE= | 436 | 400 Error when trying to register new user via https://publish.datasettes.com/ | 317694 | closed | 0 | 1 | 2019-04-22T17:55:00Z | 2021-01-04T20:15:42Z | 2021-01-04T20:15:41Z | NONE | Behavior: When registering a new user via Zeit - confirmation is sent and screen acknowledges registered user... When clicking grant access the next screen is a white 400 error message. Replicated: Chrome and Firefox; 2 different email accounts | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/436/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
459537047 | MDU6SXNzdWU0NTk1MzcwNDc= | 517 | Add unit test for "static" mechanism in plugins | 9599 | closed | 0 | 1 | 2019-06-23T05:03:31Z | 2021-01-04T20:15:19Z | 2021-01-04T20:15:19Z | OWNER | Split out from #272 - this is actually quite tricky. Here's the relevant code: https://github.com/simonw/datasette/blob/35429f90894321eda7f2db31b9ea7976f31f73ac/datasette/utils.py#L602-L614 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/517/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
274264175 | MDU6SXNzdWUyNzQyNjQxNzU= | 102 | datasette publish elasticbeanstalk | 9599 | closed | 0 | 1 | 2017-11-15T18:48:31Z | 2021-01-04T20:13:20Z | 2021-01-04T20:13:19Z | OWNER | It looks like Elastic Beanstalk is the most convenient way to deploy a docker container to AWS without first deploying a cluster. https://aws.amazon.com/blogs/devops/dockerizing-a-python-web-app/ looks helpful. We would need to automate the deployment with Boto: http://boto3.readthedocs.io/en/latest/reference/services/elasticbeanstalk.html | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/102/reactions", "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
267739593 | MDU6SXNzdWUyNjc3Mzk1OTM= | 18 | See if I can get a websockets interface working | 9599 | closed | 0 | 1 | 2017-10-23T16:46:41Z | 2021-01-04T20:05:52Z | 2021-01-04T20:05:48Z | OWNER | Since I am already running on Sanic, how hard would it be to add a websocket ebdpoint that lets you talk to sqlite interactively? Could this be used to efficiently support streaming in answers to giant queries? | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/18/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
274265878 | MDU6SXNzdWUyNzQyNjU4Nzg= | 103 | datasette publish appengine | 9599 | closed | 0 | 1 | 2017-11-15T18:54:18Z | 2021-01-04T20:05:14Z | 2021-01-04T20:05:14Z | OWNER | Similar approach to Heroku, discussed in #90 Looks like this could be pretty easy: https://cloud.google.com/appengine/docs/flexible/python/quickstart | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/103/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
551834842 | MDU6SXNzdWU1NTE4MzQ4NDI= | 659 | README information is obscured by feature history | 55480210 | closed | 0 | 1 | 2020-01-18T22:34:51Z | 2020-12-10T23:28:51Z | 2020-12-10T23:28:51Z | NONE | While it's sometimes valuable to know how a project has developed, there is usually little justification for including this information in the README, and certainly not immediately after other key information such as "what does this package do, and who might want to use it?" Might I recommend that the feature history is migrated to an Appendix in the documentation? | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/659/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
758899581 | MDU6SXNzdWU3NTg4OTk1ODE= | 1132 | New filter: array does not contain | 9599 | closed | 0 | 1 | 2020-12-07T22:28:20Z | 2020-12-07T22:50:36Z | 2020-12-07T22:41:09Z | OWNER | I want to see all of my GitHub repos that are tagged `datasette-plugin` but are NOT tagged `datasette-io`: https://github-to-sqlite.dogsheep.net/github/repos?_facet=owner&owner=9599&_facet_array=topics&topics__arraycontains=datasette-plugin&topics__arraycontains=datasette-io#facet-topics | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1132/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
743011397 | MDU6SXNzdWU3NDMwMTEzOTc= | 1094 | import EX_CANTCREAT means datasette fails to work on Windows | 1049910 | closed | 0 | 1 | 2020-11-14T14:17:11Z | 2020-12-05T19:35:04Z | 2020-12-05T19:35:04Z | NONE | Trying to use datasette 0.51.1 gives the following error: ``` ImportError: cannot import name 'EX_CANTCREAT' from 'os' (C:\Users\drkan\AppData\Local\Programs\Python\Python39\lib\os.py) ``` Looks like that code is only available on unix: https://docs.python.org/3/library/os.html#os.EX_CANTCREAT Removing the line makes it work fine (`EX_CANTCREAT` doesn't seem to be used anywhere?) | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1094/reactions", "total_count": 3, "+1": 3, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
756761963 | MDU6SXNzdWU3NTY3NjE5NjM= | 1126 | Switch to google-github-actions/setup-gcloud for demo deploy | 9599 | closed | 0 | 1 | 2020-12-04T03:11:24Z | 2020-12-04T03:51:38Z | 2020-12-04T03:51:38Z | OWNER | That workflow is showing warnings: https://github.com/simonw/datasette/actions/runs/399400077 > Thank you for using setup-gcloud Action. GoogleCloudPlatform/github-actions/setup-gcloud has been deprecated, please switch to google-github-actions/setup-gcloud. https://github.com/google-github-actions/setup-gcloud has a Cloud Run example here: https://github.com/google-github-actions/setup-gcloud/blob/master/example-workflows/cloud-run/.github/workflows/cloud-run.yml | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1126/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
754178780 | MDU6SXNzdWU3NTQxNzg3ODA= | 1121 | Table actions cog is misaligned | 3243482 | closed | 0 | 1 | 2020-12-01T08:41:25Z | 2020-12-03T01:03:19Z | 2020-12-03T00:33:36Z | CONTRIBUTOR | At the moment it looks like this https://datasette-graphql-demo.datasette.io/github/repos ![image](https://user-images.githubusercontent.com/3243482/100716533-e6e2d300-33c9-11eb-866e-1e83ba228bf5.png) Adding a few flex statements fixes the alignment and centers `h1` text and the cog icon vertically. ![image](https://user-images.githubusercontent.com/3243482/100716605-f8c47600-33c9-11eb-8d69-0e37499cf641.png) | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1121/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
755721275 | MDU6SXNzdWU3NTU3MjEyNzU= | 1123 | Table actions hook are order dependent, should not be | 9599 | closed | 0 | 1 | 2020-12-03T00:47:12Z | 2020-12-03T00:50:17Z | 2020-12-03T00:50:17Z | OWNER | Got this error: https://github.com/simonw/datasette/runs/1489770800 ``` > assert get_table_actions_links(response_2.text) == [ {"label": "From async", "href": "/"}, {"label": "Database: fixtures", "href": "/"}, {"label": f"Table: {table_or_view}", "href": "/"}, ] E AssertionError: assert [{'href': '/'...'From async'}] == [{'href': '/'...: facetable'}] E At index 0 diff: {'label': 'Database: fixtures', 'href': '/'} != {'label': 'From async', 'href': '/'} E Use -v to get the full diff ``` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1123/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
753876808 | MDU6SXNzdWU3NTM4NzY4MDg= | 1119 | Include generated columns in fixtures.db, if SQLite version supports it | 9599 | closed | 0 | 1 | 2020-11-30T23:25:31Z | 2020-12-01T00:41:14Z | 2020-12-01T00:28:04Z | OWNER | In #1117 I added a one-off test that creates a DB with generated columns in it: https://github.com/simonw/datasette/blob/461670a0b87efa953141b449a9a261919864ceb3/tests/test_api.py#L1933-L1964 If this table was conditionally added to `fixtures.db` (if SQLite supports the feature) it would be available in the demo at https://latest.datasette.io/ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1119/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed |