-
-
Notifications
You must be signed in to change notification settings - Fork 690
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Scripted exports #1605
Comments
Oh that's interesting. I was thinking about this from a slightly different angle recently - pondering what a static site generator built on top of Datasette might look like. Just a sketch at the moment, but I was imagining a YAML configuration file with a SQL query that returns a list of paths - then a tool that runs that query and uses the equivalent of I think these two ideas can probably be merged. I'd love to know more about how you are solving this right now! |
Right now, I usually have a line in a Makefile like this: combined.geojson: project.db
pipenv run datasette project.db --get /project/combined.geojson \
--load-extension spatialite \
--setting sql_time_limit_ms 5000 \
--setting max_returned_rows 20000 \
-m metadata.yml > $@ That all assumes I've loaded whatever I need into It works, but as you can see, it's a lot to manage, a lot of boilerplate, and it wasn't obvious how to get there. If there's an error in the canned query, I get an HTML error page, so that's hard to debug. And it's only one query, so each output needs a line like this. Make isn't ideal, either, for that reason. The thing I really liked with databases:
project:
queries:
boundaries:
sql: "SELECT * FROM boundaries"
filename: "boundaries/{id}.geojson"
mode: "item"
format: geojson And then do: datasette freeze -m metadata.yml project.db For HTML export, maybe there's a |
Thinking about this more, as well as #1356 and various other tickets related to output formats, I think there's a missing plugin hook for formatting results, separate from Right now, as I understand it, getting output in any format goes through the normal view stack -- a table, a row or a query -- and so by the time It's possible this could be done using Another option is some kind of registry of serializers, which |
Yeah I think this all hinges on: Also this comment about streaming full JSON arrays (not just newline-delimited) using this trick: I'm about ready to figure these out, as with so much it's still a little bit blocked on the refactor stuff from: |
Let me know if you want help prototyping any of this, because I'm thinking about it and trying stuff out. Happy to be a sounding board, if it helps. |
Had a thought about the implementation of this: it could make a really neat plugin. Something like
And the command would then:
All of that HTML parsing may be over-complicating things. It could alternatively accept options for which pages you want to export:
Or a really wild option: it could allow you to define the paths you want to export using a SQL query:
Which would save these files:
|
@eyeseast I started work on that plugin: https://github.com/simonw/datasette-export |
Interesting. I started a version using metadata like I outlined up top, but I realized that there's no documented way for a plugin to access either metadata or canned queries. Or at least, I couldn't find a way. There is this method: https://github.com/simonw/datasette/blob/main/datasette/app.py#L472 but I don't want to rely on it if it's not documented. Same with this: https://github.com/simonw/datasette/blob/main/datasette/app.py#L544 If those are safe, I'll build on them. I'm also happy to document them, if that greases the wheels. |
Those sounds to me like they should be promoted to documented, supported internals. |
I'll add issues for both and do a documentation PR. |
Posting this while I'm thinking about it: I mentioned at the end of this thread that I'm usually doing
datasette --get
to export canned queries.I used to use a tool called datafreeze to do scripted exports, but that project looks dead now. The ergonomics of it are pretty nice, though, and the
Freezefile.yml
structure is actually not too far from Datasette's canned queries.This is related to the idea for
datasette query
(#1356) but I think it's a distinct feature. It's most likely a plugin, but I want to raise it here because it's probably something other people have thought about.The text was updated successfully, but these errors were encountered: