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 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1699174055 | I_kwDOCGYnMM5lR1an | 539 | `--raw-lines` option, like `--raw` for multiple lines | 9599 | closed | 0 | 4 | 2023-05-07T18:07:46Z | 2023-05-07T18:43:24Z | 2023-05-07T18:26:18Z | OWNER | I wanted to output newline-separated output of the first column of every row in the results - like `--row` but for more than one line. | 140912432 | issue | { "url": "https://api.github.com/repos/simonw/sqlite-utils/issues/539/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1686033652 | I_kwDOBm6k_c5kftT0 | 2065 | Datasette cannot be installed with Rye | 9599 | closed | 0 | 4 | 2023-04-27T03:35:42Z | 2023-04-27T05:09:36Z | 2023-04-27T05:09:36Z | OWNER | https://github.com/mitsuhiko/rye I tried this: rye install datasette But now: ``` % ~/.rye/shims/datasette Traceback (most recent call last): File "/Users/simon/.rye/shims/datasette", line 5, in <module> from datasette.cli import cli File "/Users/simon/.rye/tools/datasette/lib/python3.11/site-packages/datasette/cli.py", line 17, in <module> from .app import ( File "/Users/simon/.rye/tools/datasette/lib/python3.11/site-packages/datasette/app.py", line 14, in <module> import pkg_resources ModuleNotFoundError: No module named 'pkg_resources' ``` I think that's because `setuptools` is not included in Rye. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/2065/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1686042269 | I_kwDOBm6k_c5kfvad | 2066 | Failing test: httpx.InvalidURL: URL too long | 9599 | closed | 0 | 10 | 2023-04-27T03:48:47Z | 2023-04-27T04:27:50Z | 2023-04-27T04:27:50Z | OWNER | https://github.com/simonw/datasette/actions/runs/4815723640/jobs/8574667731 ``` def urlparse(url: str = "", **kwargs: typing.Optional[str]) -> ParseResult: # Initial basic checks on allowable URLs. # --------------------------------------- # Hard limit the maximum allowable URL length. if len(url) > MAX_URL_LENGTH: > raise InvalidURL("URL too long") E httpx.InvalidURL: URL too long /opt/hostedtoolcache/Python/3.7.16/x64/lib/python3.7/site-packages/httpx/_urlparse.py:155: InvalidURL =========================== short test summary info ============================ FAILED tests/test_csv.py::test_max_csv_mb - httpx.InvalidURL: URL too long ``` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/2066/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1203842656 | I_kwDOCGYnMM5HwS5g | 425 | `sqlite3.NotSupportedError`: deterministic=True requires SQLite 3.8.3 or higher | 9599 | closed | 0 | 5 | 2022-04-13T22:16:53Z | 2023-04-15T20:14:58Z | 2022-04-13T22:48:57Z | OWNER | Got this error while investigating: - #421 Even though I was using the `LD_PRELOAD` trick from https://til.simonwillison.net/sqlite/ld-preload to use a newer version of SQLite. _Originally posted by @simonw in https://github.com/simonw/sqlite-utils/issues/421#issuecomment-1098531354_ | 140912432 | issue | { "url": "https://api.github.com/repos/simonw/sqlite-utils/issues/425/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1661617056 | I_kwDODD6af85jCkOg | 15 | ambiguous column name: createdAt - on checkin_details view | 9599 | closed | 0 | 0 | 2023-04-11T01:07:47Z | 2023-04-11T03:16:37Z | 2023-04-11T03:16:37Z | MEMBER | It looks like Swarm changed their schema and now both `venues` and `checkins` have `createdAt` fields. Which breaks this view: https://github.com/dogsheep/swarm-to-sqlite/blob/719b6e96a016d0ca8b316d3bed9c2a7a0cb499ee/swarm_to_sqlite/utils.py#L171-L188 | 205429375 | issue | { "url": "https://api.github.com/repos/dogsheep/swarm-to-sqlite/issues/15/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1114543475 | I_kwDOCGYnMM5CbpVz | 388 | Link to stable docs from older versions | 9599 | closed | 0 | 7 | 2022-01-26T01:55:46Z | 2023-03-26T23:43:12Z | 2022-01-26T02:00:22Z | OWNER | https://sqlite-utils.datasette.io/en/2.14.1/ isn't showing a link to the stable release right now. I should also apply the same fix I used for Datasette in: - https://github.com/simonw/datasette/issues/1608 TIL: https://til.simonwillison.net/readthedocs/link-from-latest-to-stable | 140912432 | issue | { "url": "https://api.github.com/repos/simonw/sqlite-utils/issues/388/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1109808154 | I_kwDOBm6k_c5CJlQa | 1608 | Documentation should clarify /stable/ vs /latest/ | 9599 | closed | 0 | 15 | 2022-01-20T22:02:59Z | 2023-03-26T23:41:12Z | 2022-01-20T22:53:17Z | OWNER | It's not currently clear what the difference between https://docs.datasette.io/en/latest/ and https://docs.datasette.io/en/stable/ is - I should fix that. On Twitter: https://twitter.com/simonw/status/1484285006243528705 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1608/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1551694938 | PR_kwDOBm6k_c5IQeKz | 1999 | ?_extra= support (draft) | 9599 | closed | 0 | 49 | 2023-01-21T04:55:18Z | 2023-03-22T22:49:41Z | 2023-03-22T22:49:40Z | OWNER | simonw/datasette/pulls/1999 | Refs: - #262 <!-- readthedocs-preview datasette start --> ---- :books: Documentation preview :books:: https://datasette--1999.org.readthedocs.build/en/1999/ <!-- readthedocs-preview datasette end --> | 107914493 | pull | { "url": "https://api.github.com/repos/simonw/datasette/issues/1999/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
0 | |||||
1633077183 | I_kwDOBm6k_c5hVse_ | 2041 | Remove obsolete table POST code | 9599 | closed | 0 | 8755003 | 2 | 2023-03-21T01:01:40Z | 2023-03-21T01:17:44Z | 2023-03-21T01:17:43Z | OWNER | Spotted this in: - #1999 `POST /db/table` currently executes obsolete code for inserting a row - I replaced that with `/db/table/-/insert` in https://github.com/simonw/datasette/commit/6e788b49edf4f842c0817f006eb9d865778eea5e but forgot to remove the old code. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/2041/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1620516340 | I_kwDOCGYnMM5glx30 | 533 | ReadTheDocs error: not all arguments converted during string formatting | 9599 | closed | 0 | 2 | 2023-03-12T21:21:05Z | 2023-03-12T21:25:33Z | 2023-03-12T21:25:33Z | OWNER | This came up as a failure running tests for: - #531 Traceback on https://readthedocs.org/projects/sqlite-utils/builds/19749348/ ``` File "/home/docs/checkouts/readthedocs.org/user_builds/sqlite-utils/envs/531/lib/python3.8/site-packages/docutils/parsers/rst/states.py", line 889, in interpreted nodes, messages2 = role_fn(role, rawsource, text, lineno, self) File "/home/docs/checkouts/readthedocs.org/user_builds/sqlite-utils/envs/531/lib/python3.8/site-packages/sphinx/ext/extlinks.py", line 103, in role title = caption % part TypeError: not all arguments converted during string formatting Exception occurred: File "/home/docs/checkouts/readthedocs.org/user_builds/sqlite-utils/envs/531/lib/python3.8/site-packages/sphinx/ext/extlinks.py", line 103, in role title = caption % part TypeError: not all arguments converted during string formatting ``` | 140912432 | issue | { "url": "https://api.github.com/repos/simonw/sqlite-utils/issues/533/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1615891776 | I_kwDOBm6k_c5gUI1A | 2037 | Test failure: FAILED tests/test_cli.py::test_install_requirements - FileNotFoundError | 9599 | closed | 0 | 3 | 2023-03-08T20:30:06Z | 2023-03-09T22:33:39Z | 2023-03-09T22:33:39Z | OWNER | > FAILED tests/test_cli.py::test_install_requirements - FileNotFoundError: [Errno 2] No such file or directory From https://github.com/simonw/datasette/actions/runs/4348548218/jobs/7597208191 ``` =================================== FAILURES =================================== __________________________ test_install_requirements ___________________________ run_module = <MagicMock name='run_module' id='139768358191936'> @mock.patch("datasette.cli.run_module") def test_install_requirements(run_module): runner = CliRunner() > with runner.isolated_filesystem(): /home/runner/work/datasette/datasette/tests/test_cli.py:184: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /opt/hostedtoolcache/Python/3.9.16/x64/lib/python3.9/contextlib.py:119: in __enter__ return next(self.gen) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <click.testing.CliRunner object at 0x7f1e5bfb9490>, temp_dir = None @contextlib.contextmanager def isolated_filesystem( self, temp_dir: t.Optional[t.Union[str, os.PathLike]] = None ) -> t.Iterator[str]: """A context manager that creates a temporary directory and changes the current working directory to it. This isolates tests that affect the contents of the CWD to prevent them from interfering with each other. :param temp_dir: Create the temporary directory under this directory. If given, the created directory is not removed when exiting. .. versionchanged:: 8.0 Added the ``temp_dir`` parameter. """ > cwd = os.getcwd() E FileNotFoundError: [Errno 2] No such file or directory /opt/hostedtoolcache/Python/3.9.16/x64/lib/python3.9/site-packages/click/testing.py:466: FileNotFoundError ``` Not sure why it only affected the "[Calculate test coverage](https://github.com/simonw/datasette/actions/workflows/test-coverage.yml)" one. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/2037/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1617769847 | I_kwDOJHON9s5gbTV3 | 7 | Folder support | 9599 | closed | 0 | 6 | 2023-03-09T18:21:33Z | 2023-03-09T20:48:18Z | 2023-03-09T20:48:18Z | MEMBER | Notes can live in folders. These relationships should be exported too. | 611552758 | issue | { "url": "https://api.github.com/repos/dogsheep/apple-notes-to-sqlite/issues/7/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1617962395 | I_kwDOJHON9s5gcCWb | 10 | Include schema in README | 9599 | closed | 0 | 0 | 2023-03-09T20:38:59Z | 2023-03-09T20:48:18Z | 2023-03-09T20:48:18Z | MEMBER | As seen in other tools like https://github.com/simonw/git-history | 611552758 | issue | { "url": "https://api.github.com/repos/dogsheep/apple-notes-to-sqlite/issues/10/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1616354999 | I_kwDOJHON9s5gV563 | 2 | First working version | 9599 | closed | 0 | 7 | 2023-03-09T03:53:00Z | 2023-03-09T05:10:22Z | 2023-03-09T05:10:22Z | MEMBER | It's going to shell out to `osascript` as seen in: - #1 I'm going with that option because https://appscript.sourceforge.io/status.html warns against the other potential methods: > Apple eliminated its Mac Automation department in 2016. The future of AppleScript and its related technologies is unclear. Caveat emptor. But `osascript` looks pretty stable to me. | 611552758 | issue | { "url": "https://api.github.com/repos/dogsheep/apple-notes-to-sqlite/issues/2/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1616422013 | I_kwDOJHON9s5gWKR9 | 3 | `apple-notes-to-sqlite --dump` option | 9599 | closed | 0 | 0 | 2023-03-09T05:05:49Z | 2023-03-09T05:06:14Z | 2023-03-09T05:06:14Z | MEMBER | Option that doesn't write to the database at all, it just outputs all the notes to stdout as newline-delimited JSON. | 611552758 | issue | { "url": "https://api.github.com/repos/dogsheep/apple-notes-to-sqlite/issues/3/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1616347574 | I_kwDOJHON9s5gV4G2 | 1 | Initial proof of concept with ChatGPT | 9599 | closed | 0 | 3 | 2023-03-09T03:44:39Z | 2023-03-09T03:51:55Z | 2023-03-09T03:51:55Z | MEMBER | I'm using ChatGPT to figure out enough AppleScript to get at my notes data. | 611552758 | issue | { "url": "https://api.github.com/repos/dogsheep/apple-notes-to-sqlite/issues/1/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1615862295 | I_kwDOBm6k_c5gUBoX | 2036 | `publish cloudrun` reuses image tags, which can lead to very surprising deploy problems | 9599 | closed | 0 | 6 | 2023-03-08T20:11:44Z | 2023-03-08T20:57:34Z | 2023-03-08T20:57:34Z | OWNER | See this issue: - https://github.com/simonw/datasette.io/issues/141 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/2036/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1612296210 | I_kwDOBm6k_c5gGbAS | 2033 | `datasette install -r requirements.txt` | 9599 | closed | 0 | 2 | 2023-03-06T22:17:17Z | 2023-03-06T22:54:52Z | 2023-03-06T22:27:34Z | OWNER | Would be useful for cases where you want to install a whole set of plugins in one go, e.g. when running tutorials in GitHub Codespaces. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/2033/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1034535001 | I_kwDOBm6k_c49qcBZ | 1497 | Publish to Docker Hub failing with "libcrypt.so.1: cannot open shared object file" | 9599 | closed | 0 | 18 | 2021-10-24T22:57:07Z | 2023-01-18T17:13:45Z | 2021-10-24T23:36:55Z | OWNER | This means the Datasette 0.59.1 release has not been published to Docker Hub. Here's where that failed: https://github.com/simonw/datasette/runs/3991043374?check_suite_focus=true ``` Preparing to unpack .../libc6_2.32-4_amd64.deb ... debconf: unable to initialize frontend: Dialog debconf: (TERM is not set, so the dialog frontend is not usable.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.28.1 /usr/local/share/perl/5.28.1 /usr/lib/x86_64-linux-gnu/perl5/5.28 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.28 /usr/share/perl/5.28 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.) debconf: falling back to frontend: Teletype Checking for services that may need to be restarted... Checking init scripts... Unpacking libc6:amd64 (2.32-4) over (2.28-10) ... Setting up libc6:amd64 (2.32-4) ... /usr/bin/perl: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory dpkg: error processing package libc6:amd64 (--configure): installed libc6:amd64 package post-installation script subprocess returned error exit status 127 Errors were encountered while processing: libc6:amd64 E: Sub-process /usr/bin/dpkg returned an error code (1) The command '/bin/sh -c apt-get update && apt-get -y --no-install-recommends install software-properties-common && add-apt-repository "deb http://httpredir.debian.org/debian sid main" && apt-get update && apt-get -t sid install -y --no-install-recommends libsqlite3-mod-spatialite && apt-get remove -y software-properties-common && apt clean && rm -rf /var/lib/apt && rm -rf /var/lib/dpkg/info/*' returned a non-zero code: 100 ``` Same problem when I attempted to publish using the "Push specific Docker tag" workflow… | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1497/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1529452371 | I_kwDOBm6k_c5bKZdT | 1987 | installpython3.com is now a spam website | 9599 | closed | 0 | 4 | 2023-01-11T17:55:12Z | 2023-01-11T18:29:26Z | 2023-01-11T18:29:25Z | OWNER | Need to stop linking to it from the docs. I'll link to https://www.python.org/about/gettingstarted/ instead. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1987/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 | ||||||
1515185383 | I_kwDOBm6k_c5aT-Tn | 1971 | Upgrade for Sphinx 6.0 (once Furo has support for it) | 9599 | closed | 0 | 3 | 2022-12-31T19:04:35Z | 2023-01-10T02:02:34Z | 2023-01-10T02:02:34Z | OWNER | A deployment of #1967 to ReadTheDocs just failed like this: https://readthedocs.org/projects/datasette/builds/19045460/ ``` Running Sphinx v6.0.0 making output directory... done building [mo]: targets for 0 po files that are out of date building [html]: targets for 28 source files that are out of date updating environment: [new config] 28 added, 0 changed, 0 removed reading sources... [ 3%] authentication reading sources... [ 7%] binary_data reading sources... [ 10%] changelog Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/datasette/envs/latest/lib/python3.9/site-packages/docutils/statemachine.py", line 299, in next_line self.line = self.input_lines[self.line_offset] File "/home/docs/checkouts/readthedocs.org/user_builds/datasette/envs/latest/lib/python3.9/site-packages/docutils/statemachine.py", line 1136, in __getitem__ return self.data[i] IndexError: list index out of range During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/datasette/envs/latest/lib/python3.9/site-packages/docutils/statemachine.py", line 226, in run self.next_line() File "/home/docs/checkouts/readthedocs.org/user_builds/datasette/envs/latest/lib/python3.9/site-packages/docutils/statemachine.py", line 302, in next_line raise EOFError EOFError During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/datasette/envs/latest/lib/python3.9/site-packages/sphinx/cmd/build.py", line 281, in build_main app.build(args.force_all, args.filenames) File "/home/docs/checkouts/readthedocs.org/user_builds/datasette/envs/latest/lib/python3.9/site-packages/sphinx/application.py", line 344, in build self.builder.build_update() File "/home/docs/checkouts/readthedocs.org/user_builds/datasette/envs/latest/lib/python3.9/site-packages/sphinx/bu… | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1971/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1526635374 | PR_kwDOBm6k_c5HCCY2 | 1984 | Upgrade Sphinx | 9599 | closed | 0 | 1 | 2023-01-10T02:00:40Z | 2023-01-10T02:02:33Z | 2023-01-10T02:02:33Z | OWNER | simonw/datasette/pulls/1984 | Refs #1971 <!-- readthedocs-preview datasette start --> ---- :books: Documentation preview :books:: https://datasette--1984.org.readthedocs.build/en/1984/ <!-- readthedocs-preview datasette end --> | 107914493 | pull | { "url": "https://api.github.com/repos/simonw/datasette/issues/1984/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
0 | |||||
710650633 | MDU6SXNzdWU3MTA2NTA2MzM= | 979 | Default table view JSON should include CREATE TABLE | 9599 | closed | 0 | 3 | 2020-09-28T23:54:58Z | 2023-01-09T15:32:39Z | 2023-01-09T15:32:22Z | OWNER | https://latest.datasette.io/fixtures/facetable.json doesn't currently include the CREATE TABLE statement for the page, even though it's available on the HTML version at https://latest.datasette.io/fixtures/facetable | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/979/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1524076587 | I_kwDOBm6k_c5a15Ar | 1979 | More useful error message if enable_load_extension is not available | 9599 | closed | 0 | 5 | 2023-01-07T19:13:19Z | 2023-01-08T00:21:23Z | 2023-01-08T00:21:23Z | OWNER | I get this from: datasette --load-extension spatialite --get /-/versions.json ``` File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/datasette/app.py", line 614, in _prepare_connection conn.enable_load_extension(True) AttributeError: 'sqlite3.Connection' object has no attribute 'enable_load_extension' ``` It would be useful if Datasette caught this error and output something more friendly. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1979/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
957310278 | MDU6SXNzdWU5NTczMTAyNzg= | 1409 | `default_allow_sql` setting (a re-imagining of the old `allow_sql` setting) | 9599 | closed | 0 | 3268330 | 10 | 2021-07-31T19:48:56Z | 2023-01-07T18:06:01Z | 2023-01-05T00:51:31Z | OWNER | In 49d6d2f7b0f6cb02e25022e1c9403811f1fa0a7c as part of #813 I removed the `allow_sql` setting - on the basis that users could disable the ability to execute custom SQL queries using the new permission system instead. I don't think this was the right decision. Disabling custom SQL is an important security capability, and explaining how to do it using permissions is significantly more complex than letting people know they can add `--setting allow_sql off`. So I want to bring that setting back - maybe with a different, better name - and have it modify the default for that option if the permissions system doesn't have an opinion. That way people can still use the setting but then use permissions to allow specific signed-in users access to execute SQL. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1409/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1515182998 | I_kwDOBm6k_c5aT9uW | 1970 | Path "None" in _internal database table | 9599 | closed | 0 | 2 | 2022-12-31T18:51:05Z | 2022-12-31T19:22:58Z | 2022-12-31T18:52:49Z | OWNER | See https://latest.datasette.io/_internal/databases (after https://latest.datasette.io/login-as-root) <img width="551" alt="image" src="https://user-images.githubusercontent.com/9599/210153171-625d3706-8b1a-4c80-9662-46985350f6b6.png"> | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1970/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1515186569 | I_kwDOBm6k_c5aT-mJ | 1972 | Fix Sphinx warning about extlink extension | 9599 | closed | 0 | 0 | 2022-12-31T19:12:04Z | 2022-12-31T19:13:26Z | 2022-12-31T19:13:26Z | OWNER | ``` [sphinx-autobuild] > sphinx-build -b html /Users/simon/Dropbox/Development/datasette/docs /Users/simon/Dropbox/Development/datasette/docs/_build Running Sphinx v5.3.0 loading pickled environment... done WARNING: extlinks: Sphinx-6.0 will require a caption string to contain exactly one '%s' and all other '%' need to be escaped as '%%'. ``` _Originally posted by @simonw in https://github.com/simonw/datasette/issues/1971#issuecomment-1368266904_ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1972/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1501713288 | I_kwDOBm6k_c5ZglOI | 1963 | 0.63.3 bugfix release | 9599 | closed | 0 | 2 | 2022-12-18T02:48:15Z | 2022-12-18T03:26:55Z | 2022-12-18T03:26:55Z | OWNER | I'm going to ship a release which back-ports these two fixes: - https://github.com/simonw/datasette/issues/1958 - https://github.com/simonw/datasette/issues/1955 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1963/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
806849424 | MDU6SXNzdWU4MDY4NDk0MjQ= | 1221 | Support SSL/TLS directly | 9599 | closed | 0 | 4 | 2021-02-12T00:18:29Z | 2022-12-18T02:39:04Z | 2021-02-12T00:52:18Z | OWNER | This should be pretty easy because Uvicorn supports them already. Need a good mechanism for testing it - https://pypi.org/project/trustme/ looks ideal. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1221/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1499081664 | I_kwDOBm6k_c5ZWivA | 1959 | Refactor test suite to use mostly `async def` tests | 9599 | closed | 0 | 9 | 2022-12-15T21:02:54Z | 2022-12-17T21:49:37Z | 2022-12-17T21:49:36Z | OWNER | I got blocked working on this issue due to weird and hard-to-debug test suite problems: - #1955 The test suite has needed a major upgrade for several years now. It has a LOT of `def test_...` synchronous functions that could be upgraded to `async def` for better performance and less test complexity - I've used the new `async def` pattern in plugins and new tests for a couple of years now. Hopefully I can get more of the tests to use in-memory named databases too, ideally so I can fix this consistent problem: - #1843 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1959/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1499150951 | PR_kwDOBm6k_c5FlZmG | 1960 | Port as many tests as possible to async def tests against ds_client | 9599 | closed | 0 | 29 | 2022-12-15T21:45:53Z | 2022-12-17T21:47:56Z | 2022-12-17T21:47:55Z | OWNER | simonw/datasette/pulls/1960 | Refs: - #1959 <!-- readthedocs-preview datasette start --> ---- :books: Documentation preview :books:: https://datasette--1960.org.readthedocs.build/en/1960/ <!-- readthedocs-preview datasette end --> | 107914493 | pull | { "url": "https://api.github.com/repos/simonw/datasette/issues/1960/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
0 | |||||
1499387139 | PR_kwDOBm6k_c5FmNXs | 1961 | Use click.echo() instead of print() for --root option | 9599 | closed | 0 | 0 | 2022-12-16T00:54:56Z | 2022-12-16T00:55:19Z | 2022-12-16T00:55:18Z | OWNER | simonw/datasette/pulls/1961 | This ensures the URL is output correctly when running under Docker. Closes #1958 <!-- readthedocs-preview datasette start --> ---- :books: Documentation preview :books:: https://datasette--1961.org.readthedocs.build/en/1961/ <!-- readthedocs-preview datasette end --> | 107914493 | pull | { "url": "https://api.github.com/repos/simonw/datasette/issues/1961/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
0 | |||||
1495821607 | I_kwDOBm6k_c5ZKG0n | 1953 | Release notes for Datasette 1.0a2 | 9599 | closed | 0 | 8711695 | 2 | 2022-12-14T06:26:40Z | 2022-12-15T02:02:15Z | 2022-12-15T02:01:08Z | OWNER | https://github.com/simonw/datasette/milestone/27?closed=1 https://github.com/simonw/datasette/compare/1.0a1...9ad76d279e2c3874ca5070626a25458ce129f126 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1953/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1473411197 | I_kwDOBm6k_c5X0nh9 | 1927 | ignore:true/replace:true options for /db/-/create API | 9599 | closed | 0 | 8711695 | 5 | 2022-12-02T20:32:30Z | 2022-12-15T01:47:01Z | 2022-12-08T01:43:01Z | OWNER | See also: - #1924 It turns out I want to be able to call `/db/-/create` multiple times with the `rows` argument, so that I don't have to worry about creating the table first. As such I find myself wanting support for the `"insert": true` and `"replace": true` options as well. Still TODO: - [x] A test for the case where you call `/-/create` twice with `rows` without using these options - [x] `pk` should be required if you are using these options - [x] Error if you pass `pk` and the table exists already but has a different `pk` - [x] Documentation for `insert` and `replace` - and what happens if you repeat a `/-/create` with rows generally - [x] Documentation should explain that you are allowed to call `/-/create` more than once using `rows`. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1927/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1483320357 | I_kwDOBm6k_c5Yaawl | 1937 | /db/-/create API should require insert-rows permission to use row: or rows: option | 9599 | closed | 0 | 8711695 | 2 | 2022-12-08T01:33:09Z | 2022-12-14T20:21:26Z | 2022-12-14T20:21:26Z | OWNER | Otherwise someone with `create-table` but no` insert-rows` permission could abuse it to insert data. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1937/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1497288666 | I_kwDOBm6k_c5ZPs_a | 1956 | Handle abbreviations properly in permission_allowed_actor_restrictions | 9599 | closed | 0 | 8711695 | 2 | 2022-12-14T19:54:21Z | 2022-12-14T20:04:29Z | 2022-12-14T20:04:28Z | OWNER | This code currently assumes abbreviations are: ```pyton action_initials = "".join([word[0] for word in action.split("-")]) ``` https://github.com/simonw/datasette/blob/1a3dcf494376e32f7cff110c86a88e5b0a3f3924/datasette/default_permissions.py#L182-L208 That's no longer correct, they are now registered by the new plugin hook: - #1939 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1956/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1493390939 | I_kwDOBm6k_c5ZA1Zb | 1947 | UI to create reduced scope tokens from the `/-/create-token` page | 9599 | closed | 0 | 8711695 | 22 | 2022-12-13T05:10:48Z | 2022-12-14T05:22:00Z | 2022-12-14T05:13:24Z | OWNER | Split from: - #1855 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1947/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1495431932 | I_kwDOBm6k_c5ZInr8 | 1951 | `datasette.create_token(...)` method for creating signed API tokens | 9599 | closed | 0 | 8711695 | 6 | 2022-12-14T01:25:34Z | 2022-12-14T02:43:45Z | 2022-12-14T02:42:05Z | OWNER | I need this for: - #1947 And I can refactor this to use it too: - #1855 By making this a documented internal API it can be used by other plugins too. It's also going to be really useful for writing tests. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1951/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1423336089 | I_kwDOBm6k_c5U1mKZ | 1855 | `datasette create-token` ability to create tokens with a reduced set of permissions | 9599 | closed | 0 | 8711695 | 19 | 2022-10-26T02:20:52Z | 2022-12-14T01:24:49Z | 2022-12-13T05:20:24Z | OWNER | Initial design ideas: https://github.com/simonw/datasette/issues/1852#issuecomment-1289733483 > Token design concept: > > ```json > { > "t": { > "a": ["ir", "ur", "dr"], > "d": { > "fixtures": ["ir", "ur", "dr"] > }, > "t": { > "fixtures": { > "searchable": ["ir"] > } > } > } > } > ``` > > That JSON would be minified and signed. > > Minified version of the above looks like this (101 characters): > > `{"t":{"a":["ir","ur","dr"],"d":{"fixtures":["ir","ur","dr"]},"t":{"fixtures":{"searchable":["ir"]}}}}` > > The `"t"` key shows this is a token that as a default API key. > > `"a"` means "all" - these are permissions that have been granted on all tables and databases. > > `"d"` means "databases" - this is a way to set permissions for all tables in a specific database. > > `"t"` means "tables" - this lets you set permissions at a finely grained table level. > > Then the permissions themselves are two character codes which are shortened versions - so: > > * `ir` = `insert-row` > * `ur` = `update-row` > * `dr` = `delete-row` ## Remaining tasks - [x] Add these options to the `datasette create-token` command - [x] Tests for `datasette create-token` options - [x] Documentation for those options at https://docs.datasette.io/en/latest/authentication.html#datasette-create-token - [x] A way to handle permissions that don't have known abbreviations (permissions added by plugins). Probably need to solve the plugin permission registration problem as part of that - [x] Stop hard-coding names of actions in the `permission_allowed_actor_restrictions` function | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1855/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1495241162 | I_kwDOBm6k_c5ZH5HK | 1950 | Bad ?_sort returns a 500 error, should be a 400 | 9599 | closed | 0 | 2 | 2022-12-13T22:08:16Z | 2022-12-13T22:23:22Z | 2022-12-13T22:23:22Z | OWNER | https://latest.datasette.io/fixtures/facetable?_sort=bad <img width="453" alt="image" src="https://user-images.githubusercontent.com/9599/207454481-2ba2e2bd-7400-47a6-b8a1-f898a2d364d8.png"> | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1950/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1485488236 | PR_kwDOBm6k_c5E1iJG | 1938 | "permissions" blocks in metadata.json/yaml | 9599 | closed | 0 | 8711695 | 3 | 2022-12-08T22:07:36Z | 2022-12-13T05:23:18Z | 2022-12-13T05:23:18Z | OWNER | simonw/datasette/pulls/1938 | Refs #1636 - [x] Documentation - [ ] Implementation - [ ] Validate metadata to check there are no nonsensical permissions (like `debug-menu` set at the table level) - [ ] Tests <!-- readthedocs-preview datasette start --> ---- :books: Documentation preview :books:: https://datasette--1938.org.readthedocs.build/en/1938/ <!-- readthedocs-preview datasette end --> | 107914493 | pull | { "url": "https://api.github.com/repos/simonw/datasette/issues/1938/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
0 | ||||
1493339206 | I_kwDOBm6k_c5ZAoxG | 1946 | `datasette --get` mechanism for sending tokens | 9599 | closed | 0 | 8711695 | 2 | 2022-12-13T04:25:05Z | 2022-12-13T04:36:57Z | 2022-12-13T04:36:57Z | OWNER | > For the tests for `datasette create-token` it would be useful if `datasette --get` had a mechanism for sending an `Authorization: Bearer X` header. _Originally posted by @simonw in https://github.com/simonw/datasette/issues/1855#issuecomment-1347731288_ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1946/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1493306655 | I_kwDOBm6k_c5ZAg0f | 1945 | `view-instance` should not be checked for /-/actor.json | 9599 | closed | 0 | 8711695 | 0 | 2022-12-13T04:01:46Z | 2022-12-13T04:11:56Z | 2022-12-13T04:11:56Z | OWNER | Spotted this while testing: - #1855 ``` export TOKEN=$(datasette create-token root --secret s -a foo) curl -H "Authorization: Bearer $TOKEN" http://localhost:8002/-/actor.json ``` Returned a Forbidden error (and not in JSON either). | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1945/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1138008042 | I_kwDOBm6k_c5D1J_q | 1636 | "permissions" propery in metadata for configuring arbitrary permissions | 9599 | closed | 0 | 8711695 | 14 | 2022-02-15T00:25:59Z | 2022-12-13T02:40:50Z | 2022-12-13T02:40:50Z | OWNER | The `"allow"` block mechanism can already be used to configure various default permissions. When adding permissions to `datasette-tiddlywiki` I realized it would be good to be able to configure arbitrary permissions such as `edit-tiddlywiki` there too. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1636/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1485757511 | I_kwDOBm6k_c5YjtxH | 1939 | register_permissions(datasette) plugin hook | 9599 | closed | 0 | 8711695 | 20 | 2022-12-09T01:33:25Z | 2022-12-13T02:07:50Z | 2022-12-13T02:05:56Z | OWNER | A plugin hook that adds more named permissions to the list which is initially populated here: https://github.com/simonw/datasette/blob/e539c1c024bc62d88df91d9107cbe37e7f0fe55f/datasette/permissions.py#L1-L19 Originally imagined this hook in this comment: - https://github.com/simonw/datasette/issues/1881#issuecomment-1301639370 I need this for a few reasons: - https://github.com/simonw/datasette/issues/1636 - Needs it in order to validate that permissions defined in `metadata.json` are set in the right place (don't set an instance permissions at table level for example) - https://github.com/simonw/datasette/issues/1855 - Needs it to be able to register additional abbreviations for use in signed cookies - And for validation when you use `datasette create-token` and pass in extra permissions - The https://latest.datasette.io/-/permissions debug interface needs it to add extra debug options to the `<select>` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1939/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1486011362 | PR_kwDOBm6k_c5E3XqB | 1940 | register_permissions() plugin hook | 9599 | closed | 0 | 8711695 | 6 | 2022-12-09T05:09:28Z | 2022-12-13T02:05:55Z | 2022-12-13T02:05:54Z | OWNER | simonw/datasette/pulls/1940 | Refs #1939 From this comment: https://github.com/simonw/datasette/issues/1939#issuecomment-1343872168 - [x] Unit test for the registration plugin hook itself - [x] Use them in `check_permission_actions_are_documented` test in `conftest.py` - [x] Add description field to `Permissions` (and update tests and docs) - [x] Documentation for `datasette.permissions` dictionary - [x] If no `default=` provided in call to `permission_allowed()` then use default from `datasette.permissions` list - [x] Remove `default=` from a bunch of places - [x] Throw an error if two permissions are registered with the same name or abbreviation (but other attributes differ) - [x] Update authentication and permissions documentation to explain that permissions are now registered and have a registered default <!-- readthedocs-preview datasette start --> ---- :books: Documentation preview :books:: https://datasette--1940.org.readthedocs.build/en/1940/ <!-- readthedocs-preview datasette end --> | 107914493 | pull | { "url": "https://api.github.com/repos/simonw/datasette/issues/1940/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
0 | ||||
1487764628 | I_kwDOCGYnMM5YrXyU | 518 | flake8 ValueError: Error code '#' supplied to 'extend-ignore' option... | 9599 | closed | 0 | 0 | 2022-12-10T01:30:24Z | 2022-12-10T01:36:46Z | 2022-12-10T01:36:46Z | OWNER | > `Error code '#' supplied to 'extend-ignore' option does not match '^[A-Z]{1,3}[0-9]{0,3}$'` https://github.com/simonw/sqlite-utils/actions/runs/3662011265/jobs/6190770361 I think from this: https://github.com/simonw/sqlite-utils/blob/e660635cea6c32f4022818380b1e1ee88e7c93a6/setup.cfg#L1-L3 | 140912432 | issue | { "url": "https://api.github.com/repos/simonw/sqlite-utils/issues/518/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1487757143 | I_kwDOCGYnMM5YrV9X | 517 | Drop support for Python 3.6 | 9599 | closed | 0 | 1 | 2022-12-10T01:23:31Z | 2022-12-10T01:36:36Z | 2022-12-10T01:36:36Z | OWNER | CI has started failing for Python 3.6: https://github.com/simonw/sqlite-utils/actions/runs/3576322798 <img width="945" alt="image" src="https://user-images.githubusercontent.com/9599/206821688-e4176cb3-ea82-460d-8e93-626fb4fa0269.png"> It's fixable by swiching away from `ubuntu-latest` according to: - https://github.com/actions/setup-python/issues/355#issuecomment-1335042510 But https://endoflife.date/python says that 3.6 end of life was almost 6 years ago, and end of security support nearly 1 year ago. So I'm OK dropping support entirely - Python 3.6 users will still be able to install version 3.30, just not any releases that come next. | 140912432 | issue | { "url": "https://api.github.com/repos/simonw/sqlite-utils/issues/517/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1434094365 | I_kwDOBm6k_c5Veosd | 1881 | Tool for simulating permission checks against actors | 9599 | closed | 0 | 9 | 2022-11-03T04:43:20Z | 2022-12-09T01:38:21Z | 2022-11-04T00:13:05Z | OWNER | In working on this issue: - #1855 I realized that if I'm going to make actors more complicated (the proposed `_r` key for additional restricted permissions) I really need an interactive tool for simulating these checks, similar to the https://latest.datasette.io/-/allow-debug tool. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1881/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1432013704 | I_kwDOBm6k_c5VWsuI | 1878 | /db/table/-/upsert API | 9599 | closed | 0 | 8711695 | 8 | 2022-11-01T20:01:18Z | 2022-12-08T01:12:18Z | 2022-12-08T01:12:17Z | OWNER | Equivalent to `sqlite-utils upsert`: https://sqlite-utils.datasette.io/en/stable/python-api.html#upserting-data | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1878/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1473814539 | PR_kwDOBm6k_c5EMVug | 1931 | /db/table/-/upsert | 9599 | closed | 0 | 8711695 | 8 | 2022-12-03T07:01:44Z | 2022-12-08T01:12:17Z | 2022-12-08T01:12:16Z | OWNER | simonw/datasette/pulls/1931 | Refs #1878 Still todo: - [x] Support `"return": true` properly for upserts (with tests) - [x] Require both `insert-row` and `update-row` permissions - [x] Tests are going to need to cover both rowid-only and compound primary key tables, including all of the error states - [x] Documentation <!-- readthedocs-preview datasette start --> ---- :books: Documentation preview :books:: https://datasette--1931.org.readthedocs.build/en/1931/ <!-- readthedocs-preview datasette end --> | 107914493 | pull | { "url": "https://api.github.com/repos/simonw/datasette/issues/1931/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
0 | ||||
1473481262 | I_kwDOBm6k_c5X04ou | 1928 | Hacker News Datasette write demo | 9599 | closed | 0 | 7 | 2022-12-02T21:17:41Z | 2022-12-02T23:47:11Z | 2022-12-02T21:43:19Z | OWNER | Idea is to have my existing scraper at https://github.com/simonw/scrape-hacker-news-by-domain also write to my private Datasette Cloud account, then create an atom feed from it. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1928/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 | |||||
1214859703 | I_kwDOBm6k_c5IaUm3 | 1719 | Refactor `RowView` and remove `RowTableShared` | 9599 | closed | 0 | 3 | 2022-04-25T18:06:24Z | 2022-12-01T21:15:19Z | 2022-04-25T18:33:44Z | OWNER | > The `RowTableShared` class is making this a whole lot more complicated. > > I'm going to split the `RowView` view out into an entirely separate `views/row.py` module. _Originally posted by @simonw in https://github.com/simonw/datasette/issues/1715#issuecomment-1108875068_ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1719/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1215174094 | I_kwDOBm6k_c5IbhXO | 1720 | Design plugin hook for extras | 9599 | closed | 0 | 14 | 2022-04-26T00:08:10Z | 2022-12-01T21:15:19Z | 2022-04-26T20:20:27Z | OWNER | Refs: - #262 - #1709 I realized that this is a really natural plugin hook - and if I design it as a hook I can implement Datasette's core extras as default plugins. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1720/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1212823665 | I_kwDOBm6k_c5ISjhx | 1715 | Refactor TableView to use asyncinject | 9599 | closed | 0 | 13 | 2022-04-22T21:43:39Z | 2022-12-01T21:15:18Z | 2022-04-28T22:26:56Z | OWNER | I've been working on a dependency injection mechanism in a separate library: - https://github.com/simonw/asyncinject I think it's ready to try out with Datasette to see if it's a pattern that will work here. I'm going to attempt to refactor `TableView` to use it. There are two overall goals here: - Use `asyncinject` to add parallel execution of some aspects of the table page - most notably I want to be able to execute the `count(*)` query, the `select ...` query, the various faceting queries and the facet suggestion queries in parallel - and measure if doing so is good for performance. - Use it to execute different output formats (possibly with some changes to the existing `register_output_renderer()` plugin hook). I want CSV and JSON to use the same mechanism that plugins use. Stretch goal is to get this working with streaming data too, see: - #1101 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1715/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1469973742 | I_kwDOBm6k_c5XngTu | 1922 | Make sure CORS works for write APIs | 9599 | closed | 0 | 7867486 | 13 | 2022-11-30T17:15:55Z | 2022-12-01T18:47:00Z | 2022-12-01T18:47:00Z | OWNER | Split from: - #1850 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1922/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1470509936 | I_kwDOBm6k_c5XpjNw | 1924 | Docs for replace:true and ignore:true options for insert API | 9599 | closed | 0 | 7867486 | 4 | 2022-12-01T01:33:25Z | 2022-12-01T18:15:15Z | 2022-12-01T02:08:02Z | OWNER | Equivalent to https://sqlite-utils.datasette.io/en/stable/cli.html#insert-replacing-data | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1924/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1470320227 | I_kwDOBm6k_c5Xo05j | 1923 | latest.datasette.io Cloud Run deploys failing | 9599 | closed | 0 | 3 | 2022-11-30T22:49:34Z | 2022-11-30T23:04:56Z | 2022-11-30T23:04:56Z | OWNER | https://github.com/simonw/datasette/actions/runs/3587402085/jobs/6038106719v ``` Warning: "service_account_key" has been deprecated. Please switch to using google-github-actions/auth which supports both Workload Identity Federation and Service Account Key JSON authentication. For more details, see https://github.com/google-github-actions/setup-gcloud#authorization Error: google-github-actions/setup-gcloud failed with: failed to execute command `gcloud --quiet auth activate-service-account *** --key-file -`: /opt/hostedtoolcache/gcloud/275.0.0/x64/lib/googlecloudsdk/core/console/console_io.py:544: SyntaxWarning: "is" with a literal. Did you mean "=="? if answer is None or (answer is '' and default is not None): ERROR: gcloud failed to load: module 'collections' has no attribute 'MutableMapping' ``` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1923/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 | |||||
1469043836 | I_kwDOBm6k_c5Xj9R8 | 1917 | Don't allow writable API to edit the `_memory` database | 9599 | closed | 0 | 7867486 | 2 | 2022-11-30T04:51:59Z | 2022-11-30T05:07:56Z | 2022-11-30T05:07:55Z | OWNER | It shows up on https://latest.datasette.io/-/api (once you are signed in as root) - but there's no point in creating tables in it because they likely won't persist from one request to the next, as it's not a shared named database. <img width="1122" alt="image" src="https://user-images.githubusercontent.com/9599/204710529-bfab8442-d89b-4928-9b9a-e39bc53c1673.png"> | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1917/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1468709531 | I_kwDOBm6k_c5Xirqb | 1915 | Interactive demo of Datasette 1.0 write APIs | 9599 | closed | 0 | 6 | 2022-11-29T21:16:03Z | 2022-11-30T04:05:46Z | 2022-11-30T04:05:46Z | OWNER | I'm going to try to get this working on https://latest.datasette.io/ - it already has a way for people to sign in as root, but none of the databases there are writable. So I'm going to build a plugin which adds a writable named in-memory database. And some kind of mechanism for clearing out that database on a regular basis - maybe tables in that database get deleted automatically an hour after they are created? (Would be neat to display their time-left-until-deleted too) | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1915/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1421529723 | I_kwDOBm6k_c5UutJ7 | 1850 | Write API in Datasette core | 9599 | closed | 0 | 8658075 | 13 | 2022-10-24T22:13:24Z | 2022-11-29T20:11:20Z | 2022-11-29T20:11:20Z | OWNER | I need this for Datasette Cloud, and in thinking it through I realized that it's really time Datasette grew a default write API as well. I'm going to mostly model this off `sqlite-utils`, since I've spent a bunch of time iterating on a pseudo-JSON API for that over the past few years (piping JSON to stdin etc). I want this for Datasette 1.0. I'm going to be building it in the new [1.0-dev](https://github.com/simonw/datasette/tree/1.0-dev) branch, which is automatically deployed to https://latest-1-0-dev.datasette.io/ running on Cloud Run. API features to build: - [x] #1852 - [x] #1856 - [x] #1857 - [x] #1858 - [x] #1859 - [x] #1871 - [x] #1888 - [x] #1868 - [x] #1851 - [x] #1863 - [x] #1864 - [x] #1866 - [x] https://github.com/simonw/datasette/issues/1882 - [x] #1862 - [x] #1874 - [x] https://github.com/simonw/datasette/issues/1887 - [x] #1877 Bumped to later on: - #1855 - #1878 - #1873 - #1875 - Make sure CORS works - https://github.com/simonw/datasette/issues/1889 - Alter a table - `sqlite-utils transform` style (more powerful than straight ALTER) - Execute SQL against a write connection - Maybe even multiple write SQL statements bundled in a single transaction - https://github.com/simonw/datasette/issues/1867 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1850/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1468603401 | I_kwDOBm6k_c5XiRwJ | 1913 | Release Datasette 1.0a0 | 9599 | closed | 0 | 8658075 | 9 | 2022-11-29T19:41:42Z | 2022-11-29T20:10:35Z | 2022-11-29T20:10:35Z | OWNER | I attempted the release just now - https://github.com/simonw/datasette/releases/tag/1.0a0 - and got an unexpected test failure: https://github.com/simonw/datasette/actions/runs/3577355358/attempts/1 ``` > assert delete_response.status_code == 200 E assert 404 == 200 E + where 404 = <Response [404 Not Found]>.status_code /home/runner/work/datasette/datasette/tests/test_api_write.py:396: AssertionError =========================== short test summary info ============================ FAILED tests/test_api_write.py::test_delete_row[compound_pk_table-row_for_create2-pks2-article,k] - assert 404 == 200 + where 404 = <Response [404 Not Found]>.status_code ``` I hit "retry" on that test but I expect it to fail again. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1913/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 | ||||||
1450312343 | I_kwDOBm6k_c5WcgKX | 1892 | Merge 1.0-dev branch back to main | 9599 | closed | 0 | 8658075 | 3 | 2022-11-15T20:04:25Z | 2022-11-29T19:40:23Z | 2022-11-29T19:40:23Z | OWNER | I'm committed enough to the 1.0 work now that I'm ready for the `main` branch to reflect that instead. If I need to make any dot-releases against 0.63 I can do those from a branch. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1892/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1468592292 | PR_kwDOBm6k_c5D6nzE | 1912 | Merge 1.0-dev (with initial write API) back into main | 9599 | closed | 0 | 1 | 2022-11-29T19:31:21Z | 2022-11-29T19:39:37Z | 2022-11-29T19:39:36Z | OWNER | simonw/datasette/pulls/1912 | See: - #1892 <!-- readthedocs-preview datasette start --> ---- :books: Documentation preview :books:: https://datasette--1912.org.readthedocs.build/en/1912/ <!-- readthedocs-preview datasette end --> | 107914493 | pull | { "url": "https://api.github.com/repos/simonw/datasette/issues/1912/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
0 | |||||
1450303205 | I_kwDOBm6k_c5Wcd7l | 1891 | 1.0a0 release notes | 9599 | closed | 0 | 8658075 | 4 | 2022-11-15T19:58:20Z | 2022-11-29T19:23:41Z | 2022-11-29T19:23:41Z | OWNER | This release will mainly help preview the new Datasette write API: - #1850 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1891/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1425029275 | I_kwDOBm6k_c5U8Dib | 1864 | Delete a single record from an existing table | 9599 | closed | 0 | 8658075 | 4 | 2022-10-27T04:53:22Z | 2022-11-29T18:54:04Z | 2022-11-29T18:54:04Z | OWNER | API design: ``` POST /db/table/row-pks/-/delete Or... DELETE /db/table/row-pks/-/delete ``` I'm just going to do `POST` for the moment, like I did here: - #1874 Permission: `delete-row` Still needed: - [ ] Tests for rowid tables - [ ] Tests for compound primary keys | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1864/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1468519699 | I_kwDOBm6k_c5Xh9UT | 1911 | `/db/-/create` should support creating tables with compound primary keys | 9599 | closed | 0 | 8658075 | 2 | 2022-11-29T18:30:47Z | 2022-11-29T18:50:58Z | 2022-11-29T18:48:05Z | OWNER | Found myself needing this to write the tests for: - #1864 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1911/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1425029242 | I_kwDOBm6k_c5U8Dh6 | 1863 | Update a single record in an existing table | 9599 | closed | 0 | 8658075 | 16 | 2022-10-27T04:53:17Z | 2022-11-29T18:08:53Z | 2022-11-29T18:06:37Z | OWNER | API design: ``` POST /db/table/row-pks/-/update { "field": "updated_value" } ``` Only the fields that you pass will be updated. Maybe this is the wrong design though? The design for insert currently looks like this: - https://github.com/simonw/datasette/issues/1851#issuecomment-1294224185 ``` POST /db/table/-/insert Authorization: Bearer xxx Content-Type: application/json { "row": { "id": 1, "name": "New name" } } ``` I could use the same format for `/-/update`, but in this case the API doesn't require you to pass every field so `"row"` doesn't seem like the right key. I think I'll go with this: ``` POST /db/table/1/-/update Authorization: Bearer xxx Content-Type: application/json { "update": { "name": "New name" } } ``` The benefit of having an `"update"` key is that it allows me to use other keys in the future. Maybe a `"alter": true` key to indicate that new columns should be added if they are missing. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1863/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1456012874 | I_kwDOBm6k_c5WyP5K | 1905 | `publish heroku` failing due to old Python version | 9599 | closed | 0 | 4 | 2022-11-19T00:01:45Z | 2022-11-19T01:12:05Z | 2022-11-19T00:52:29Z | OWNER | Reported on Discord: https://discord.com/channels/823971286308356157/823971286941302908/1042814317118115901 ``` -----> Building on the Heroku-22 stack -----> Determining which buildpack to use for this app -----> Python app detected -----> Using Python version specified in runtime.txt ! Requested runtime 'python-3.8.10' is not available for this stack (heroku-22). ! For supported versions, see: https://devcenter.heroku.com/articles/python-support ! Push rejected, failed to compile Python app. ! Push failed ▸ Build failed ``` | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1905/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1455932972 | I_kwDOBm6k_c5Wx8Ys | 1904 | Datasette Lite tests failing due to httpx upgrade | 9599 | closed | 0 | 8658075 | 0 | 2022-11-18T22:49:31Z | 2022-11-18T22:57:48Z | 2022-11-18T22:52:22Z | OWNER | Same problem as this one: - https://github.com/simonw/datasette-lite/issues/56 Caused this failure: https://github.com/simonw/datasette/actions/runs/3500765964 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1904/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1452364777 | I_kwDOBm6k_c5WkVPp | 1896 | Extract logic for resolving a URL to a database / table / row | 9599 | closed | 0 | 8658075 | 4 | 2022-11-16T22:25:20Z | 2022-11-18T22:57:47Z | 2022-11-18T22:56:55Z | OWNER | > In trying to write this I realize that there's a lot of duplicated code with delete row, specifically around resolving the incoming URL into a row (or a database or a table). > > Since this is so common, I think it's worth extracting the logic out first. _Originally posted by @simonw in https://github.com/simonw/datasette/issues/1863#issuecomment-1317755263_ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1896/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1452457263 | I_kwDOBm6k_c5Wkr0v | 1897 | Serve schema JSON to the SQL editor to enable autocomplete | 9599 | closed | 0 | 9 | 2022-11-16T23:47:45Z | 2022-11-18T05:33:20Z | 2022-11-18T02:54:43Z | OWNER | See: - https://github.com/simonw/datasette/issues/1893#issuecomment-1317831555 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1897/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1450952393 | I_kwDOCGYnMM5We8bJ | 512 | mypy failures in CI | 9599 | closed | 0 | 3 | 2022-11-16T06:22:48Z | 2022-11-16T07:49:51Z | 2022-11-16T07:49:50Z | OWNER | https://github.com/simonw/sqlite-utils/actions/runs/3472012235 failed on Python 3.11: Truncated output: ``` sqlite_utils/db.py:2467: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True sqlite_utils/db.py:2467: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase sqlite_utils/db.py:2530: error: Incompatible default for argument "where" (default has type "None", argument has type "str") [assignment] sqlite_utils/db.py:2530: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True sqlite_utils/db.py:2530: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase sqlite_utils/db.py:2658: error: Argument 1 to "count_where" of "Queryable" has incompatible type "Optional[str]"; expected "str" [arg-type] Found 23 errors in 1 file (checked 51 source files) ``` Best look at https://github.com/hauntsaninja/no_implicit_optional | 140912432 | issue | { "url": "https://api.github.com/repos/simonw/sqlite-utils/issues/512/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1447388809 | I_kwDOBm6k_c5WRWaJ | 1887 | Add a confirm step to the drop table API | 9599 | closed | 0 | 8658075 | 2 | 2022-11-14T04:59:53Z | 2022-11-15T19:59:59Z | 2022-11-14T05:18:51Z | OWNER | > In playing with the API explorer just now I realized it's way too easy to accidentally drop a table using it. _Originally posted by @simonw in https://github.com/simonw/datasette/issues/1871#issuecomment-1313097057_ Added drop table API in: - #1874 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1887/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1429030341 | I_kwDOBm6k_c5VLUXF | 1874 | API to drop a table | 9599 | closed | 0 | 8658075 | 4 | 2022-10-30T21:55:11Z | 2022-11-15T19:59:53Z | 2022-11-14T05:45:06Z | OWNER | `POST /db/table/-/drop` Require `drop-table` permission. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1874/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1425011030 | I_kwDOBm6k_c5U7_FW | 1862 | Create a new table from one or more records, `sqlite-utils` style | 9599 | closed | 0 | 8658075 | 5 | 2022-10-27T04:25:02Z | 2022-11-15T19:59:47Z | 2022-11-15T06:42:09Z | OWNER | It's interesting to also think about what the form-based UI for this could look like - since that would involve users creating new columns of different types on the fly. Will need the `create-table` permission. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1862/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1435294468 | I_kwDOBm6k_c5VjNsE | 1882 | `/db/-/create` API for creating tables | 9599 | closed | 0 | 8658075 | 12 | 2022-11-03T21:44:32Z | 2022-11-15T19:59:43Z | 2022-11-15T06:00:41Z | OWNER | > It really feels like this should be accompanied by a `/db/-/create` API for creating tables. I had to add that to `sqlite-utils` eventually (initially it only supported creating by passing in an example document): > > https://sqlite-utils.datasette.io/en/stable/cli.html#cli-create-table _Originally posted by @simonw in https://github.com/simonw/datasette/issues/1862#issuecomment-1299073433_ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1882/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1426001541 | I_kwDOBm6k_c5U_w6F | 1866 | API for bulk inserting records into a table | 9599 | closed | 0 | 8658075 | 12 | 2022-10-27T17:19:25Z | 2022-11-15T19:59:34Z | 2022-10-30T06:04:07Z | OWNER | Similar to https://github.com/simonw/datasette-insert/blob/0.8/README.md#inserting-data-and-creating-tables I expect this to become by far the most common way that data gets into a Datasette instance - more so than the individual row API in: - #1851 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1866/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1421544654 | I_kwDOBm6k_c5UuwzO | 1851 | API to insert a single record into an existing table | 9599 | closed | 0 | 8658075 | 22 | 2022-10-24T22:24:21Z | 2022-11-15T19:59:18Z | 2022-10-28T00:59:25Z | OWNER | Controlled by a new `insert-row` permission. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1851/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1426195437 | I_kwDOBm6k_c5VAgPt | 1868 | Design URLs for the write API | 9599 | closed | 0 | 8658075 | 5 | 2022-10-27T19:55:30Z | 2022-11-15T19:59:14Z | 2022-10-27T20:07:01Z | OWNER | My original design for this issue: - #1851 Was `POST /db/table` with JSON of `{"insert": {...}}`. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1868/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 | |||||
1427293909 | I_kwDOBm6k_c5VEsbV | 1871 | API explorer tool | 9599 | closed | 0 | 8658075 | 24 | 2022-10-28T13:49:11Z | 2022-11-15T19:59:05Z | 2022-11-14T04:59:59Z | OWNER | The API will be much easier to develop if there's a page that helps you execute JSON POSTs against it. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1871/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1423369494 | I_kwDOBm6k_c5U1uUW | 1859 | datasette create-token CLI command | 9599 | closed | 0 | 8658075 | 3 | 2022-10-26T03:12:59Z | 2022-11-15T19:59:00Z | 2022-10-26T04:31:39Z | OWNER | The CLI equivalent of the `/-/create-token` page. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1859/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1423364990 | I_kwDOBm6k_c5U1tN- | 1858 | `max_signed_tokens_ttl` setting for a maximum duration on API tokens | 9599 | closed | 0 | 8658075 | 4 | 2022-10-26T03:05:53Z | 2022-11-15T19:58:52Z | 2022-10-27T03:15:05Z | OWNER | It's currently possible to use `/-/create-token` to create a token that lasts forever. Some administrators may wish to have a maximum expiry instead. I should support that with a setting. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1858/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 | |||||
1423336122 | I_kwDOBm6k_c5U1mK6 | 1856 | allow_signed_tokens setting for disabling API signed token mechanism | 9599 | closed | 0 | 8658075 | 3 | 2022-10-26T02:20:55Z | 2022-11-15T19:57:05Z | 2022-10-26T02:58:35Z | OWNER | Had some design thoughts here: https://github.com/simonw/datasette/issues/1852#issuecomment-1291272280 I liked this option the most: --setting allow_create_tokens off | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1856/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1421552095 | I_kwDOBm6k_c5Uuynf | 1852 | Default API token authentication mechanism | 9599 | closed | 0 | 8658075 | 30 | 2022-10-24T22:31:07Z | 2022-11-15T19:57:00Z | 2022-10-26T02:19:54Z | OWNER | API authentication will be via `Authorization: Bearer XXX` request headers. I'm inclined to add a default token mechanism to Datasette based on tokens that are signed with the `DATASETTE_SECRET`. Maybe the root user can access `/-/create-token` which provides a UI for generating a time-limited signed token? Could also have a `datasette token` command for creating such tokens at the command-line. Plugins can then define alternative ways of creating tokens, such as the existing https://datasette.io/plugins/datasette-auth-tokens plugin. _Originally posted by @simonw in https://github.com/simonw/datasette/issues/1850#issuecomment-1289706439_ | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1852/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
473083260 | MDU6SXNzdWU0NzMwODMyNjA= | 50 | "Too many SQL variables" on large inserts | 9599 | closed | 0 | 4 | 2019-07-25T21:43:31Z | 2022-11-04T14:38:36Z | 2019-07-28T11:59:33Z | OWNER | Reported here: https://github.com/dogsheep/healthkit-to-sqlite/issues/9 It looks like there's a default limit of 999 variables - we need to be smart about that, maybe dynamically lower the batch size based on the number of columns. | 140912432 | issue | { "url": "https://api.github.com/repos/simonw/sqlite-utils/issues/50/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1429029604 | I_kwDOCGYnMM5VLULk | 506 | Make `cursor.rowcount` accessible (wontfix) | 9599 | closed | 0 | 3 | 2022-10-30T21:51:55Z | 2022-11-01T17:37:47Z | 2022-11-01T17:37:13Z | OWNER | In building this Datasette feature on top of `sqlite-utils` I thought it might be useful to expose the number of rows that had been affected by a bulk insert or update - the `cursor.rowcount`: - https://github.com/simonw/datasette/issues/1866 This isn't currently exposed by `sqlite-utils`. | 140912432 | issue | { "url": "https://api.github.com/repos/simonw/sqlite-utils/issues/506/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1431786951 | I_kwDOBm6k_c5VV1XH | 1876 | SQL query should wrap on SQL interrupted screen | 9599 | closed | 0 | 2 | 2022-11-01T17:14:01Z | 2022-11-01T17:22:33Z | 2022-11-01T17:22:33Z | OWNER | Just saw this: <img width="1197" alt="CleanShot 2022-11-01 at 10 12 16@2x" src="https://user-images.githubusercontent.com/9599/199294909-df6fcb3b-40d0-4444-8a92-a7a358a28d86.png"> | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1876/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1426253476 | I_kwDOBm6k_c5VAuak | 1869 | Release 0.63 | 9599 | closed | 0 | 3 | 2022-10-27T20:53:01Z | 2022-10-27T22:24:38Z | 2022-10-27T22:11:33Z | OWNER | Most of the release notes are already written: - https://github.com/simonw/datasette/releases/tag/0.63a0 - https://github.com/simonw/datasette/releases/tag/0.63a1 | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1869/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | ||||||
1342430983 | I_kwDOBm6k_c5QA98H | 1786 | Adjust height of textarea for no JS case | 9599 | closed | 0 | 4 | 2022-08-18T01:15:15Z | 2022-10-27T21:50:12Z | 2022-08-18T16:06:09Z | OWNER | Datasette Lite: https://lite.datasette.io/?sql=https://gist.githubusercontent.com/simonw/1f8a91123ccefd8844187225b1832d7a/raw/5069075b86aa79358fbab3d4482d1d269077d632/recipes.sql#/data?sql=select+id%2C+name%2C+ingredients%2C+%28%0A++select+json_group_array%28value%29+from+json_each%28ingredients%29%0A++where+value+in+%28select+value+from+json_each%28%3Ap0%29%29%0A%29+as+matching_ingredients%0Afrom+recipes%0Awhere+json_array_length%28matching_ingredients%29+%3E+0%0Aorder+by+json_array_length%28matching_ingredients%29+desc&p0=%5B%22sugar%22%2C+%22cheese%22%5D ![46F8101E-8CE3-4F61-B200-F865E6B5DBCC](https://user-images.githubusercontent.com/9599/185270723-f55513b0-b561-434d-9d7c-4fe5be9756e0.jpeg) | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1786/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 | ||||||
639072811 | MDU6SXNzdWU2MzkwNzI4MTE= | 849 | Rename master branch to main | 9599 | closed | 0 | 3268330 | 10 | 2020-06-15T19:05:54Z | 2022-10-27T13:57:08Z | 2020-09-15T20:37:14Z | OWNER | I was waiting for consensus to form around this (and kind-of hoping for `trunk` since I like the tree metaphor) and it looks like `main` is it. I've seen convincing arguments against `trunk` too - it indicates that the branch has some special significance like in Subversion (where all branches come from trunk) when it doesn't. So `main` is better anyway. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/849/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
completed | |||||
1420174670 | I_kwDOBm6k_c5UpiVO | 1849 | NoneType' object has no attribute 'actor' | 9599 | closed | 0 | 5 | 2022-10-24T04:02:15Z | 2022-10-26T21:13:40Z | 2022-10-26T21:13:40Z | OWNER | ``` File "/usr/local/lib/python3.10/site-packages/datasette/templates/_crumbs.html", line 3, in template {% set items=crumb_items(request=request, database=database, table=table) %} File "jinja2/async_utils.py", line 65, in auto_await return await t.cast("t.Awaitable[V]", value) File "datasette/app.py", line 638, in _crumb_items actor=request.actor, action="view-instance", default=True ``` From Sentry. | 107914493 | issue | { "url": "https://api.github.com/repos/simonw/datasette/issues/1849/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 |