mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
Removed units functionality and Pint dependency
Closes #2400, unblocks #2320
This commit is contained in:
parent
d444b6aad5
commit
39dfc7d7d7
14 changed files with 14 additions and 182 deletions
|
|
@ -37,7 +37,6 @@ from jinja2.exceptions import TemplateNotFound
|
|||
|
||||
from .events import Event
|
||||
from .views import Context
|
||||
from .views.base import ureg
|
||||
from .views.database import database_download, DatabaseView, TableCreateView, QueryView
|
||||
from .views.index import IndexView
|
||||
from .views.special import (
|
||||
|
|
|
|||
|
|
@ -368,12 +368,8 @@ class Filters:
|
|||
)
|
||||
_filters_by_key = {f.key: f for f in _filters}
|
||||
|
||||
def __init__(self, pairs, units=None, ureg=None):
|
||||
if units is None:
|
||||
units = {}
|
||||
def __init__(self, pairs):
|
||||
self.pairs = pairs
|
||||
self.units = units
|
||||
self.ureg = ureg
|
||||
|
||||
def lookups(self):
|
||||
"""Yields (lookup, display, no_argument) pairs"""
|
||||
|
|
@ -413,20 +409,6 @@ class Filters:
|
|||
def has_selections(self):
|
||||
return bool(self.pairs)
|
||||
|
||||
def convert_unit(self, column, value):
|
||||
"""If the user has provided a unit in the query, convert it into the column unit, if present."""
|
||||
if column not in self.units:
|
||||
return value
|
||||
|
||||
# Try to interpret the value as a unit
|
||||
value = self.ureg(value)
|
||||
if isinstance(value, numbers.Number):
|
||||
# It's just a bare number, assume it's the column unit
|
||||
return value
|
||||
|
||||
column_unit = self.ureg(self.units[column])
|
||||
return value.to(column_unit).magnitude
|
||||
|
||||
def build_where_clauses(self, table):
|
||||
sql_bits = []
|
||||
params = {}
|
||||
|
|
@ -434,9 +416,7 @@ class Filters:
|
|||
for column, lookup, value in self.selections():
|
||||
filter = self._filters_by_key.get(lookup, None)
|
||||
if filter:
|
||||
sql_bit, param = filter.where_clause(
|
||||
table, column, self.convert_unit(column, value), i
|
||||
)
|
||||
sql_bit, param = filter.where_clause(table, column, value, i)
|
||||
sql_bits.append(sql_bit)
|
||||
if param is not None:
|
||||
if not isinstance(param, list):
|
||||
|
|
|
|||
|
|
@ -1368,7 +1368,6 @@ _table_config_keys = (
|
|||
"fts_table",
|
||||
"fts_pk",
|
||||
"searchmode",
|
||||
"units",
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -8,8 +8,6 @@ import urllib
|
|||
from markupsafe import escape
|
||||
|
||||
|
||||
import pint
|
||||
|
||||
from datasette.database import QueryInterrupted
|
||||
from datasette.utils.asgi import Request
|
||||
from datasette.utils import (
|
||||
|
|
@ -32,8 +30,6 @@ from datasette.utils.asgi import (
|
|||
BadRequest,
|
||||
)
|
||||
|
||||
ureg = pint.UnitRegistry()
|
||||
|
||||
|
||||
class DatasetteError(Exception):
|
||||
def __init__(
|
||||
|
|
|
|||
|
|
@ -103,7 +103,6 @@ class RowView(DataView):
|
|||
"columns": columns,
|
||||
"primary_keys": resolved.pks,
|
||||
"primary_key_values": pk_values,
|
||||
"units": (await self.ds.table_config(database, table)).get("units", {}),
|
||||
}
|
||||
|
||||
if "foreign_key_tables" in (request.args.get("_extras") or "").split(","):
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ from datasette.utils import (
|
|||
from datasette.utils.asgi import BadRequest, Forbidden, NotFound, Response
|
||||
from datasette.filters import Filters
|
||||
import sqlite_utils
|
||||
from .base import BaseView, DatasetteError, ureg, _error, stream_csv
|
||||
from .base import BaseView, DatasetteError, _error, stream_csv
|
||||
from .database import QueryView
|
||||
|
||||
LINK_WITH_LABEL = (
|
||||
|
|
@ -292,14 +292,6 @@ async def display_columns_and_rows(
|
|||
),
|
||||
)
|
||||
)
|
||||
elif column in table_config.get("units", {}) and value != "":
|
||||
# Interpret units using pint
|
||||
value = value * ureg(table_config["units"][column])
|
||||
# Pint uses floating point which sometimes introduces errors in the compact
|
||||
# representation, which we have to round off to avoid ugliness. In the vast
|
||||
# majority of cases this rounding will be inconsequential. I hope.
|
||||
value = round(value.to_compact(), 6)
|
||||
display_value = markupsafe.Markup(f"{value:~P}".replace(" ", " "))
|
||||
else:
|
||||
display_value = str(value)
|
||||
if truncate_cells and len(display_value) > truncate_cells:
|
||||
|
|
@ -1017,7 +1009,6 @@ async def table_view_data(
|
|||
nofacet = True
|
||||
|
||||
table_metadata = await datasette.table_config(database_name, table_name)
|
||||
units = table_metadata.get("units", {})
|
||||
|
||||
# Arguments that start with _ and don't contain a __ are
|
||||
# special - things like ?_search= - and should not be
|
||||
|
|
@ -1029,7 +1020,7 @@ async def table_view_data(
|
|||
filter_args.append((key, v))
|
||||
|
||||
# Build where clauses from query string arguments
|
||||
filters = Filters(sorted(filter_args), units, ureg)
|
||||
filters = Filters(sorted(filter_args))
|
||||
where_clauses, params = filters.build_where_clauses(table_name)
|
||||
|
||||
# Execute filters_from_request plugin hooks - including the default
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue