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/2199#issuecomment-1760441535 | https://api.github.com/repos/simonw/datasette/issues/2199 | 1760441535 | IC_kwDOBm6k_c5o7jS_ | 9599 | 2023-10-12T22:08:42Z | 2023-10-12T22:08:42Z | OWNER | Pushed that incomplete code here: https://github.com/datasette/datasette-upgrade | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1940346034 | |
https://github.com/simonw/datasette/issues/2199#issuecomment-1760413191 | https://api.github.com/repos/simonw/datasette/issues/2199 | 1760413191 | IC_kwDOBm6k_c5o7cYH | 9599 | 2023-10-12T21:52:25Z | 2023-10-12T21:52:25Z | OWNER | Demo of that logic: ``` $ datasette upgrade metadata-to-config ../datasette/metadata.json Upgrading ../datasette/metadata.json to new metadata.yaml format New metadata.yaml file will be written to metadata-new-1.yaml New datasette.yaml file will be written to datasette.yaml $ touch metadata-new-1.yaml $ datasette upgrade metadata-to-config ../datasette/metadata.json Upgrading ../datasette/metadata.json to new metadata.yaml format New metadata.yaml file will be written to metadata-new-2.yaml New datasette.yaml file will be written to datasette.yaml $ touch datasette.yaml $ datasette upgrade metadata-to-config ../datasette/metadata.json Upgrading ../datasette/metadata.json to new metadata.yaml format New metadata.yaml file will be written to metadata-new-2.yaml New datasette.yaml file will be written to datasette-new.yaml ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1940346034 | |
https://github.com/simonw/datasette/issues/2199#issuecomment-1760412424 | https://api.github.com/repos/simonw/datasette/issues/2199 | 1760412424 | IC_kwDOBm6k_c5o7cMI | 9599 | 2023-10-12T21:51:44Z | 2023-10-12T21:51:44Z | OWNER | Started playing with this plugin idea, now tearing myself away to work on something more important: ```python from datasette import hookimpl import click import pathlib @hookimpl def register_commands(cli): @cli.group() def upgrade(): """ Apply configuration upgrades to an existing Datasette instance """ pass @upgrade.command() @click.argument( "metadata", type=click.Path(exists=True) ) @click.option( "new_metadata", "-m", "--new-metadata", help="Path to new metadata.yaml file", type=click.Path(exists=False) ) @click.option( "new_datasette", "-c", "--new-datasette", help="Path to new datasette.yaml file", type=click.Path(exists=False) ) @click.option( "output_dir", "-e", "--output-dir", help="Directory to write new files to", type=click.Path(), default="." ) def metadata_to_config(metadata, new_metadata, new_datasette, output_dir): """ Upgrade an existing metadata.json/yaml file to the new metadata.yaml and datasette.yaml split introduced prior to Datasette 1.0. """ print("Upgrading {} to new metadata.yaml format".format(metadata)) output_dir = pathlib.Path(output_dir) if not new_metadata: # Pick a filename for the new metadata.yaml file that does not yet exist new_metadata = pick_filename("metadata", output_dir) if not new_datasette: new_datasette = pick_filename("datasette", output_dir) print("New metadata.yaml file will be written to {}".format(new_metadata)) print("New datasette.yaml file will be written to {}".format(new_datasette)) def pick_filename(base, output_dir): options = ["{}.yaml".format(base), "{}-new.yaml".format(base)] i = 0 while True: option = options.pop(0) option_path = output_dir / option if not option_path.exists(): return option_path # If we ran out … | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1940346034 | |
https://github.com/simonw/datasette/issues/2199#issuecomment-1760411937 | https://api.github.com/repos/simonw/datasette/issues/2199 | 1760411937 | IC_kwDOBm6k_c5o7cEh | 9599 | 2023-10-12T21:51:16Z | 2023-10-12T21:51:16Z | OWNER | I think I'm OK with not preserving comments, just because it adds a level of complexity to the tool which I don't think is worth the value it provides. If people want to keep their comments I'm happy to leave them to copy those over by hand. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1940346034 | |
https://github.com/simonw/datasette/issues/2199#issuecomment-1760401731 | https://api.github.com/repos/simonw/datasette/issues/2199 | 1760401731 | IC_kwDOBm6k_c5o7ZlD | 15178711 | 2023-10-12T21:41:42Z | 2023-10-12T21:41:42Z | CONTRIBUTOR | I dig it - I was thinking an Observable notebook where you paste your `metadata.json`/`metadata.yaml` and it would generate the new metadata + datasette.yaml files, but an extensible `datasette upgrade` plugin would be nice for future plugins. One thing to think about: If someone has comments in their original `metadata.yaml`, could we preserve them in the new files? tbh maybe not too important bc if people cared that much they could just copy + paste, and it might be too distracting | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1940346034 | |
https://github.com/simonw/datasette/issues/2199#issuecomment-1760396195 | https://api.github.com/repos/simonw/datasette/issues/2199 | 1760396195 | IC_kwDOBm6k_c5o7YOj | 9599 | 2023-10-12T21:36:25Z | 2023-10-12T21:36:25Z | OWNER | Related idea: how about a `datasette-upgrade` plugin which adds a `datasette upgrade` command that can be used to automate this process? Maybe something like this: ```bash datasette install datasette-upgrade datasette upgrade metadata-to-config metadata.json ``` This would output two new files: `metadata.yaml` and `datasette.yaml`. If files with those names existed already in the current directory they would be called `metadata-new.yaml` and `datasette-new.yaml`. The command would tell you what it did: ``` Your metadata.json file has been rewritten as two files: metadata-new.yaml datasette.yaml Start Datasette like this to try them out: datasette -m metadata-new.yaml -c datasette.yaml ``` The command is `datasette upgrade metadata-to-config` because `metadata-to-config` is the name of the upgrade recipe. The first version of the plugin would only have that single recipe, but we could add more recipes in the future for other upgrades. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1940346034 | |
https://github.com/simonw/datasette/issues/2199#issuecomment-1759952247 | https://api.github.com/repos/simonw/datasette/issues/2199 | 1759952247 | IC_kwDOBm6k_c5o5r13 | 9599 | 2023-10-12T16:23:10Z | 2023-10-12T16:23:10Z | OWNER | Some options for where this could go: - Directly in the release notes? I'm not sure about that, those are getting pretty long already. I think the release notes should link to relevant upgrade guides. - On a new page? We could have a "upgrade instructions" page in the documentation. - At the bottom of the new https://docs.datasette.io/en/latest/configuration.html page I'm leaning towards the third option at the moment. But... we may also need to provide upgrade instructions for plugin authors. Those could live in a separate area of the documentation though, since issues affecting end-users who configure Datasette and issues affecting plugin authors are unlikely to overlap much. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
1940346034 |