{"html_url": "https://github.com/simonw/datasette/pull/209#issuecomment-381441392", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/209", "id": 381441392, "node_id": "MDEyOklzc3VlQ29tbWVudDM4MTQ0MTM5Mg==", "user": {"value": 45057, "label": "russss"}, "created_at": "2018-04-15T21:59:15Z", "updated_at": "2018-04-15T21:59:15Z", "author_association": "CONTRIBUTOR", "body": "I suspected this would cause some test failures, but I'll wait for opinions before attempting to fix them.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 314455877, "label": " Don't duplicate simple primary keys in the link column"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/14#issuecomment-381442233", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/14", "id": 381442233, "node_id": "MDEyOklzc3VlQ29tbWVudDM4MTQ0MjIzMw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2018-04-15T22:13:06Z", "updated_at": "2018-04-15T22:13:06Z", "author_association": "OWNER", "body": "I started a thread on Twitter asking people for good examples of Python projects with a strong plugin ecosystem: https://twitter.com/simonw/status/985377670388105216\r\n\r\nThe most impressive example that came back was pytest - which now has nearly 400 plugins: https://plugincompat.herokuapp.com/\r\n\r\nThe pytest plugin infrastructure is available as an independent package called pluggy - which appears to offer everything I need for Datasette. I'm going to give that a go and see how well it works: https://pluggy.readthedocs.io/en/latest/", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267707940, "label": "Datasette Plugins"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/14#issuecomment-381442494", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/14", "id": 381442494, "node_id": "MDEyOklzc3VlQ29tbWVudDM4MTQ0MjQ5NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2018-04-15T22:17:59Z", "updated_at": "2018-04-15T22:17:59Z", "author_association": "OWNER", "body": "Datasette 1.0 will be the release of Datasette that attempts to provide a stable plugin API: https://github.com/simonw/datasette/milestone/7\r\n\r\nThere's a lot of work to be done before then, but as a starting point I'm going to support two very simple extension mechanisms:\r\n\r\n* Template system plugins - where the hook gets passed the Jinja environment and can freely register new template tags and filters\r\n* SQLite connection plugins - where the hook gets passed a new SQLite connection and can register custom SQLite functions\r\n\r\nThe template system hook will go near here:\r\n\r\nhttps://github.com/simonw/datasette/blob/efbb4e83374a2c795e436c72fa79f70da72309b8/datasette/app.py#L1225-L1228\r\n\r\nThe SQLite connection hook will go near here:\r\n\r\nhttps://github.com/simonw/datasette/blob/efbb4e83374a2c795e436c72fa79f70da72309b8/datasette/app.py#L1094-L1098\r\n\r\nThese two feel simple enough that I'm not worried that I might design an API that I later regret.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267707940, "label": "Datasette Plugins"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/14#issuecomment-381443728", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/14", "id": 381443728, "node_id": "MDEyOklzc3VlQ29tbWVudDM4MTQ0MzcyOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2018-04-15T22:39:00Z", "updated_at": "2018-04-15T22:39:00Z", "author_association": "OWNER", "body": "Tox is a good example of a project that uses pluggy in the way I want to use it (function hooks rather than classes): https://github.com/tox-dev/tox/blob/master/tox/hookspecs.py", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267707940, "label": "Datasette Plugins"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/203#issuecomment-381446554", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/203", "id": 381446554, "node_id": "MDEyOklzc3VlQ29tbWVudDM4MTQ0NjU1NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2018-04-15T23:25:54Z", "updated_at": "2018-04-15T23:26:03Z", "author_association": "OWNER", "body": "I built a prototype of the `convert_units()` custom SQL function as a plugin over in https://github.com/simonw/datasette/issues/14#issuecomment-381446511", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 313837303, "label": "Support for units"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/14#issuecomment-381446511", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/14", "id": 381446511, "node_id": "MDEyOklzc3VlQ29tbWVudDM4MTQ0NjUxMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2018-04-15T23:25:04Z", "updated_at": "2018-04-15T23:25:04Z", "author_association": "OWNER", "body": "Here's a demo of the `convert_units()` SQL function I prototyped in f2720b0c6b7172ebe88\r\n\r\n![2018-04-15 at 4 23 pm](https://user-images.githubusercontent.com/9599/38784633-8c43821e-40c9-11e8-97dd-697755a0f858.png)\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267707940, "label": "Datasette Plugins"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/14#issuecomment-381446906", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/14", "id": 381446906, "node_id": "MDEyOklzc3VlQ29tbWVudDM4MTQ0NjkwNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2018-04-15T23:31:58Z", "updated_at": "2018-04-15T23:34:10Z", "author_association": "OWNER", "body": "Once I've got the plugins mechanism stable and people start releasing plugins it would be useful to have a dedicated Trove classifier on PyPI for Datasette plugins - `Framework :: Datasette` for example.\r\n\r\nThis would help me build a Datasette equivalent of the http://plugincompat.herokuapp.com/ site, which works by scanning PyPI for items with the ``Framework :: Pytest`` classifier:\r\n\r\nhttps://github.com/pytest-dev/plugincompat/blob/8bdf1a6fb82807091ece0c68c196103ee8270194/update_index.py#L52-L53\r\n\r\nIt looks like the mechanism for requesting new PyPI classifiers is to file a ticket against warehouse, like these ones: https://github.com/pypa/warehouse/issues/3570 and https://github.com/pypa/warehouse/issues/2881", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267707940, "label": "Datasette Plugins"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/189#issuecomment-381429213", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/189", "id": 381429213, "node_id": "MDEyOklzc3VlQ29tbWVudDM4MTQyOTIxMw==", "user": {"value": 222245, "label": "carlmjohnson"}, "created_at": "2018-04-15T18:54:22Z", "updated_at": "2018-04-15T18:54:22Z", "author_association": "NONE", "body": "I think I found a bug. I tried to sort by middle initial in my salaries set, and many middle initials are null. The next_url gets set by Datasette to:\r\n\r\nhttp://localhost:8001/salaries-d3a5631/2017+Maryland+state+salaries?_next=None%2C391&_sort=middle_initial\r\n\r\nBut then `None` is interpreted literally and it tries to find a name with the middle initial \"None\" and ends up skipping ahead to O on page 2.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 309471814, "label": "Ability to sort (and paginate) by column"}, "performed_via_github_app": null}