Skip to content

Datasette 0.19: plugins preview

Compare
Choose a tag to compare
@simonw simonw released this 17 Apr 02:21
· 2347 commits to main since this release

This is the first preview of the new Datasette plugins mechanism. Only two plugin hooks are available so far - for custom SQL functions and custom template filters. There's plenty more to come - read the documentation and get involved in the tracking ticket if you have feedback on the direction so far.

  • Fix for _sort_desc=sortable_with_nulls test, refs #216

  • Fixed #216 - paginate correctly when sorting by nullable column

  • Initial documentation for plugins, closes #213

    https://datasette.readthedocs.io/en/latest/plugins.html

  • New --plugins-dir=plugins/ option (#212)

    New option causing Datasette to load and evaluate all of the Python files in the specified directory and register any plugins that are defined in those files.

    This new option is available for the following commands:

    datasette serve mydb.db --plugins-dir=plugins/
    datasette publish now/heroku mydb.db --plugins-dir=plugins/
    datasette package mydb.db --plugins-dir=plugins/
    
  • Start of the plugin system, based on pluggy (#210)

    Uses https://pluggy.readthedocs.io/ originally created for the py.test project

    We're starting with two plugin hooks:

    prepare_connection(conn)

    This is called when a new SQLite connection is created. It can be used to register custom SQL functions.

    prepare_jinja2_environment(env)

    This is called with the Jinja2 environment. It can be used to register custom template tags and filters.

    An example plugin which uses these two hooks can be found at https://github.com/simonw/datasette-plugin-demos or installed using pip install datasette-plugin-demos

    Refs #14

  • Return HTTP 405 on InvalidUsage rather than 500. [Russ Garrett]

    This also stops it filling up the logs. This happens for HEAD requests at the moment - which perhaps should be handled better, but that's a different issue.