labels_id,labels_id_label,issues_id,issues_id_label 754269786,plugins,267707940,Datasette Plugins 754269786,plugins,275082158,"Build an ""export this data to google sheets"" plugin" 754269786,plugins,275087397,Plugin that adds an authentication layer of some sort 754269786,plugins,314471743,Load plugins from a `--plugins-dir=plugins/` directory 754269786,plugins,314506033,Documentation for plugins system 754269786,plugins,314506446,Ability for plugins to define extra JavaScript and CSS 754269786,plugins,314506669,Allow plugins to define additional URL routes and views 754269786,plugins,314725342,Plugin support for datasette publish 754269786,plugins,314847571,Investigate syntactic sugar for plugins 754269786,plugins,315142414,Allow plugins to add new cli sub commands 754269786,plugins,315327860,datasette publish --install=name-of-plugin 754269786,plugins,315517578,Ability for plugins to bundle templates 754269786,plugins,315738696,Unit tests for installable plugins 754269786,plugins,315960272,prepare_context() plugin hook 754269786,plugins,316323336,metadata.json support for plugin configuration options 754269786,plugins,317714268,External metadata.json 754269786,plugins,323658641,Add ?_extra= mechanism for requesting extra properties in JSON 754269786,plugins,345821500,render_cell(value) plugin hook 754269786,plugins,345821778,render_cell(value) plugin hook 754269786,plugins,348043884,Plugin hook for loading metadata.json 754269786,plugins,440134714,Define mechanism for plugins to return structured data 754269786,plugins,445850934,Plugin hook: filters_from_request 754269786,plugins,459598080,asgi_wrapper plugin hook 754269786,plugins,460095928,Establish a pattern for Datasette plugins built on top of Pandas 754269786,plugins,460540321,Extract codemirror SQL editor out into a plugin 754269786,plugins,464779810,Plugin hook for adding extra template context variables 754269786,plugins,497162288,Plugin documentation should cover how to bundle static/templates in setup.py 754269786,plugins,497170355,Documented internals API for use in plugins 754269786,plugins,497171390,Utility mechanism for plugins to render templates 754269786,plugins,502355384,Testing utilities should be available to plugins 754269786,plugins,502993509,Redesign register_output_renderer callback 754269786,plugins,512218858,/-/plugins shows incorrect name for plugins 754269786,plugins,529429214,Provide a cookiecutter template for creating new plugins 754269786,plugins,530653633,Mechanism for register_output_renderer to suggest extension or not 754269786,plugins,531755959,Move hashed URL mode out to a plugin 754269786,plugins,569253072,prepare_connection() plugin hook should accept optional datasette argument 754269786,plugins,569317377,Cashe-header missing in http-response 754269786,plugins,570301333,Add documentation on Database introspection methods to internals.rst 754269786,plugins,570309546,Document (and reconsider design of) Database.execute() and Database.execute_against_connection_in_thread() 754269786,plugins,572896293,Expand plugins documentation to multiple pages 754269786,plugins,573755726,Mechanism for plugins to add action menu items for various things 754269786,plugins,574035432,is_hidden_table context variable on table.html page 754269786,plugins,574043218,Variables from extra_template_vars() not exposed in _context=1 754269786,plugins,582526961,Authentication (and permissions) as a core concept 754269786,plugins,585633142,"Documentation for the ""request"" object" 754269786,plugins,587314002,Each plugin hook should link to example plugins built with it 754269786,plugins,594168758,extra_template_vars() sending wrong view_name for index 754269786,plugins,594237015,Plugin idea: datasette-redirects 754269786,plugins,608613033,Extract the hash-URL mechanism out into a plugin 754269786,plugins,626001501,All plugin hooks should have unit tests 754269786,plugins,626131309,Move test plugins into datasette/tests/plugins/ directory 754269786,plugins,626163974,register_output_renderer render callback should be optionally awaitable 754269786,plugins,626582657,Make human_description_en explicitly available to output renderers 754269786,plugins,626593402,Internals documentation for datasette.metadata() method 754269786,plugins,629535669,Show hooks implemented by each plugin on /-/plugins 754269786,plugins,632753851,Release Datasette 0.44 754269786,plugins,632918799,Permission check for every view in Datasette (plus docs) 754269786,plugins,634112607,Ability to customize what happens when a view permission fails 754269786,plugins,634783573,Come up with a new example for extra_template_vars plugin 754269786,plugins,634844634,Drop resource_type from permission_allowed system 754269786,plugins,634917088,Example permissions plugin 754269786,plugins,635037204,register_routes() plugin hook 754269786,plugins,635049296,Idea: Plugin hook for registering canned queries 754269786,plugins,635076066,Add Response class to internals documentation 754269786,plugins,635077656,request.url_vars helper property 754269786,plugins,635107393,"Documentation is inconsistent about ""id"" as required field on actor" 754269786,plugins,635108074,Example authentication plugin 754269786,plugins,635696400,Document CSRF protection (for plugins) 754269786,plugins,636511683,Redesign register_facet_classes plugin hook 754269786,plugins,637342551,startup() plugin hook 754269786,plugins,637370652,Plugin $env secrets mechanism doesn't work inside lists 754269786,plugins,640917326,canned_queries() plugin hook 754269786,plugins,640943441,Ensure register_routes() works for POST 754269786,plugins,641460179,"Respect default scope[""actor""] if one exists" 754269786,plugins,642127307,Add instructions for using cookiecutter plugin template to plugin docs 754269786,plugins,642651572,Plugin hook for instance/database/table metadata 754269786,plugins,644283211,{{ csrftoken() }} doesn't work with datasette.render_template() 754269786,plugins,644309017,datasette.add_message() doesn't work inside plugins 754269786,plugins,645975649,register_routes() should support non-async view functions too 754269786,plugins,646992096,Release non-alpha plugins when 0.45 is out 754269786,plugins,648435885,"New pattern for views that return either JSON or HTML, available for plugins" 754269786,plugins,649907676,asgi_wrapper plugin hook is crashing at startup 754269786,plugins,659580487,Request method for retrieving the unparsed request body 754269786,plugins,659873662,datasette.utils.testing module 754269786,plugins,663145122,Add temporary plugin testing pattern to the testing docs 754269786,plugins,663228985,"datasette.urls.table() / .instance() / .database() methods for constructing URLs, also exposed to templates" 754269786,plugins,670209331,Mechanism for passing additional options to `datasette my.db` that affect plugins 754269786,plugins,671763164,Refactor TableView class so things like datasette-graphql can reuse the logic 754269786,plugins,679700269,Pass columns to extra CSS/JS/etc plugin hooks 754269786,plugins,679779797,extra_ plugin hooks should take the same arguments 754269786,plugins,681375466,await datasette.client.get(path) mechanism for executing internal requests 754269786,plugins,685806511,Private/secret databases: database files that are only visible to plugins 754269786,plugins,687681018,register_output_renderer render function should be able to return a Response 754269786,plugins,687694947,Remove old register_output_renderer dict mechanism in Datasette 1.0 754269786,plugins,687711713,Release updated datasette-atom and datasette-ics 754269786,plugins,688622148,Simplify imports of common classes 754269786,plugins,691537426,Internals API idea: results.dicts in addition to results.rows 754269786,plugins,712260429,JavaScript plugin hooks mechanism similar to pluggy 754269786,plugins,712984738,Documented HTML hooks for JavaScript plugin authors 754269786,plugins,713209404,Mechanism for plugins to construct URLs that respect base_url 754269786,plugins,725099777,datasette.urls.static_plugins(...) method 754269786,plugins,725743755,"datasette.urls.table(..., format=""json"") argument" 754269786,plugins,727802081,Plugin hook for loading templates 754269786,plugins,728600048,"Document that datasette.render_template(template, ...) also accepts a list of templates" 754269786,plugins,729183332,Column action menu overlapped by Leaflet maps 754269786,plugins,729604838,Document recommendations for plugin authors to design URLs 754269786,plugins,732674148,Refactor .csv to be an output renderer - and teach register_output_renderer to stream all rows 754269786,plugins,732798913,Navigation menu plus plugin hook 754269786,plugins,732856937,Nav menu plus menu_links() hook 754269786,plugins,732859030,Table actions menu plus plugin hook 754269786,plugins,733303548,load_template() plugin hook 754269786,plugins,733499930,load_template hook doesn't work for include/extends 754269786,plugins,733560417,Remove load_template plugin hook 754269786,plugins,733829385,database_actions plugin hook 754269786,plugins,741862364,Custom widgets for canned query forms 754269786,plugins,742041667,Make cascading permission checks available to plugins 754269786,plugins,749283032,register_output_renderer() should support streaming data 754269786,plugins,749289611,Plugin testing docs should show datasette.client 754269786,plugins,765637324,JavaScript to help plugins interact with the fragment part of the URL 754269786,plugins,770598024,Efficiently calculate list of databases/tables a user can view 754269786,plugins,775666296,"""datasette insert"" command and plugin hook" 754269786,plugins,777333388,Mechanism for storing metadata in _metadata tables 754269786,plugins,780278550,Make original path available to render hooks 754269786,plugins,780767542,Lazily evaluated arguments for call_with_supported_arguments 754269786,plugins,783714076,request.full_path property 754269786,plugins,785588942,"extra_body_script() support for script type=""module""" 754269786,plugins,787098146,`datasette publish upload` mechanism for uploading databases to an existing Datasette instance 754269786,plugins,787098345,Ability for plugins to collaborate when adding extra HTML to blocks in default templates 754269786,plugins,787173276,Research plugin hook for alternative database backends 754269786,plugins,834602299,Plugin hook that could support 'order by random()' for table view 754269786,plugins,836273891,Documentation for Response.asgi_send(send) method 754269786,plugins,860625833,Make row available to `render_cell` plugin hook 754269786,plugins,903902495,Improve `path_with_replaced_args()` and friends and document them 754269786,plugins,915455228,Menu plugin hooks should include the request 754269786,plugins,915488244,"Add section to ""writing plugins"" about security, e.g. avoiding XSS" 754269786,plugins,920884085,Mechanism for plugins to exclude certain paths from CSRF checks 754269786,plugins,930807135,Plugin hook for dynamic metadata 754269786,plugins,953352015,`register_routes()` hook should take `datasette` argument 754269786,plugins,955316250,utils.parse_metadata() should be a documented internal function 754269786,plugins,963528457,render_cell() hook should support returning an awaitable 754269786,plugins,981676832,`register_commands()` plugin hook to register extra CLI commands 754269786,plugins,1054246919,Review plugin hooks for Datasette 1.0 754269786,plugins,1057996111,Let `register_routes()` over-ride default routes within Datasette 754269786,plugins,1058803238,Pattern for avoiding accidental URL over-rides 754269786,plugins,1066288689,Research pattern for re-registering existing Click tools with register_commands 754269786,plugins,1072106103,feature request: order and dependency of plugins (that use js) 754269786,plugins,1082743068,"filters_from_request plugin hook, now used in TableView" 754269786,plugins,1083657868,Documented JavaScript variables on different templates made available for plugins 754269786,plugins,1100015398,Maybe let plugins define custom serve options? 754269786,plugins,1148638868,Make datasette-redirect-forbidden unneccessary 754269786,plugins,1181364043,Make show_json.html or a similar mechanism stable for plugins 754269786,plugins,1182141761,"Idea: `datasette.set_actor_cookie(response, actor)`" 754269786,plugins,1182227211,[plugins][feature request]: Support additional script tag attributes when loading custom JS 754269786,plugins,1197925865,File PRs against incompatible plugins pinning to datasette<1.0 754269786,plugins,1197926598,How to upgrade your plugin for 1.0 documentation 754269786,plugins,1203943272,Datasette feature for publishing snapshots of query results 754269786,plugins,1215174094,Design plugin hook for extras 754269786,plugins,1216436131,"Implement plugin hooks: `register_table_extras`, `register_row_extras`, `register_query_extras`" 754269786,plugins,1292370469,Document plugins providing new plugin hook- 754269786,plugins,1306492437,`handle_exception` plugin hook for custom error handling 754269786,plugins,1366915240,Plugin ecosystem needs to avoid crashes due to no available databases 754269786,plugins,1368030952,Database() constructor currently defaults is_mutable to False 754269786,plugins,1373595927,`prepare_jinja2_environment()` hook should take `datasette` argument 754269786,plugins,1384273985,Expose `sql` and `params` arguments to various plugin hooks 754269786,plugins,1386854246,Switch to keyword-only arguments for a bunch of internal methods 754269786,plugins,1388631785,render_cell documentation example doesn't match the method signature 754269786,plugins,1396977994,Add documentation for writing tests with signed actor cookies 754269786,plugins,1397193691,__bool__ method on Results 754269786,plugins,1454532488,Document {% block crumbs %} for plugin authors 754269786,plugins,1485757511,register_permissions(datasette) plugin hook 754269786,plugins,1487738738,Option for plugins to request that JSON be served on the page 754269786,plugins,1515815014,render_cell plugin hook's row object is not a sqlite.Row 754269786,plugins,1525815985,Make CustomJSONEncoder a documented public API 754269786,plugins,1529707837,Reconsider pattern where plugins could break existing template context 754269786,plugins,1557507274,`extra_template_vars` should be OK to return `None` 754269786,plugins,1560662739,`render_cell()` hook should take an optional `request` argument 754269786,plugins,1816857442,`datasette install -e` option 754269786,plugins,1822938661,Build HTML version of /content?sql=... 754269786,plugins,1822982933,Figure out what to do about `DatabaseView.name` 754269786,plugins,1840324765,CSV ?sql= should indicate errors 754269786,plugins,1840329615,Render plugin mechanism needs `error` and `truncated` fields 754269786,plugins,1841501975,[feature request]`datasette install plugins.json` options 754269786,plugins,1858228057,Plugin hook for database queries that are run 754269786,plugins,1865869205,"Proposal: Make the `_internal` database persistent, customizable, and hidden" 754269786,plugins,1874255116,Ability to only load a specific list of plugins 754269786,plugins,1874327336,DATASETTE_LOAD_PLUGINS environment variable for loading specific plugins 754269786,plugins,1876353656,Consider a request/response wrapping hook slightly higher level than asgi_wrapper() 754269786,plugins,1886791100,Plugin hook: `actors_from_ids()` 754269786,plugins,1886812002,actors_from_ids plugin hook and datasette.actors_from_ids() method 754269786,plugins,1898927976,Mechanism for register_output_renderer hooks to access full count 754269786,plugins,1900026059,"Plugin Hooks for ""compile to SQL"" languages"