github
html_url | issue_url | id | node_id | user | created_at | updated_at | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
https://github.com/simonw/datasette/issues/1449#issuecomment-907547624 | https://api.github.com/repos/simonw/datasette/issues/1449 | 907547624 | IC_kwDOBm6k_c42GBPo | 9599 | 2021-08-28T01:44:57Z | 2021-08-28T01:58:35Z | OWNER | Documentation: https://docs.datasette.io/en/latest/plugin_hooks.html#register-commands-cli | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
981676832 | |
https://github.com/simonw/datasette/issues/1449#issuecomment-907547736 | https://api.github.com/repos/simonw/datasette/issues/1449 | 907547736 | IC_kwDOBm6k_c42GBRY | 9599 | 2021-08-28T01:45:36Z | 2021-08-28T01:45:36Z | OWNER | I need to push this out as an alpha so I can release a demo plugin that uses it. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
981676832 | |
https://github.com/simonw/datasette/issues/1449#issuecomment-907543982 | https://api.github.com/repos/simonw/datasette/issues/1449 | 907543982 | IC_kwDOBm6k_c42GAWu | 9599 | 2021-08-28T01:14:27Z | 2021-08-28T01:14:27Z | OWNER | Writing the test for this is proving difficult, because the `cli` module has already been imported when I attempt to register a new plugin - so it doesn't pick up on the additional command registrations. Trying to work around that with `importlib.reload(cli)`. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
981676832 | |
https://github.com/simonw/datasette/issues/1449#issuecomment-907542214 | https://api.github.com/repos/simonw/datasette/issues/1449 | 907542214 | IC_kwDOBm6k_c42F_7G | 9599 | 2021-08-28T01:02:38Z | 2021-08-28T01:02:38Z | OWNER | Partial prototype of `datasette-verify`: ```python from datasette import hookimpl import click @hookimpl def register_commands(cli): from datasette.cli import sqlite_extensions @cli.command() @click.argument("files", type=click.Path(exists=True), nargs=-1) @sqlite_extensions def verify(files, sqlite_extensions): "Verify that files can be opened by Datasette" for file in files: print(file) ``` I had to move the `from datasette.cli import sqlite_extensions` inside the hook function to avoid a circular import. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
981676832 | |
https://github.com/simonw/datasette/issues/1449#issuecomment-907540928 | https://api.github.com/repos/simonw/datasette/issues/1449 | 907540928 | IC_kwDOBm6k_c42F_nA | 9599 | 2021-08-28T00:53:37Z | 2021-08-28T00:53:37Z | OWNER | I'll probably have to use this mechanism for the tests then: https://til.simonwillison.net/pytest/registering-plugins-in-tests | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
981676832 | |
https://github.com/simonw/datasette/issues/1449#issuecomment-907540790 | https://api.github.com/repos/simonw/datasette/issues/1449 | 907540790 | IC_kwDOBm6k_c42F_k2 | 9599 | 2021-08-28T00:52:32Z | 2021-08-28T00:52:32Z | OWNER | I don't think I can get this new hook to support the handy [--plugins-dir= mechanism](https://docs.datasette.io/en/stable/plugins.html#one-off-plugins-using-plugins-dir) for loading plugins from Python files as opposed to registering them with setuptools - that mechanism is itself implemented inside of code called by `datasette serve` so I don't have a way of taking advantage of it from outside that command. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
981676832 | |
https://github.com/simonw/datasette/issues/1450#issuecomment-907540240 | https://api.github.com/repos/simonw/datasette/issues/1450 | 907540240 | IC_kwDOBm6k_c42F_cQ | 9599 | 2021-08-28T00:48:30Z | 2021-08-28T00:48:30Z | OWNER | I'll go with this: ``` % datasette --help Usage: datasette [OPTIONS] COMMAND [ARGS]... Datasette is an open source multi-tool for exploring and publishing data About Datasette: https://datasette.io/ Full documentation: https://docs.datasette.io/ Options: --version Show the version and exit. --help Show this message and exit. ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
981681138 | |
https://github.com/simonw/datasette/issues/1449#issuecomment-907539668 | https://api.github.com/repos/simonw/datasette/issues/1449 | 907539668 | IC_kwDOBm6k_c42F_TU | 9599 | 2021-08-28T00:44:16Z | 2021-08-28T00:44:16Z | OWNER | Considering this piece of code: https://github.com/simonw/datasette/blob/a1a33bb5822214be1cebd98cd858b2058d91a4aa/datasette/cli.py#L122-L142 I think the hook itself gets called with a single argument, `cli`, which it can then use in the standard Click way to register extra stuff. I can't pass it `datasette` (like I do with `register_routes()`) because the Datasette object itself is instantiated by the `serve` command, which will not have been called. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
981676832 | |
https://github.com/simonw/datasette/issues/1449#issuecomment-907539251 | https://api.github.com/repos/simonw/datasette/issues/1449 | 907539251 | IC_kwDOBm6k_c42F_Mz | 9599 | 2021-08-28T00:41:37Z | 2021-08-28T00:41:50Z | OWNER | The first example plugin I'm going to build for this will be `datasette verify file.db file2.db` - it will take one or more paths to SQLite files and verify if they can be opened by Datasette or not. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
981676832 | |
https://github.com/simonw/datasette/issues/1449#issuecomment-907539065 | https://api.github.com/repos/simonw/datasette/issues/1449 | 907539065 | IC_kwDOBm6k_c42F_J5 | 9599 | 2021-08-28T00:40:24Z | 2021-08-28T00:40:24Z | OWNER | I'm going to call the new hook `register_commands` - since it will allow ambitious plugins to register more than one command if they want to. That's also pleasingly similar to `register_routes`. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
981676832 | |
https://github.com/simonw/datasette/issues/1449#issuecomment-907538940 | https://api.github.com/repos/simonw/datasette/issues/1449 | 907538940 | IC_kwDOBm6k_c42F_H8 | 9599 | 2021-08-28T00:39:28Z | 2021-08-28T00:39:28Z | OWNER | Here's the answer to that: ``` ~ % datasette --help Usage: datasette [OPTIONS] COMMAND [ARGS]... Datasette! Options: --version Show the version and exit. --help Show this message and exit. Commands: serve* Serve up specified SQLite database files with a web UI inspect install Install Python packages - e.g. package Package specified SQLite files into a new datasette Docker... plugins List currently available plugins publish Publish specified SQLite database files to the internet... uninstall Uninstall Python packages (e.g. ``` Since it's adding extra things that show up in `--help` under the "Commands:" heading, I should call them commands. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
981676832 | |
https://github.com/simonw/datasette/issues/1449#issuecomment-907537693 | https://api.github.com/repos/simonw/datasette/issues/1449 | 907537693 | IC_kwDOBm6k_c42F-0d | 9599 | 2021-08-28T00:31:26Z | 2021-08-28T00:31:26Z | OWNER | Terminology question: is it correct to call these subcommands or should they be commands? `publish_subcommand()` adds subcommands of the format `datasette publish X` - but are we instead adding commands with this new one? | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
981676832 | |
https://github.com/simonw/datasette/issues/1449#issuecomment-907537610 | https://api.github.com/repos/simonw/datasette/issues/1449 | 907537610 | IC_kwDOBm6k_c42F-zK | 9599 | 2021-08-28T00:30:51Z | 2021-08-28T00:30:51Z | OWNER | There's also the option for plugins to muck around with existing registered commands - this could get a bit untidy if multiple plugins try to do it, but being able to replace `serve` with a fresh implementation that adds an additional command-line option before calling back to the original might open up some interesting possibilities. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
981676832 | |
https://github.com/simonw/datasette/issues/1449#issuecomment-907537366 | https://api.github.com/repos/simonw/datasette/issues/1449 | 907537366 | IC_kwDOBm6k_c42F-vW | 9599 | 2021-08-28T00:29:16Z | 2021-08-28T00:29:29Z | OWNER | The closest plugin hook to this right now is [publish_subcommand](https://docs.datasette.io/en/stable/plugin_hooks.html#publish-subcommand-publish) - which looks like this: ```python @hookimpl def publish_subcommand(publish): @publish.command() @add_common_publish_arguments_and_options @click.option( "-k", "--api_key", help="API key for talking to my hosting provider", ) def my_hosting_provider(...): ``` But there are also several plugin hooks with `register_` prefixes, which may be a good naming convention to stick to here: `register_output_renderer(datasette)`, `register_routes(datasette)`, `register_facet_classes()`, `register_magic_parameters(datasette)`. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
981676832 |