{"id": 725184645, "node_id": "MDU6SXNzdWU3MjUxODQ2NDU=", "number": 1034, "title": "Better way of representing binary data in .csv output", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 6026070, "label": "0.51"}, "comments": 19, "created_at": "2020-10-20T04:28:58Z", "updated_at": "2021-06-17T18:13:21Z", "closed_at": "2020-10-29T22:47:46Z", "author_association": "OWNER", "pull_request": null, "body": "I just noticed this: https://latest.datasette.io/fixtures/binary_data.csv\r\n\r\n```csv\r\nrowid,data\r\n1,b'\\x15\\x1c\\x02\\xc7\\xad\\x05\\xfe'\r\n2,b'\\x15\\x1c\\x03\\xc7\\xad\\x05\\xfe'\r\n```\r\nThere's no good way to represent binary data in a CSV file, but this seems like one of the more-bad options.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1034/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 732685643, "node_id": "MDU6SXNzdWU3MzI2ODU2NDM=", "number": 1063, "title": ".csv should link to .blob downloads", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 6026070, "label": "0.51"}, "comments": 3, "created_at": "2020-10-29T21:45:58Z", "updated_at": "2021-06-17T18:12:30Z", "closed_at": "2020-10-29T22:47:45Z", "author_association": "OWNER", "pull_request": null, "body": "- [x] Update `.csv` output to link to these things (and get that `xfail` test to pass)\r\n- ~~Add a `.csv?_blob_base64=1` argument that causes them to be output in base64 in the CSV~~\r\n\r\n> Moving the CSV work to a separate ticket.\r\n_Originally posted by @simonw in https://github.com/simonw/datasette/pull/1061#issuecomment-719042601_", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1063/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 729096595, "node_id": "MDU6SXNzdWU3MjkwOTY1OTU=", "number": 1051, "title": "Better display of binary data on arbitrary query results page", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 6, "created_at": "2020-10-25T19:38:06Z", "updated_at": "2020-10-29T22:12:16Z", "closed_at": "2020-10-29T22:01:39Z", "author_association": "OWNER", "pull_request": null, "body": "https://latest.datasette.io/fixtures?sql=select+rowid%2C+data+from+binary_data+order+by+rowid+limit+101\r\n\r\n\"fixtures__select_rowid__data_from_binary_data_order_by_rowid_limit_101_and_Switch_to__blob_render_extension_for_BLOB_downloads_\u00b7_Issue__1050_\u00b7_simonw_datasette\"\r\n\r\nProblem: if these were larger fields that HTML page could have multiple megabytes of Python binary string representations on it.\r\n\r\nIt should behave more like the regular table view does:\r\n\r\n\"fixtures__binary_data__2_rows\"\r\n", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1051/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 732634375, "node_id": "MDExOlB1bGxSZXF1ZXN0NTEyNTQ1MzY0", "number": 1061, "title": ".blob output renderer", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 6026070, "label": "0.51"}, "comments": 4, "created_at": "2020-10-29T20:25:08Z", "updated_at": "2020-10-29T22:01:40Z", "closed_at": "2020-10-29T22:01:39Z", "author_association": "OWNER", "pull_request": "simonw/datasette/pulls/1061", "body": "- [x] Remove the `/-/...blob/...` route I added in #1040 in place of the new `.blob` renderer URLs\r\n- [x] Link to new `.blob` download links on the arbitrary query page (using `_blob_hash=...`) - plus tests for this\r\n\r\nCloses #1050, Closes #1051", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1061/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null} {"id": 729057388, "node_id": "MDU6SXNzdWU3MjkwNTczODg=", "number": 1050, "title": "Switch to .blob render extension for BLOB downloads", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 6026070, "label": "0.51"}, "comments": 10, "created_at": "2020-10-25T16:26:21Z", "updated_at": "2020-10-29T22:01:39Z", "closed_at": "2020-10-29T22:01:39Z", "author_association": "OWNER", "pull_request": null, "body": "This may require a complete rethink of the `/db/table/-/blob/row/column.blob` mechanism I just built for #1036.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1050/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 729604838, "node_id": "MDU6SXNzdWU3Mjk2MDQ4Mzg=", "number": 1053, "title": "Document recommendations for plugin authors to design URLs", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 6026070, "label": "0.51"}, "comments": 1, "created_at": "2020-10-26T14:19:21Z", "updated_at": "2020-10-29T19:37:58Z", "closed_at": "2020-10-29T19:35:40Z", "author_association": "OWNER", "pull_request": null, "body": "See thread: https://twitter.com/kanedr/status/1320653434895347713\r\n\r\n> The process and API for making a plugin is great btw. One question I had was the best format for URLs. I've created an url like ///reconcile as a json endpoint, but that could conflict with the row-level URLs. Is there a recommended pattern to use?", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1053/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 729017519, "node_id": "MDExOlB1bGxSZXF1ZXN0NTA5NTkwMjA1", "number": 1049, "title": "Add template block prior to extra URL loaders", "user": {"value": 82988, "label": "psychemedia"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 4, "created_at": "2020-10-25T13:08:55Z", "updated_at": "2020-10-29T09:20:52Z", "closed_at": "2020-10-29T09:20:34Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/1049", "body": "To handle packages that require Javascript state setting prior to loading a package (eg [`thebelab`](https://thebelab.readthedocs.io/en/latest/examples/minimal_example.html), provide a template block before the URLs are loaded.", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1049/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null} {"id": 730199464, "node_id": "MDU6SXNzdWU3MzAxOTk0NjQ=", "number": 1054, "title": "Switch from versioneer to concrete version in setup.py", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 6026070, "label": "0.51"}, "comments": 2, "created_at": "2020-10-27T07:38:08Z", "updated_at": "2020-10-29T03:38:18Z", "closed_at": "2020-10-29T03:38:17Z", "author_association": "OWNER", "pull_request": null, "body": "The new PyPI resolver keeps on showing me warnings like this one when I install Datasette directly from GitHub using `pip install https://github.com/simonw/datasette/archive/main.zip`:\r\n```\r\nSuccessfully built datasette\r\nInstalling collected packages: datasette\r\n Attempting uninstall: datasette\r\n Found existing installation: datasette 0.50.2\r\n Uninstalling datasette-0.50.2:\r\n Successfully uninstalled datasette-0.50.2\r\nERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts.\r\n\r\nWe recommend you use --use-feature=2020-resolver to test your packages with the new resolver before it becomes the default.\r\n\r\ndatasette-upload-csvs 0.5 requires datasette>=0.47, but you'll have datasette 0+unknown which is incompatible.\r\ndatasette-publish-vercel 0.8 requires datasette>=0.44, but you'll have datasette 0+unknown which is incompatible.\r\ndatasette-psutil 0.2 requires datasette>=0.44, but you'll have datasette 0+unknown which is incompatible.\r\ndatasette-leaflet-geojson 0.6 requires datasette>=0.48, but you'll have datasette 0+unknown which is incompatible.\r\ndatasette-edit-schema 0.3 requires datasette>=0.44, but you'll have datasette 0+unknown which is incompatible.\r\ndatasette-cluster-map 0.13 requires datasette>=0.48, but you'll have datasette 0+unknown which is incompatible.\r\nSuccessfully installed datasette-0+unknown\r\n```\r\nThis is because we use versioneer. I'm going to drop that in favour of embedding the version directly in `setup.py`, like I do in other projects such as `sqlite-utils`.\r\n\r\nI'll use a `.dev` suffix in the development version, as suggested by https://www.python.org/dev/peps/pep-0440/#developmental-releases", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1054/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 731827081, "node_id": "MDExOlB1bGxSZXF1ZXN0NTExODY4MTUz", "number": 1060, "title": "New explicit versioning mechanism", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 6026070, "label": "0.51"}, "comments": 1, "created_at": "2020-10-28T22:14:55Z", "updated_at": "2020-10-29T03:38:17Z", "closed_at": "2020-10-29T03:38:16Z", "author_association": "OWNER", "pull_request": "simonw/datasette/pulls/1060", "body": "- Remove all references to versioneer\r\n- Re-implement versioning to use a static string baked into the repo\r\n- Ensure that string is output by `datasette --version` and `/-/versions`\r\n\r\nRefs #1054", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1060/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}