diff --git a/datasette/app.py b/datasette/app.py index bd398234..bdaf3d4b 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -1186,6 +1186,11 @@ class Datasette: } return self._inspect + def register_custom_units(self): + "Register any custom units defined in the metadata.json with Pint" + for unit in self.metadata.get('custom_units', []): + ureg.define(unit) + def app(self): app = Sanic(__name__) default_templates = str(app_root / 'datasette' / 'templates') @@ -1230,6 +1235,8 @@ class Datasette: '///' ) + self.register_custom_units() + @app.exception(Exception) def on_exception(request, exception): title = None diff --git a/docs/metadata.rst b/docs/metadata.rst index 0f94311c..837359df 100644 --- a/docs/metadata.rst +++ b/docs/metadata.rst @@ -79,7 +79,14 @@ Column units are configured in the metadata like so:: } Units are interpreted using Pint_, and you can see the full list of available units in -Pint's `unit registry`_. +Pint's `unit registry`_. You can also add custom units to the metadata, which will be +registered with Pint:: + + { + "custom_units": [ + "decibel = [] = dB" + ] + } .. _Pint: https://pint.readthedocs.io/ .. _unit registry: https://github.com/hgrecco/pint/blob/master/pint/default_en.txt