issue_comments
10,495 rows sorted by updated_at descending
This data as json, CSV (advanced)
issue >30
- Ability to sort (and paginate) by column 31
- Port Datasette to ASGI 29
- Export to CSV 27
- Datasette Plugins 22
- Handle spatialite geometry columns better 19
- Facets 16
- Bug: Sort by column with NULL in next_page URL 15
- Ability to customize presentation of specific columns in HTML view 14
- Dockerfile should build more recent SQLite with FTS5 and spatialite support 13
- Fix all the places that currently use .inspect() data 13
- Metadata should be a nested arbitrary KV store 12
- Support cross-database joins 12
- Mechanism for customizing the SQL used to select specific columns in the table view 12
- Sanely handle Infinity/-Infinity values in JSON using ?_json_infinity=1 12
- Implement command-line tool interface 11
- Option to expose expanded foreign keys in JSON/CSV 11
- Set up some example datasets on a Cloudflare-backed domain 10
- Filter UI on table page 10
- Support for units 10
- Build Dockerfile with recent Sqlite + Spatialite 10
- Table view should support filtering via many-to-many relationships 10
- Default to opening files in mutable mode, special option for immutable files 10
- New design for facet abstraction, including querystring and metadata.json 10
- Option to display binary data 10
- Documentation with recommendations on running Datasette in production without using Docker 10
- Config file with support for defining canned queries 9
- Make URLs immutable 8
- datasette publish heroku 8
- Package as standalone binary 8
- Ability to bundle and serve additional static files 8
- …
id | html_url | issue_url | node_id | user | created_at | updated_at ▲ | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
504684709 | https://github.com/simonw/datasette/issues/514#issuecomment-504684709 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwNDY4NDcwOQ== | chrismp 7936571 | 2019-06-22T17:36:25Z | 2019-06-22T17:36:25Z | NONE |
@russss, Which directory does this represent? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
504663766 | https://github.com/simonw/datasette/issues/514#issuecomment-504663766 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwNDY2Mzc2Ng== | russss 45057 | 2019-06-22T12:57:59Z | 2019-06-22T12:57:59Z | CONTRIBUTOR |
I wasn't even aware it was possible to add a systemd service at an arbitrary path, but it seems a little messy to me. Maybe worth noting that systemd does support per-user services which don't require root access. Cool but probably overkill for most people (especially when you're going to need root to listen on port 80 anyway, directly or via a reverse proxy). |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
504663390 | https://github.com/simonw/datasette/issues/514#issuecomment-504663390 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwNDY2MzM5MA== | simonw 9599 | 2019-06-22T12:52:27Z | 2019-06-22T12:52:27Z | OWNER | This example is useful to - I like how it has a Makefile that knows how to set up systemd: https://github.com/pikesley/Queube |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
504663201 | https://github.com/simonw/datasette/issues/514#issuecomment-504663201 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwNDY2MzIwMQ== | simonw 9599 | 2019-06-22T12:49:56Z | 2019-06-22T12:49:56Z | OWNER | Here are some partial notes I have saved from an nginx configuration I've used in the past: ``` cat /etc/nginx/sites-available/default server { listen 80 default_server; listen [::]:80 default_server;
... ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
504662987 | https://github.com/simonw/datasette/issues/514#issuecomment-504662987 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwNDY2Mjk4Nw== | simonw 9599 | 2019-06-22T12:46:39Z | 2019-06-22T12:46:39Z | OWNER | ... and @russss also suggested systemd 21 seconds before I posted that! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
504662931 | https://github.com/simonw/datasette/issues/514#issuecomment-504662931 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwNDY2MjkzMQ== | simonw 9599 | 2019-06-22T12:45:47Z | 2019-06-22T12:45:47Z | OWNER | I asked about this on Twitter and got a solid recommendation for systemd and this tutorial: https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units - via https://twitter.com/sil/status/1142412145990221825 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
504662904 | https://github.com/simonw/datasette/issues/514#issuecomment-504662904 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwNDY2MjkwNA== | russss 45057 | 2019-06-22T12:45:21Z | 2019-06-22T12:45:39Z | CONTRIBUTOR | On most modern Linux distros, systemd is the easiest answer. Example systemd unit file (save to [Service] Type=simple User=<username> WorkingDirectory=/path/to/data ExecStart=/path/to/datasette serve -h 0.0.0.0 ./my.db Restart=on-failure [Install] WantedBy=multi-user.target ``` Activate it with:
Logs are best viewed using |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
504662063 | https://github.com/simonw/datasette/issues/514#issuecomment-504662063 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwNDY2MjA2Mw== | simonw 9599 | 2019-06-22T12:31:58Z | 2019-06-22T12:31:58Z | OWNER | This is also relevant to Datasette Library #417 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
504661990 | https://github.com/simonw/datasette/issues/514#issuecomment-504661990 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwNDY2MTk5MA== | simonw 9599 | 2019-06-22T12:30:47Z | 2019-06-22T12:30:47Z | OWNER | A section in the Datasette docs that acts as recommendations plus a tutorial for running Datasette on a VPS without using a Docker would be excellent. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
504661909 | https://github.com/simonw/datasette/issues/514#issuecomment-504661909 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwNDY2MTkwOQ== | simonw 9599 | 2019-06-22T12:29:46Z | 2019-06-22T12:29:46Z | OWNER | I'm still trying to figure this out myself. I'm confident that running nginx on port 80 and using it to proxy traffic to Datasette is a sensible way to solve the port problem. As for running Datasette itself: the two options that seem best to me are some kind of Init.d service or running it under supervisord. I have to admit I haven't worked out the necessary incantation for either of those yet: the solitary instance I have that's not running as a Docker container is sitting in a "screen" instance for the moment! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
503369834 | https://github.com/simonw/datasette/issues/272#issuecomment-503369834 | https://api.github.com/repos/simonw/datasette/issues/272 | MDEyOklzc3VlQ29tbWVudDUwMzM2OTgzNA== | simonw 9599 | 2019-06-19T01:26:24Z | 2019-06-19T01:26:24Z | OWNER | I need to be able to define the URL routes once and have them work for both Sanic and ASGI. I'm going to extract the web application bits out of the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Port Datasette to ASGI 324188953 | |
502393107 | https://github.com/simonw/datasette/issues/272#issuecomment-502393107 | https://api.github.com/repos/simonw/datasette/issues/272 | MDEyOklzc3VlQ29tbWVudDUwMjM5MzEwNw== | simonw 9599 | 2019-06-15T19:25:54Z | 2019-06-19T01:20:14Z | OWNER | OK, time for a solid implementation plan. As soon as https://github.com/django/asgiref/pull/92 is merged (hopefully very soon) the ASGI spec will have support for an optional Steps to implement: Refactor classes, then add .asgi() method to BaseViewAdd a My only true shared base class is actually So...
Extract routing logic out into a new
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Port Datasette to ASGI 324188953 | |
503351966 | https://github.com/simonw/datasette/issues/272#issuecomment-503351966 | https://api.github.com/repos/simonw/datasette/issues/272 | MDEyOklzc3VlQ29tbWVudDUwMzM1MTk2Ng== | simonw 9599 | 2019-06-18T23:45:17Z | 2019-06-18T23:45:17Z | OWNER | Uvicorn 0.8.1 is our and supports |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Port Datasette to ASGI 324188953 | |
503249999 | https://github.com/simonw/datasette/issues/513#issuecomment-503249999 | https://api.github.com/repos/simonw/datasette/issues/513 | MDEyOklzc3VlQ29tbWVudDUwMzI0OTk5OQ== | chrismp 7936571 | 2019-06-18T18:11:36Z | 2019-06-18T18:11:36Z | NONE | Ah, so basically put the SQLite databases on Linode, for example, and run |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Is it possible to publish to Heroku despite slug size being too large? 457201907 | |
503237884 | https://github.com/simonw/datasette/issues/502#issuecomment-503237884 | https://api.github.com/repos/simonw/datasette/issues/502 | MDEyOklzc3VlQ29tbWVudDUwMzIzNzg4NA== | chrismp 7936571 | 2019-06-18T17:39:18Z | 2019-06-18T17:46:08Z | NONE | It appears that I cannot reopen this issue but the proposed solution did not solve it. The link is not there. I have full text search enabled for a bunch of tables in my database and even clicking the link to reveal hidden tables did not show the download DB link. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Exporting sqlite database(s)? 453131917 | |
503236800 | https://github.com/simonw/datasette/issues/512#issuecomment-503236800 | https://api.github.com/repos/simonw/datasette/issues/512 | MDEyOklzc3VlQ29tbWVudDUwMzIzNjgwMA== | chrismp 7936571 | 2019-06-18T17:36:37Z | 2019-06-18T17:36:37Z | NONE | Oh I didn't know the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"about" parameter in metadata does not appear when alone 457147936 | |
503200024 | https://github.com/simonw/datasette/issues/512#issuecomment-503200024 | https://api.github.com/repos/simonw/datasette/issues/512 | MDEyOklzc3VlQ29tbWVudDUwMzIwMDAyNA== | simonw 9599 | 2019-06-18T15:58:18Z | 2019-06-18T15:58:18Z | OWNER | The There are I'm definitely open to reconsidering how these work - I don't think they quite serve people's needs as they are right now, so suggestions for improving them would be very welcome. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"about" parameter in metadata does not appear when alone 457147936 | |
503199253 | https://github.com/simonw/datasette/issues/513#issuecomment-503199253 | https://api.github.com/repos/simonw/datasette/issues/513 | MDEyOklzc3VlQ29tbWVudDUwMzE5OTI1Mw== | simonw 9599 | 2019-06-18T15:56:29Z | 2019-06-18T15:56:29Z | OWNER | Unfortunately not - I really wish this was possible. I have not yet found a great serverless solution for publishing 1GB+ databases - they're too big for Heroku, Cloud Run OR Zeit Now. Once databases get that big the only option I've found is to run a VPS (or an EC2 instance) with a mounted hard drive volume and execute I'd love to figure out a way to make hosting larger databases as easy as it currently is to host small ones. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Is it possible to publish to Heroku despite slug size being too large? 457201907 | |
503195217 | https://github.com/simonw/datasette/issues/272#issuecomment-503195217 | https://api.github.com/repos/simonw/datasette/issues/272 | MDEyOklzc3VlQ29tbWVudDUwMzE5NTIxNw== | simonw 9599 | 2019-06-18T15:46:31Z | 2019-06-18T15:54:18Z | OWNER | How should file serving work? Starlette and Sanic both use
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Port Datasette to ASGI 324188953 | |
502466466 | https://github.com/simonw/datasette/issues/272#issuecomment-502466466 | https://api.github.com/repos/simonw/datasette/issues/272 | MDEyOklzc3VlQ29tbWVudDUwMjQ2NjQ2Ng== | simonw 9599 | 2019-06-16T16:28:10Z | 2019-06-16T16:28:10Z | OWNER | I have an open pull request to Uvicorn with an implementation of |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Port Datasette to ASGI 324188953 | |
502420036 | https://github.com/simonw/datasette/issues/511#issuecomment-502420036 | https://api.github.com/repos/simonw/datasette/issues/511 | MDEyOklzc3VlQ29tbWVudDUwMjQyMDAzNg== | simonw 9599 | 2019-06-16T04:51:39Z | 2019-06-16T04:52:14Z | OWNER | It looks like AppVeyor is the right solution for Windows CI. I've set up a Datasette project there but I do t yet have the configuration figured out (plus Datasette won't work on windows yet anyway): https://ci.appveyor.com/project/simonw/datasette |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette tests passing on Windows in GitHub Actions 456578474 | |
502402586 | https://github.com/simonw/datasette/issues/507#issuecomment-502402586 | https://api.github.com/repos/simonw/datasette/issues/507 | MDEyOklzc3VlQ29tbWVudDUwMjQwMjU4Ng== | simonw 9599 | 2019-06-15T22:00:14Z | 2019-06-15T22:00:14Z | OWNER | I need to find a good tool for taking screenshots on OSX that are reliably the same dimension across multiple sessions. Maybe in Firefox? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Every datasette plugin on the ecosystem page should have a screenshot 455852801 | |
502401636 | https://github.com/simonw/datasette/issues/187#issuecomment-502401636 | https://api.github.com/repos/simonw/datasette/issues/187 | MDEyOklzc3VlQ29tbWVudDUwMjQwMTYzNg== | simonw 9599 | 2019-06-15T21:44:23Z | 2019-06-15T21:44:23Z | OWNER | I'm closing his as a duplicate of the new #511 - I hope to have his working very shortly as a result of #272 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Windows installation error 309033998 | |
502401078 | https://github.com/simonw/datasette/issues/272#issuecomment-502401078 | https://api.github.com/repos/simonw/datasette/issues/272 | MDEyOklzc3VlQ29tbWVudDUwMjQwMTA3OA== | simonw 9599 | 2019-06-15T21:35:26Z | 2019-06-15T21:35:26Z | OWNER | Started sketching out the router in the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Port Datasette to ASGI 324188953 | |
502395689 | https://github.com/simonw/datasette/issues/272#issuecomment-502395689 | https://api.github.com/repos/simonw/datasette/issues/272 | MDEyOklzc3VlQ29tbWVudDUwMjM5NTY4OQ== | simonw 9599 | 2019-06-15T20:05:26Z | 2019-06-15T20:05:26Z | OWNER | For the routing component: I'm going to base my implementation on the one from Django Channels. Documented here: https://channels.readthedocs.io/en/latest/topics/routing.html#urlrouter Particularly relevant: my view classes need access to the components that were already parsed out of the URL by the router. I'm going to copy the Django Channels mechanism of stashing those in |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Port Datasette to ASGI 324188953 | |
502394420 | https://github.com/simonw/datasette/issues/272#issuecomment-502394420 | https://api.github.com/repos/simonw/datasette/issues/272 | MDEyOklzc3VlQ29tbWVudDUwMjM5NDQyMA== | simonw 9599 | 2019-06-15T19:45:46Z | 2019-06-15T19:45:46Z | OWNER | For reference, here's some WIP code I wrote last year against the old ASGI 2 spec: https://github.com/simonw/datasette/commit/4fd36ba2f3f91da7258859808616078e3464fb97 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Port Datasette to ASGI 324188953 | |
502393573 | https://github.com/simonw/datasette/issues/509#issuecomment-502393573 | https://api.github.com/repos/simonw/datasette/issues/509 | MDEyOklzc3VlQ29tbWVudDUwMjM5MzU3Mw== | simonw 9599 | 2019-06-15T19:32:56Z | 2019-06-15T19:32:56Z | OWNER | Experimental exploratory patch: ```diff diff --git a/datasette/app.py b/datasette/app.py index 2ef7da4..ca51866 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -164,8 +164,10 @@ class Datasette: is_memory = True is_mutable = path not in self.immutables db = Database(self, path, is_mutable=is_mutable, is_memory=is_memory) + i = 1 if db.name in self.databases: - raise Exception("Multiple files with same stem: {}".format(db.name)) + db.stem = db.name + "-" + str(i) + i += 1 self.databases[db.name] = db self.cache_headers = cache_headers self.cors = cors diff --git a/datasette/database.py b/datasette/database.py index e491577..75c8681 100644 --- a/datasette/database.py +++ b/datasette/database.py @@ -14,6 +14,8 @@ from .inspect import inspect_hash class Database: + stem = None + def init(self, ds, path=None, is_mutable=False, is_memory=False): self.ds = ds self.path = path @@ -73,6 +75,8 @@ class Database: def name(self): if self.is_memory: return ":memory:" + elif self.stem: + return self.stem else: return Path(self.path).stem ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support opening multiple databases with the same stem 456568880 | |
502393267 | https://github.com/simonw/datasette/issues/272#issuecomment-502393267 | https://api.github.com/repos/simonw/datasette/issues/272 | MDEyOklzc3VlQ29tbWVudDUwMjM5MzI2Nw== | simonw 9599 | 2019-06-15T19:28:27Z | 2019-06-15T19:28:27Z | OWNER | I'll probably revert 9fdb47ca952b93b7b60adddb965ea6642b1ff523 from https://github.com/simonw/datasette/issues/272#issuecomment-494192779 since I won't need it now that ASGI is getting |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Port Datasette to ASGI 324188953 | |
502135123 | https://github.com/simonw/datasette/issues/111#issuecomment-502135123 | https://api.github.com/repos/simonw/datasette/issues/111 | MDEyOklzc3VlQ29tbWVudDUwMjEzNTEyMw== | simonw 9599 | 2019-06-14T14:39:59Z | 2019-06-14T14:39:59Z | OWNER | This may be the feature that causes me to add dateutilas a dependency (so I can use dateutil.parser.parse) |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add “updated” to metadata 274615452 | |
502134699 | https://github.com/simonw/datasette/issues/111#issuecomment-502134699 | https://api.github.com/repos/simonw/datasette/issues/111 | MDEyOklzc3VlQ29tbWVudDUwMjEzNDY5OQ== | simonw 9599 | 2019-06-14T14:38:58Z | 2019-06-14T14:38:58Z | OWNER | I think I'll just call it "updated" to avoid the ugly underscore. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add “updated” to metadata 274615452 | |
502134167 | https://github.com/simonw/datasette/issues/111#issuecomment-502134167 | https://api.github.com/repos/simonw/datasette/issues/111 | MDEyOklzc3VlQ29tbWVudDUwMjEzNDE2Nw== | simonw 9599 | 2019-06-14T14:37:35Z | 2019-06-14T14:37:35Z | OWNER | We have per-database and per-table metadata now. I think it's time to make this actually happen. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add “updated” to metadata 274615452 | |
501903071 | https://github.com/simonw/datasette/issues/498#issuecomment-501903071 | https://api.github.com/repos/simonw/datasette/issues/498 | MDEyOklzc3VlQ29tbWVudDUwMTkwMzA3MQ== | chrismp 7936571 | 2019-06-13T22:35:06Z | 2019-06-13T22:35:06Z | NONE | I'd like to start working on this. I've made a custom template for Can I make additional custom Python scripts for this or must I edit datasette's files directly? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Full text search of all tables at once? 451513541 | |
501541902 | https://github.com/simonw/sqlite-utils/issues/26#issuecomment-501541902 | https://api.github.com/repos/simonw/sqlite-utils/issues/26 | MDEyOklzc3VlQ29tbWVudDUwMTU0MTkwMg== | simonw 9599 | 2019-06-13T04:15:22Z | 2019-06-13T16:55:42Z | OWNER | So maybe something like this:
|
{ "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 1, "rocket": 0, "eyes": 0 } |
Mechanism for turning nested JSON into foreign keys / many-to-many 455486286 | |
501572149 | https://github.com/simonw/sqlite-utils/issues/24#issuecomment-501572149 | https://api.github.com/repos/simonw/sqlite-utils/issues/24 | MDEyOklzc3VlQ29tbWVudDUwMTU3MjE0OQ== | simonw 9599 | 2019-06-13T06:47:17Z | 2019-06-13T06:47:17Z | OWNER | @IgnoredAmbience this is now shipped in sqlite-utils 1.2 - documentation here: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Additional Column Constraints? 449818897 | |
501548676 | https://github.com/simonw/sqlite-utils/issues/25#issuecomment-501548676 | https://api.github.com/repos/simonw/sqlite-utils/issues/25 | MDEyOklzc3VlQ29tbWVudDUwMTU0ODY3Ng== | simonw 9599 | 2019-06-13T04:58:12Z | 2019-06-13T04:58:12Z | OWNER | I'm going to reuse the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Allow .insert(..., foreign_keys=()) to auto-detect table and primary key 449848803 | |
501548097 | https://github.com/simonw/sqlite-utils/issues/25#issuecomment-501548097 | https://api.github.com/repos/simonw/sqlite-utils/issues/25 | MDEyOklzc3VlQ29tbWVudDUwMTU0ODA5Nw== | simonw 9599 | 2019-06-13T04:54:33Z | 2019-06-13T04:54:33Z | OWNER | Still need to add this mechanism to |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Allow .insert(..., foreign_keys=()) to auto-detect table and primary key 449848803 | |
501543688 | https://github.com/simonw/sqlite-utils/issues/26#issuecomment-501543688 | https://api.github.com/repos/simonw/sqlite-utils/issues/26 | MDEyOklzc3VlQ29tbWVudDUwMTU0MzY4OA== | simonw 9599 | 2019-06-13T04:26:15Z | 2019-06-13T04:26:15Z | OWNER | I may ignore
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for turning nested JSON into foreign keys / many-to-many 455486286 | |
501542025 | https://github.com/simonw/sqlite-utils/issues/26#issuecomment-501542025 | https://api.github.com/repos/simonw/sqlite-utils/issues/26 | MDEyOklzc3VlQ29tbWVudDUwMTU0MjAyNQ== | simonw 9599 | 2019-06-13T04:16:10Z | 2019-06-13T04:16:42Z | OWNER | So for If we find an array (as opposed to a direct nested object) at the end of the dotted path we do a m2m table. And if |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for turning nested JSON into foreign keys / many-to-many 455486286 | |
501539452 | https://github.com/simonw/sqlite-utils/issues/26#issuecomment-501539452 | https://api.github.com/repos/simonw/sqlite-utils/issues/26 | MDEyOklzc3VlQ29tbWVudDUwMTUzOTQ1Mg== | simonw 9599 | 2019-06-13T03:59:32Z | 2019-06-13T03:59:32Z | OWNER | Another complexity from the https://api.github.com/repos/simonw/datasette/pulls example: We don't actually want
So the nested So perhaps we need a flatten-nested-into-columns mechanism which can be used in conjunction with a extract-to-tables mechanism. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for turning nested JSON into foreign keys / many-to-many 455486286 | |
501538100 | https://github.com/simonw/sqlite-utils/issues/26#issuecomment-501538100 | https://api.github.com/repos/simonw/sqlite-utils/issues/26 | MDEyOklzc3VlQ29tbWVudDUwMTUzODEwMA== | simonw 9599 | 2019-06-13T03:51:27Z | 2019-06-13T03:51:27Z | OWNER | I like the term "extract" for what we are doing here, partly because that's the terminology I used in |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for turning nested JSON into foreign keys / many-to-many 455486286 | |
501537812 | https://github.com/simonw/sqlite-utils/issues/26#issuecomment-501537812 | https://api.github.com/repos/simonw/sqlite-utils/issues/26 | MDEyOklzc3VlQ29tbWVudDUwMTUzNzgxMg== | simonw 9599 | 2019-06-13T03:49:37Z | 2019-06-13T03:50:39Z | OWNER | There's an interesting difference here between nested objects with a primary-key style ID and nested objects without. If a nested object does not have a primary key, we could still shift it out to another table but it would need to be in a context where it has an automatic foreign key back to our current record. A good example of something where that would be useful is the
These could either be inserted into an |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for turning nested JSON into foreign keys / many-to-many 455486286 | |
501536495 | https://github.com/simonw/sqlite-utils/issues/26#issuecomment-501536495 | https://api.github.com/repos/simonw/sqlite-utils/issues/26 | MDEyOklzc3VlQ29tbWVudDUwMTUzNjQ5NQ== | simonw 9599 | 2019-06-13T03:40:21Z | 2019-06-13T03:40:21Z | OWNER | I think I can do something here with a very simple |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for turning nested JSON into foreign keys / many-to-many 455486286 | |
501517535 | https://github.com/simonw/sqlite-utils/issues/25#issuecomment-501517535 | https://api.github.com/repos/simonw/sqlite-utils/issues/25 | MDEyOklzc3VlQ29tbWVudDUwMTUxNzUzNQ== | simonw 9599 | 2019-06-13T01:50:34Z | 2019-06-13T01:50:34Z | OWNER | If I'm going to do this then I should make the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Allow .insert(..., foreign_keys=()) to auto-detect table and primary key 449848803 | |
501516797 | https://github.com/simonw/sqlite-utils/issues/25#issuecomment-501516797 | https://api.github.com/repos/simonw/sqlite-utils/issues/25 | MDEyOklzc3VlQ29tbWVudDUwMTUxNjc5Nw== | simonw 9599 | 2019-06-13T01:46:36Z | 2019-06-13T01:47:35Z | OWNER | Maybe Rules:
* If the column name ends in If none of these rules match, raise an error. So the above example could be further simplified to:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Allow .insert(..., foreign_keys=()) to auto-detect table and primary key 449848803 | |
501516028 | https://github.com/simonw/sqlite-utils/issues/24#issuecomment-501516028 | https://api.github.com/repos/simonw/sqlite-utils/issues/24 | MDEyOklzc3VlQ29tbWVudDUwMTUxNjAyOA== | simonw 9599 | 2019-06-13T01:42:36Z | 2019-06-13T01:42:36Z | OWNER | Maybe it's time to create a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Additional Column Constraints? 449818897 | |
501515609 | https://github.com/simonw/sqlite-utils/issues/24#issuecomment-501515609 | https://api.github.com/repos/simonw/sqlite-utils/issues/24 | MDEyOklzc3VlQ29tbWVudDUwMTUxNTYwOQ== | simonw 9599 | 2019-06-13T01:40:12Z | 2019-06-13T01:40:47Z | OWNER | But what to do for creating a table? For the Python function I could do this:
The CLI tool only every creates tables as a side-effect of a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Additional Column Constraints? 449818897 | |
501514575 | https://github.com/simonw/sqlite-utils/issues/24#issuecomment-501514575 | https://api.github.com/repos/simonw/sqlite-utils/issues/24 | MDEyOklzc3VlQ29tbWVudDUwMTUxNDU3NQ== | simonw 9599 | 2019-06-13T01:34:55Z | 2019-06-13T01:34:55Z | OWNER | Since you can't have one without the other, I'm going with |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Additional Column Constraints? 449818897 | |
501509642 | https://github.com/simonw/sqlite-utils/issues/24#issuecomment-501509642 | https://api.github.com/repos/simonw/sqlite-utils/issues/24 | MDEyOklzc3VlQ29tbWVudDUwMTUwOTY0Mg== | simonw 9599 | 2019-06-13T01:06:09Z | 2019-06-13T01:06:09Z | OWNER | Hmm... we need the ability to pass If you attempt to add
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Additional Column Constraints? 449818897 | |
501508302 | https://github.com/simonw/sqlite-utils/issues/26#issuecomment-501508302 | https://api.github.com/repos/simonw/sqlite-utils/issues/26 | MDEyOklzc3VlQ29tbWVudDUwMTUwODMwMg== | simonw 9599 | 2019-06-13T00:57:52Z | 2019-06-13T00:57:52Z | OWNER | Two challenges here:
Here we have Ideally our mechanism for specifying which table things should be pulled out into would handle this, but it's getting a bit complicated. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for turning nested JSON into foreign keys / many-to-many 455486286 | |
500975113 | https://github.com/simonw/datasette/issues/502#issuecomment-500975113 | https://api.github.com/repos/simonw/datasette/issues/502 | MDEyOklzc3VlQ29tbWVudDUwMDk3NTExMw== | simonw 9599 | 2019-06-11T18:50:42Z | 2019-06-11T18:50:42Z | OWNER | There should be a "Download SQLite DB" link at the bottom of each database page - e.g. on https://latest.datasette.io/fixtures Does that solve this? Re-open the issue if it doesn't! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Exporting sqlite database(s)? 453131917 | |
500974354 | https://github.com/simonw/datasette/pull/500#issuecomment-500974354 | https://api.github.com/repos/simonw/datasette/issues/500 | MDEyOklzc3VlQ29tbWVudDUwMDk3NDM1NA== | simonw 9599 | 2019-06-11T18:48:43Z | 2019-06-11T18:48:43Z | OWNER | Thanks! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Fix typo in install step: should be install -e 451705509 | |
500903287 | https://github.com/simonw/datasette/issues/506#issuecomment-500903287 | https://api.github.com/repos/simonw/datasette/issues/506 | MDEyOklzc3VlQ29tbWVudDUwMDkwMzI4Nw== | simonw 9599 | 2019-06-11T15:48:27Z | 2019-06-11T15:48:27Z | OWNER | Calling out to Tika does make me a little nervous, but that's why Datasette has plugins! A plugin that calls Tika (and caches the results) could be really interesting. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Option to display binary data 453846217 | |
500238035 | https://github.com/simonw/datasette/issues/506#issuecomment-500238035 | https://api.github.com/repos/simonw/datasette/issues/506 | MDEyOklzc3VlQ29tbWVudDUwMDIzODAzNQ== | Gagravarr 1059677 | 2019-06-09T19:21:18Z | 2019-06-09T19:21:18Z | NONE | If you don't mind calling out to Java, then Apache Tika is able to tell you what a load of "binary stuff" is, plus render it to XHTML where possible. There's a python wrapper around the Apache Tika server, but for a more typical datasette usecase you'd probably just want to grab the Tika CLI jar, and call it with |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Option to display binary data 453846217 | |
500224864 | https://github.com/simonw/datasette/issues/506#issuecomment-500224864 | https://api.github.com/repos/simonw/datasette/issues/506 | MDEyOklzc3VlQ29tbWVudDUwMDIyNDg2NA== | simonw 9599 | 2019-06-09T16:07:39Z | 2019-06-09T16:07:39Z | OWNER | Shipped 0.1 of the plugin! I'm pretty happy with this display format: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Option to display binary data 453846217 | |
500220862 | https://github.com/simonw/datasette/issues/506#issuecomment-500220862 | https://api.github.com/repos/simonw/datasette/issues/506 | MDEyOklzc3VlQ29tbWVudDUwMDIyMDg2Mg== | simonw 9599 | 2019-06-09T15:25:18Z | 2019-06-09T15:26:23Z | OWNER | I'm going to call this |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Option to display binary data 453846217 | |
500220646 | https://github.com/simonw/datasette/issues/506#issuecomment-500220646 | https://api.github.com/repos/simonw/datasette/issues/506 | MDEyOklzc3VlQ29tbWVudDUwMDIyMDY0Ng== | simonw 9599 | 2019-06-09T15:22:12Z | 2019-06-09T15:22:12Z | OWNER | New idea: show essentially this but differentiate the escape sequences in some way. Maybe wrap them in |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Option to display binary data 453846217 | |
500183948 | https://github.com/simonw/datasette/issues/506#issuecomment-500183948 | https://api.github.com/repos/simonw/datasette/issues/506 | MDEyOklzc3VlQ29tbWVudDUwMDE4Mzk0OA== | simonw 9599 | 2019-06-09T04:22:58Z | 2019-06-09T04:26:53Z | OWNER | This is quite nice:
Here's a rough Python equivalent http://code.activestate.com/recipes/579120-data_dumppy-like-the-unix-od-octal-dump-command/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Option to display binary data 453846217 | |
500183106 | https://github.com/simonw/datasette/issues/506#issuecomment-500183106 | https://api.github.com/repos/simonw/datasette/issues/506 | MDEyOklzc3VlQ29tbWVudDUwMDE4MzEwNg== | simonw 9599 | 2019-06-09T03:59:12Z | 2019-06-09T03:59:12Z | OWNER | Another cheap trick is the equivalent of the Unix |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Option to display binary data 453846217 | |
500183002 | https://github.com/simonw/datasette/issues/506#issuecomment-500183002 | https://api.github.com/repos/simonw/datasette/issues/506 | MDEyOklzc3VlQ29tbWVudDUwMDE4MzAwMg== | simonw 9599 | 2019-06-09T03:56:06Z | 2019-06-09T03:56:06Z | OWNER | What are some other interesting tricks we can use to make binary data a bit more interesting to look at? https://martin.varela.fi/2017/09/09/simple-binary-data-visualization/ has some really clever visualization tricks - probably a bit much for this plugin though. See also https://codisec.com/binary-visualization-explained/ https://github.com/tryexceptpass/perceptio is some much simpler code for rendering an image for a binary. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Option to display binary data 453846217 | |
500173881 | https://github.com/simonw/datasette/issues/506#issuecomment-500173881 | https://api.github.com/repos/simonw/datasette/issues/506 | MDEyOklzc3VlQ29tbWVudDUwMDE3Mzg4MQ== | simonw 9599 | 2019-06-08T23:55:52Z | 2019-06-08T23:55:52Z | OWNER | Possible plugin direction: ```python import filetype # https://pypi.org/project/filetype/ @hookimpl(trylast=True) def render_cell(value): if isinstance(value, bytes): info = repr(value) # May still want to truncate this on table view (but not on row page) guess = filetype.guess(value) if guess is not None: # Need jinja2 markup here for \n to display info = "Guess: mime={}, extension={}\n\n{}".format( guess.mime, guess.extension, info ) return info
``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Option to display binary data 453846217 | |
500173464 | https://github.com/simonw/datasette/issues/506#issuecomment-500173464 | https://api.github.com/repos/simonw/datasette/issues/506 | MDEyOklzc3VlQ29tbWVudDUwMDE3MzQ2NA== | simonw 9599 | 2019-06-08T23:44:59Z | 2019-06-08T23:44:59Z | OWNER | This could also be handled by a plugin. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Option to display binary data 453846217 | |
500145486 | https://github.com/simonw/datasette/issues/503#issuecomment-500145486 | https://api.github.com/repos/simonw/datasette/issues/503 | MDEyOklzc3VlQ29tbWVudDUwMDE0NTQ4Ng== | simonw 9599 | 2019-06-08T17:52:38Z | 2019-06-08T17:52:38Z | OWNER | This should definitely work - hopefully not a big fix. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Handle SQLite databases with spaces in their names? 453243459 | |
499923145 | https://github.com/simonw/datasette/issues/394#issuecomment-499923145 | https://api.github.com/repos/simonw/datasette/issues/394 | MDEyOklzc3VlQ29tbWVudDQ5OTkyMzE0NQ== | kevindkeogh 13896256 | 2019-06-07T15:10:57Z | 2019-06-07T15:11:07Z | CONTRIBUTOR | Putting this here in case anyone else encounters the same issue with nginx, I was able to resolve it by passing the header in the nginx proxy config (i.e., |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url configuration setting 396212021 | |
499603495 | https://github.com/simonw/sqlite-utils/issues/24#issuecomment-499603495 | https://api.github.com/repos/simonw/sqlite-utils/issues/24 | MDEyOklzc3VlQ29tbWVudDQ5OTYwMzQ5NQ== | simonw 9599 | 2019-06-06T18:02:20Z | 2019-06-06T18:02:20Z | OWNER | This seems reasonable. It could look like this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Additional Column Constraints? 449818897 | |
499320973 | https://github.com/simonw/datasette/issues/394#issuecomment-499320973 | https://api.github.com/repos/simonw/datasette/issues/394 | MDEyOklzc3VlQ29tbWVudDQ5OTMyMDk3Mw== | kevindkeogh 13896256 | 2019-06-06T02:07:59Z | 2019-06-06T02:07:59Z | CONTRIBUTOR | Hey was this ever merged? Trying to run this behind nginx, and encountering this issue. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url configuration setting 396212021 | |
499262397 | https://github.com/simonw/datasette/issues/498#issuecomment-499262397 | https://api.github.com/repos/simonw/datasette/issues/498 | MDEyOklzc3VlQ29tbWVudDQ5OTI2MjM5Nw== | chrismp 7936571 | 2019-06-05T21:28:32Z | 2019-06-05T21:28:32Z | NONE | Thinking about this more, I'd probably have to make a template page to go along with this, right? I'm guessing there's no way to add an all-databases-all-tables search to datasette's "home page" except by copying the "home page" template and editing it? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Full text search of all tables at once? 451513541 | |
499260727 | https://github.com/simonw/datasette/issues/499#issuecomment-499260727 | https://api.github.com/repos/simonw/datasette/issues/499 | MDEyOklzc3VlQ29tbWVudDQ5OTI2MDcyNw== | chrismp 7936571 | 2019-06-05T21:22:55Z | 2019-06-05T21:22:55Z | NONE | I was thinking of having some kind of GUI in which regular reporters can upload a CSV and choose how to name the tables, columns and whatnot. Maybe it's possible to make such a GUI using Jinja template language? I ask because I'm unsure how to pursue this but I'd like to try. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Accessibility for non-techie newsies? 451585764 | |
498840129 | https://github.com/simonw/datasette/issues/499#issuecomment-498840129 | https://api.github.com/repos/simonw/datasette/issues/499 | MDEyOklzc3VlQ29tbWVudDQ5ODg0MDEyOQ== | simonw 9599 | 2019-06-04T20:55:30Z | 2019-06-04T21:01:22Z | OWNER | I really want this too! It's one of the goals of the Datasette Library #417 concept, which I'm hoping to turn into an actual feature in the coming months. It's also going to be a major focus of my ten month JSK fellowship at Stanford, which starts in September. https://twitter.com/simonw/status/1123624552867565569 |
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Accessibility for non-techie newsies? 451585764 | |
498840597 | https://github.com/simonw/datasette/issues/499#issuecomment-498840597 | https://api.github.com/repos/simonw/datasette/issues/499 | MDEyOklzc3VlQ29tbWVudDQ5ODg0MDU5Nw== | simonw 9599 | 2019-06-04T20:56:53Z | 2019-06-04T20:56:53Z | OWNER | Have you played with Datasette on Glitch yet? https://simonwillison.net/2019/Apr/23/datasette-glitch/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Accessibility for non-techie newsies? 451585764 | |
498839428 | https://github.com/simonw/datasette/issues/498#issuecomment-498839428 | https://api.github.com/repos/simonw/datasette/issues/498 | MDEyOklzc3VlQ29tbWVudDQ5ODgzOTQyOA== | simonw 9599 | 2019-06-04T20:53:21Z | 2019-06-04T20:53:21Z | OWNER | It does not, but that's a really great idea for a feature. One challenge here is that FTS ranking calculations take overall table statistics into account, which means it's usually not possible to combine rankings from different tables in a sensible way. But that doesn't mean it's not possible to return grouped results. I think this makes a lot of sense as a plugin. |
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Full text search of all tables at once? 451513541 | |
498838841 | https://github.com/simonw/datasette/issues/446#issuecomment-498838841 | https://api.github.com/repos/simonw/datasette/issues/446 | MDEyOklzc3VlQ29tbWVudDQ5ODgzODg0MQ== | simonw 9599 | 2019-06-04T20:51:37Z | 2019-06-04T20:51:37Z | OWNER | So the Python 3.7 way to do this would be dataclasses, but I still want to support 3.5. This excellent essay has made me think attrs might be the way to go: https://www.revsys.com/tidbits/dataclasses-and-attrs-when-and-why/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Define mechanism for plugins to return structured data 440134714 | |
497885590 | https://github.com/simonw/datasette/issues/496#issuecomment-497885590 | https://api.github.com/repos/simonw/datasette/issues/496 | MDEyOklzc3VlQ29tbWVudDQ5Nzg4NTU5MA== | costrouc 1740337 | 2019-05-31T23:05:05Z | 2019-05-31T23:05:05Z | NONE | Upon doing a "fix" which allowed a longer build timeout the cloudrun container was too slow when it actually ran. So I would say if your sqlite database is over 1 GB heroku and cloudrun are not good options. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Additional options to gcloud build command in cloudrun - timeout 450862577 | |
497194179 | https://github.com/simonw/datasette/issues/495#issuecomment-497194179 | https://api.github.com/repos/simonw/datasette/issues/495 | MDEyOklzc3VlQ29tbWVudDQ5NzE5NDE3OQ== | simonw 9599 | 2019-05-30T04:04:01Z | 2019-05-30T04:04:01Z | OWNER | I think there are a few steps to solving this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
facet_m2m gets confused by multiple relationships 450032134 | |
497116074 | https://github.com/simonw/datasette/issues/485#issuecomment-497116074 | https://api.github.com/repos/simonw/datasette/issues/485 | MDEyOklzc3VlQ29tbWVudDQ5NzExNjA3NA== | simonw 9599 | 2019-05-29T21:29:16Z | 2019-05-29T21:29:16Z | OWNER | Another good rule of thumb: look for text fields with a unique constraint? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Improvements to table label detection 447469253 | |
496970219 | https://github.com/simonw/datasette/issues/492#issuecomment-496970219 | https://api.github.com/repos/simonw/datasette/issues/492 | MDEyOklzc3VlQ29tbWVudDQ5Njk3MDIxOQ== | simonw 9599 | 2019-05-29T14:50:10Z | 2019-05-29T14:50:10Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Facets not correctly persisted in hidden form fields 449854604 | ||
496966227 | https://github.com/simonw/datasette/issues/120#issuecomment-496966227 | https://api.github.com/repos/simonw/datasette/issues/120 | MDEyOklzc3VlQ29tbWVudDQ5Njk2NjIyNw== | duarteocarmo 26342344 | 2019-05-29T14:40:52Z | 2019-05-29T14:40:52Z | NONE | I would really like this. If you give me some pointers @simonw I'm willing to PR! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Plugin that adds an authentication layer of some sort 275087397 | |
496787958 | https://github.com/simonw/sqlite-utils/issues/16#issuecomment-496787958 | https://api.github.com/repos/simonw/sqlite-utils/issues/16 | MDEyOklzc3VlQ29tbWVudDQ5Njc4Nzk1OA== | simonw 9599 | 2019-05-29T05:17:58Z | 2019-05-29T05:17:58Z | OWNER | Shipped this feature in sqlite-utils 1.1: https://sqlite-utils.readthedocs.io/en/latest/changelog.html#v1-1 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add_column() should support REFERENCES {other_table}({other_column}) 413867537 | |
496786354 | https://github.com/simonw/sqlite-utils/issues/21#issuecomment-496786354 | https://api.github.com/repos/simonw/sqlite-utils/issues/21 | MDEyOklzc3VlQ29tbWVudDQ5Njc4NjM1NA== | simonw 9599 | 2019-05-29T05:09:01Z | 2019-05-29T05:09:01Z | OWNER | Shipped this feature in sqlite-utils 1.1: https://sqlite-utils.readthedocs.io/en/latest/changelog.html#v1-1 |
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Option to ignore inserts if primary key exists already 448391492 | |
496757010 | https://github.com/simonw/sqlite-utils/issues/16#issuecomment-496757010 | https://api.github.com/repos/simonw/sqlite-utils/issues/16 | MDEyOklzc3VlQ29tbWVudDQ5Njc1NzAxMA== | simonw 9599 | 2019-05-29T02:16:17Z | 2019-05-29T02:16:17Z | OWNER | In that case If you want to point at a different column, use |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add_column() should support REFERENCES {other_table}({other_column}) 413867537 | |
496756758 | https://github.com/simonw/sqlite-utils/issues/16#issuecomment-496756758 | https://api.github.com/repos/simonw/sqlite-utils/issues/16 | MDEyOklzc3VlQ29tbWVudDQ5Njc1Njc1OA== | simonw 9599 | 2019-05-29T02:14:50Z | 2019-05-29T02:14:50Z | OWNER | Hmm... probably not:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add_column() should support REFERENCES {other_table}({other_column}) 413867537 | |
496756348 | https://github.com/simonw/sqlite-utils/issues/16#issuecomment-496756348 | https://api.github.com/repos/simonw/sqlite-utils/issues/16 | MDEyOklzc3VlQ29tbWVudDQ5Njc1NjM0OA== | simonw 9599 | 2019-05-29T02:12:43Z | 2019-05-29T02:12:43Z | OWNER | For the CLI I'm thinking:
So the foreign key is added using If the user doesn't provide the column type we can derive it from the foreign key. Can we make the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add_column() should support REFERENCES {other_table}({other_column}) 413867537 | |
496665669 | https://github.com/simonw/sqlite-utils/issues/21#issuecomment-496665669 | https://api.github.com/repos/simonw/sqlite-utils/issues/21 | MDEyOklzc3VlQ29tbWVudDQ5NjY2NTY2OQ== | simonw 9599 | 2019-05-28T19:57:47Z | 2019-05-28T19:57:47Z | OWNER | https://www.sqlite.org/lang_insert.html Looks like it's as simple as |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Option to ignore inserts if primary key exists already 448391492 | |
496367866 | https://github.com/simonw/datasette/issues/485#issuecomment-496367866 | https://api.github.com/repos/simonw/datasette/issues/485 | MDEyOklzc3VlQ29tbWVudDQ5NjM2Nzg2Ng== | simonw 9599 | 2019-05-28T05:14:06Z | 2019-05-28T05:14:06Z | OWNER | I'm going to generate statistics for every TEXT column. Any column with more than 90% distinct rows (compared to the total count of rows) will be a candidate for the label. I will then pick the candidate column with the shortest average length. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Improvements to table label detection 447469253 | |
496345660 | https://github.com/simonw/datasette/issues/489#issuecomment-496345660 | https://api.github.com/repos/simonw/datasette/issues/489 | MDEyOklzc3VlQ29tbWVudDQ5NjM0NTY2MA== | simonw 9599 | 2019-05-28T02:48:57Z | 2019-05-28T02:48:57Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Pagination breaks when combined with expanded foreign keys 448977444 | ||
496339819 | https://github.com/simonw/datasette/issues/473#issuecomment-496339819 | https://api.github.com/repos/simonw/datasette/issues/473 | MDEyOklzc3VlQ29tbWVudDQ5NjMzOTgxOQ== | simonw 9599 | 2019-05-28T02:13:44Z | 2019-05-28T02:13:44Z | OWNER | I'm leaning towards supporting both hooks. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Plugin hook: filters_from_request 445850934 | |
496339574 | https://github.com/simonw/datasette/issues/473#issuecomment-496339574 | https://api.github.com/repos/simonw/datasette/issues/473 | MDEyOklzc3VlQ29tbWVudDQ5NjMzOTU3NA== | simonw 9599 | 2019-05-28T02:12:13Z | 2019-05-28T02:13:07Z | OWNER | Here's an older version of what that custom table filtering plugin might look like: https://github.com/simonw/datasette/commit/5116c4ec8aed5091e1f75415424b80f613518dc6 ```python from datasette.utils import TableFilter @hookimpl def table_filter(): async def inner(view, name, table, request): extra_human_descriptions = [] where_clauses = [] params = {} # ... build those things here return TableFilter( human_description_extras=extra_human_descriptions, where_clauses=where_clauses, params=params, ) return inner ``` I built this for the https://github.com/simonw/russian-ira-facebook-ads-datasette project. It's pretty neat. Maybe I should go with that? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Plugin hook: filters_from_request 445850934 | |
496338808 | https://github.com/simonw/datasette/issues/473#issuecomment-496338808 | https://api.github.com/repos/simonw/datasette/issues/473 | MDEyOklzc3VlQ29tbWVudDQ5NjMzODgwOA== | simonw 9599 | 2019-05-28T02:07:23Z | 2019-05-28T02:07:23Z | OWNER | Assuming I do go ahead with this plugin hook, the existing ```python class InFilter(Filter): key = "in" display = "in"
``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Plugin hook: filters_from_request 445850934 | |
496338666 | https://github.com/simonw/datasette/issues/473#issuecomment-496338666 | https://api.github.com/repos/simonw/datasette/issues/473 | MDEyOklzc3VlQ29tbWVudDQ5NjMzODY2Ng== | simonw 9599 | 2019-05-28T02:06:23Z | 2019-05-28T02:06:23Z | OWNER | I'm having trouble coming up with interesting column-based filters which don't make sense to ship as default behaviour. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Plugin hook: filters_from_request 445850934 | |
496338533 | https://github.com/simonw/datasette/issues/473#issuecomment-496338533 | https://api.github.com/repos/simonw/datasette/issues/473 | MDEyOklzc3VlQ29tbWVudDQ5NjMzODUzMw== | simonw 9599 | 2019-05-28T02:05:39Z | 2019-05-28T02:05:39Z | OWNER | I wonder if this is the right hook? The more likely case is that we need a hook that registers a new type of lookup entirely - Is there a strong case for supporting both custom filter plugins AND custom table where plugins, or could those where plugins cover both bases? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Plugin hook: filters_from_request 445850934 | |
496337533 | https://github.com/simonw/datasette/issues/473#issuecomment-496337533 | https://api.github.com/repos/simonw/datasette/issues/473 | MDEyOklzc3VlQ29tbWVudDQ5NjMzNzUzMw== | simonw 9599 | 2019-05-28T01:59:19Z | 2019-05-28T01:59:19Z | OWNER | It would be nice if this plugin was passed the current database/table so it can decide to enable new filters only for specific tables. This will require a bit of refactoring because the filters list is static at the moment - it would instead have to be returned by a function that runs when the table view is rendered. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Plugin hook: filters_from_request 445850934 | |
496322262 | https://github.com/simonw/datasette/issues/490#issuecomment-496322262 | https://api.github.com/repos/simonw/datasette/issues/490 | MDEyOklzc3VlQ29tbWVudDQ5NjMyMjI2Mg== | simonw 9599 | 2019-05-27T23:51:12Z | 2019-05-27T23:51:12Z | OWNER | I'll call it |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Rename InterruptedError exception class 448978907 | |
496283728 | https://github.com/simonw/datasette/issues/485#issuecomment-496283728 | https://api.github.com/repos/simonw/datasette/issues/485 | MDEyOklzc3VlQ29tbWVudDQ5NjI4MzcyOA== | simonw 9599 | 2019-05-27T18:44:07Z | 2019-05-27T18:44:07Z | OWNER | This code now lives in a method on the new |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Improvements to table label detection 447469253 | |
496077220 | https://github.com/simonw/datasette/issues/487#issuecomment-496077220 | https://api.github.com/repos/simonw/datasette/issues/487 | MDEyOklzc3VlQ29tbWVudDQ5NjA3NzIyMA== | simonw 9599 | 2019-05-27T04:56:14Z | 2019-05-27T04:56:14Z | OWNER | I'm going to rename |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Refactor database methods off Datasette class 448664792 | |
496039483 | https://github.com/simonw/datasette/issues/485#issuecomment-496039483 | https://api.github.com/repos/simonw/datasette/issues/485 | MDEyOklzc3VlQ29tbWVudDQ5NjAzOTQ4Mw== | simonw 9599 | 2019-05-26T23:22:53Z | 2019-05-26T23:22:53Z | OWNER | Comparing these two SQL queries (the one with union and the one without) using explain: So I'm going to use the one without the union. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Improvements to table label detection 447469253 | |
496039267 | https://github.com/simonw/datasette/issues/485#issuecomment-496039267 | https://api.github.com/repos/simonw/datasette/issues/485 | MDEyOklzc3VlQ29tbWVudDQ5NjAzOTI2Nw== | simonw 9599 | 2019-05-26T23:19:38Z | 2019-05-26T23:20:10Z | OWNER | Thinking about that union query: I imagine doing this with union could encourage multiple full table scans. Maybe this query would only do one? https://latest.datasette.io/fixtures?sql=select%0D%0A++count+%28distinct+name%29+as+count_distinct_column_1%2C%0D%0A++avg%28length%28name%29%29+as+avg_length_column_1%2C%0D%0A++count%28distinct+address%29+as+count_distinct_column_2%2C%0D%0A++avg%28length%28address%29%29+as+avg_length_column_2%0D%0Afrom+roadside_attractions
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Improvements to table label detection 447469253 | |
495085021 | https://github.com/simonw/datasette/issues/485#issuecomment-495085021 | https://api.github.com/repos/simonw/datasette/issues/485 | MDEyOklzc3VlQ29tbWVudDQ5NTA4NTAyMQ== | simonw 9599 | 2019-05-23T06:27:57Z | 2019-05-26T23:15:51Z | OWNER | I could attempt to calculate the statistics needed for this in a time limited SQL query something like this one: https://latest.datasette.io/fixtures?sql=select+%27name%27+as+column%2C+count+%28distinct+name%29+as+count_distinct%2C+avg%28length%28name%29%29+as+avg_length+from+roadside_attractions%0D%0A++union%0D%0Aselect+%27address%27+as+column%2C+count%28distinct+address%29+as+count_distinct%2C+avg%28length%28address%29%29+as+avg_length+from+roadside_attractions
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Improvements to table label detection 447469253 | |
496038601 | https://github.com/simonw/datasette/issues/485#issuecomment-496038601 | https://api.github.com/repos/simonw/datasette/issues/485 | MDEyOklzc3VlQ29tbWVudDQ5NjAzODYwMQ== | simonw 9599 | 2019-05-26T23:08:41Z | 2019-05-26T23:08:41Z | OWNER | The code currently assumes the primary key is called "id" or "pk" - improving it to detect the primary key using database introspection should work much better. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Improvements to table label detection 447469253 | |
495931140 | https://github.com/simonw/datasette/issues/356#issuecomment-495931140 | https://api.github.com/repos/simonw/datasette/issues/356 | MDEyOklzc3VlQ29tbWVudDQ5NTkzMTE0MA== | simonw 9599 | 2019-05-25T16:30:59Z | 2019-05-25T16:30:59Z | OWNER | I went with a much more simple URL scheme: This can be extended to be more complicated in the future if needed. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ability to display facet counts for many-to-many relationships 346028655 | |
495931078 | https://github.com/simonw/datasette/issues/356#issuecomment-495931078 | https://api.github.com/repos/simonw/datasette/issues/356 | MDEyOklzc3VlQ29tbWVudDQ5NTkzMTA3OA== | simonw 9599 | 2019-05-25T16:30:09Z | 2019-05-25T16:30:09Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ability to display facet counts for many-to-many relationships 346028655 | ||
495929743 | https://github.com/simonw/datasette/pull/365#issuecomment-495929743 | https://api.github.com/repos/simonw/datasette/issues/365 | MDEyOklzc3VlQ29tbWVudDQ5NTkyOTc0Mw== | simonw 9599 | 2019-05-25T16:09:54Z | 2019-05-25T16:09:54Z | OWNER | That last commit referenced the wrong ticket - it was meant to reference #356 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
fix small doc typo 361764460 |
Advanced export
JSON shape: default, array, newline-delimited, object
CREATE TABLE [issue_comments] ( [html_url] TEXT, [issue_url] TEXT, [id] INTEGER PRIMARY KEY, [node_id] TEXT, [user] INTEGER REFERENCES [users]([id]), [created_at] TEXT, [updated_at] TEXT, [author_association] TEXT, [body] TEXT, [reactions] TEXT, [issue] INTEGER REFERENCES [issues]([id]) , [performed_via_github_app] TEXT); CREATE INDEX [idx_issue_comments_issue] ON [issue_comments] ([issue]); CREATE INDEX [idx_issue_comments_user] ON [issue_comments] ([user]);
user >30