{"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1900026059, "label": "Plugin Hooks for \"compile to SQL\" languages"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1898927976, "label": "Mechanism for register_output_renderer hooks to access full count"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1886812002, "label": "actors_from_ids plugin hook and datasette.actors_from_ids() method"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1886791100, "label": "Plugin hook: `actors_from_ids()`"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1876353656, "label": "Consider a request/response wrapping hook slightly higher level than asgi_wrapper()"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1874327336, "label": "DATASETTE_LOAD_PLUGINS environment variable for loading specific plugins"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1874255116, "label": "Ability to only load a specific list of plugins"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1865869205, "label": "Proposal: Make the `_internal` database persistent, customizable, and hidden"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1858228057, "label": "Plugin hook for database queries that are run"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1841501975, "label": "[feature request]`datasette install plugins.json` options"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1840329615, "label": "Render plugin mechanism needs `error` and `truncated` fields"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1840324765, "label": "CSV ?sql= should indicate errors"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1822982933, "label": "Figure out what to do about `DatabaseView.name`"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1822938661, "label": "Build HTML version of /content?sql=..."}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1816857442, "label": "`datasette install -e` option"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1560662739, "label": "`render_cell()` hook should take an optional `request` argument"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1557507274, "label": "`extra_template_vars` should be OK to return `None`"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1529707837, "label": "Reconsider pattern where plugins could break existing template context"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1525815985, "label": "Make CustomJSONEncoder a documented public API"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1515815014, "label": "render_cell plugin hook's row object is not a sqlite.Row"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1487738738, "label": "Option for plugins to request that JSON be served on the page"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1485757511, "label": "register_permissions(datasette) plugin hook"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1454532488, "label": "Document {% block crumbs %} for plugin authors"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1397193691, "label": "__bool__ method on Results"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1396977994, "label": "Add documentation for writing tests with signed actor cookies"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1388631785, "label": "render_cell documentation example doesn't match the method signature"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1386854246, "label": "Switch to keyword-only arguments for a bunch of internal methods"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1384273985, "label": "Expose `sql` and `params` arguments to various plugin hooks"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1373595927, "label": "`prepare_jinja2_environment()` hook should take `datasette` argument"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1368030952, "label": "Database() constructor currently defaults is_mutable to False"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1366915240, "label": "Plugin ecosystem needs to avoid crashes due to no available databases"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1306492437, "label": "`handle_exception` plugin hook for custom error handling"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1292370469, "label": "Document plugins providing new plugin hook-"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1216436131, "label": "Implement plugin hooks: `register_table_extras`, `register_row_extras`, `register_query_extras`"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1215174094, "label": "Design plugin hook for extras"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1203943272, "label": "Datasette feature for publishing snapshots of query results"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1197926598, "label": "How to upgrade your plugin for 1.0 documentation"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1197925865, "label": "File PRs against incompatible plugins pinning to datasette<1.0"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1182227211, "label": "[plugins][feature request]: Support additional script tag attributes when loading custom JS"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1182141761, "label": "Idea: `datasette.set_actor_cookie(response, actor)`"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1181364043, "label": "Make show_json.html or a similar mechanism stable for plugins"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1148638868, "label": "Make datasette-redirect-forbidden unneccessary"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1100015398, "label": "Maybe let plugins define custom serve options?"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1083657868, "label": "Documented JavaScript variables on different templates made available for plugins"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1082743068, "label": "filters_from_request plugin hook, now used in TableView"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1072106103, "label": "feature request: order and dependency of plugins (that use js)"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1066288689, "label": "Research pattern for re-registering existing Click tools with register_commands"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1058803238, "label": "Pattern for avoiding accidental URL over-rides"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1057996111, "label": "Let `register_routes()` over-ride default routes within Datasette"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 1054246919, "label": "Review plugin hooks for Datasette 1.0"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 981676832, "label": "`register_commands()` plugin hook to register extra CLI commands"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 963528457, "label": "render_cell() hook should support returning an awaitable"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 955316250, "label": "utils.parse_metadata() should be a documented internal function"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 953352015, "label": "`register_routes()` hook should take `datasette` argument"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 930807135, "label": "Plugin hook for dynamic metadata"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 920884085, "label": "Mechanism for plugins to exclude certain paths from CSRF checks"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 915488244, "label": "Add section to \"writing plugins\" about security, e.g. avoiding XSS"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 915455228, "label": "Menu plugin hooks should include the request"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 903902495, "label": "Improve `path_with_replaced_args()` and friends and document them"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 860625833, "label": "Make row available to `render_cell` plugin hook"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 836273891, "label": "Documentation for Response.asgi_send(send) method"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 834602299, "label": "Plugin hook that could support 'order by random()' for table view"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 787173276, "label": "Research plugin hook for alternative database backends"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 787098345, "label": "Ability for plugins to collaborate when adding extra HTML to blocks in default templates"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 787098146, "label": "`datasette publish upload` mechanism for uploading databases to an existing Datasette instance"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 785588942, "label": "extra_body_script() support for script type=\"module\""}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 783714076, "label": "request.full_path property"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 780767542, "label": "Lazily evaluated arguments for call_with_supported_arguments"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 780278550, "label": "Make original path available to render hooks"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 777333388, "label": "Mechanism for storing metadata in _metadata tables"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 775666296, "label": "\"datasette insert\" command and plugin hook"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 770598024, "label": "Efficiently calculate list of databases/tables a user can view"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 765637324, "label": "JavaScript to help plugins interact with the fragment part of the URL"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 749289611, "label": "Plugin testing docs should show datasette.client"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 749283032, "label": "register_output_renderer() should support streaming data"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 742041667, "label": "Make cascading permission checks available to plugins"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 741862364, "label": "Custom widgets for canned query forms"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 733829385, "label": "database_actions plugin hook"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 733560417, "label": "Remove load_template plugin hook"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 733499930, "label": "load_template hook doesn't work for include/extends"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 733303548, "label": "load_template() plugin hook"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 732859030, "label": "Table actions menu plus plugin hook"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 732856937, "label": "Nav menu plus menu_links() hook"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 732798913, "label": "Navigation menu plus plugin hook"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 732674148, "label": "Refactor .csv to be an output renderer - and teach register_output_renderer to stream all rows"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 729604838, "label": "Document recommendations for plugin authors to design URLs"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 729183332, "label": "Column action menu overlapped by Leaflet maps"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 728600048, "label": "Document that datasette.render_template(template, ...) also accepts a list of templates"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 727802081, "label": "Plugin hook for loading templates"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 725743755, "label": "datasette.urls.table(..., format=\"json\") argument"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 725099777, "label": "datasette.urls.static_plugins(...) method"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 713209404, "label": "Mechanism for plugins to construct URLs that respect base_url"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 712984738, "label": "Documented HTML hooks for JavaScript plugin authors"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 712260429, "label": "JavaScript plugin hooks mechanism similar to pluggy"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 691537426, "label": "Internals API idea: results.dicts in addition to results.rows"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 688622148, "label": "Simplify imports of common classes"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 687711713, "label": "Release updated datasette-atom and datasette-ics"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 687694947, "label": "Remove old register_output_renderer dict mechanism in Datasette 1.0"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 687681018, "label": "register_output_renderer render function should be able to return a Response"}} {"labels_id": {"value": 754269786, "label": "plugins"}, "issues_id": {"value": 685806511, "label": "Private/secret databases: database files that are only visible to plugins"}}