mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
parent
992496f261
commit
95d0dd7a1c
4 changed files with 67 additions and 52 deletions
|
|
@ -193,7 +193,7 @@ class ColumnFacet(Facet):
|
||||||
return suggested_facets
|
return suggested_facets
|
||||||
|
|
||||||
async def facet_results(self):
|
async def facet_results(self):
|
||||||
facet_results = {}
|
facet_results = []
|
||||||
facets_timed_out = []
|
facets_timed_out = []
|
||||||
|
|
||||||
qs_pairs = self.get_querystring_pairs()
|
qs_pairs = self.get_querystring_pairs()
|
||||||
|
|
@ -221,16 +221,18 @@ class ColumnFacet(Facet):
|
||||||
custom_time_limit=self.ds.setting("facet_time_limit_ms"),
|
custom_time_limit=self.ds.setting("facet_time_limit_ms"),
|
||||||
)
|
)
|
||||||
facet_results_values = []
|
facet_results_values = []
|
||||||
facet_results[column] = {
|
facet_results.append(
|
||||||
"name": column,
|
{
|
||||||
"type": self.type,
|
"name": column,
|
||||||
"hideable": source != "metadata",
|
"type": self.type,
|
||||||
"toggle_url": self.ds.urls.path(
|
"hideable": source != "metadata",
|
||||||
path_with_removed_args(self.request, {"_facet": column})
|
"toggle_url": self.ds.urls.path(
|
||||||
),
|
path_with_removed_args(self.request, {"_facet": column})
|
||||||
"results": facet_results_values,
|
),
|
||||||
"truncated": len(facet_rows_results) > facet_size,
|
"results": facet_results_values,
|
||||||
}
|
"truncated": len(facet_rows_results) > facet_size,
|
||||||
|
}
|
||||||
|
)
|
||||||
facet_rows = facet_rows_results.rows[:facet_size]
|
facet_rows = facet_rows_results.rows[:facet_size]
|
||||||
if self.table:
|
if self.table:
|
||||||
# Attempt to expand foreign keys into labels
|
# Attempt to expand foreign keys into labels
|
||||||
|
|
@ -352,7 +354,7 @@ class ArrayFacet(Facet):
|
||||||
|
|
||||||
async def facet_results(self):
|
async def facet_results(self):
|
||||||
# self.configs should be a plain list of columns
|
# self.configs should be a plain list of columns
|
||||||
facet_results = {}
|
facet_results = []
|
||||||
facets_timed_out = []
|
facets_timed_out = []
|
||||||
|
|
||||||
facet_size = self.get_facet_size()
|
facet_size = self.get_facet_size()
|
||||||
|
|
@ -392,16 +394,20 @@ class ArrayFacet(Facet):
|
||||||
custom_time_limit=self.ds.setting("facet_time_limit_ms"),
|
custom_time_limit=self.ds.setting("facet_time_limit_ms"),
|
||||||
)
|
)
|
||||||
facet_results_values = []
|
facet_results_values = []
|
||||||
facet_results[column] = {
|
facet_results.append(
|
||||||
"name": column,
|
{
|
||||||
"type": self.type,
|
"name": column,
|
||||||
"results": facet_results_values,
|
"type": self.type,
|
||||||
"hideable": source != "metadata",
|
"results": facet_results_values,
|
||||||
"toggle_url": self.ds.urls.path(
|
"hideable": source != "metadata",
|
||||||
path_with_removed_args(self.request, {"_facet_array": column})
|
"toggle_url": self.ds.urls.path(
|
||||||
),
|
path_with_removed_args(
|
||||||
"truncated": len(facet_rows_results) > facet_size,
|
self.request, {"_facet_array": column}
|
||||||
}
|
)
|
||||||
|
),
|
||||||
|
"truncated": len(facet_rows_results) > facet_size,
|
||||||
|
}
|
||||||
|
)
|
||||||
facet_rows = facet_rows_results.rows[:facet_size]
|
facet_rows = facet_rows_results.rows[:facet_size]
|
||||||
pairs = self.get_querystring_pairs()
|
pairs = self.get_querystring_pairs()
|
||||||
for row in facet_rows:
|
for row in facet_rows:
|
||||||
|
|
@ -480,7 +486,7 @@ class DateFacet(Facet):
|
||||||
return suggested_facets
|
return suggested_facets
|
||||||
|
|
||||||
async def facet_results(self):
|
async def facet_results(self):
|
||||||
facet_results = {}
|
facet_results = []
|
||||||
facets_timed_out = []
|
facets_timed_out = []
|
||||||
args = dict(self.get_querystring_pairs())
|
args = dict(self.get_querystring_pairs())
|
||||||
facet_size = self.get_facet_size()
|
facet_size = self.get_facet_size()
|
||||||
|
|
@ -507,16 +513,18 @@ class DateFacet(Facet):
|
||||||
custom_time_limit=self.ds.setting("facet_time_limit_ms"),
|
custom_time_limit=self.ds.setting("facet_time_limit_ms"),
|
||||||
)
|
)
|
||||||
facet_results_values = []
|
facet_results_values = []
|
||||||
facet_results[column] = {
|
facet_results.append(
|
||||||
"name": column,
|
{
|
||||||
"type": self.type,
|
"name": column,
|
||||||
"results": facet_results_values,
|
"type": self.type,
|
||||||
"hideable": source != "metadata",
|
"results": facet_results_values,
|
||||||
"toggle_url": path_with_removed_args(
|
"hideable": source != "metadata",
|
||||||
self.request, {"_facet_date": column}
|
"toggle_url": path_with_removed_args(
|
||||||
),
|
self.request, {"_facet_date": column}
|
||||||
"truncated": len(facet_rows_results) > facet_size,
|
),
|
||||||
}
|
"truncated": len(facet_rows_results) > facet_size,
|
||||||
|
}
|
||||||
|
)
|
||||||
facet_rows = facet_rows_results.rows[:facet_size]
|
facet_rows = facet_rows_results.rows[:facet_size]
|
||||||
for row in facet_rows:
|
for row in facet_rows:
|
||||||
selected = str(args.get(f"{column}__date")) == str(row["value"])
|
selected = str(args.get(f"{column}__date")) == str(row["value"])
|
||||||
|
|
|
||||||
|
|
@ -754,7 +754,14 @@ class TableView(RowTableShared):
|
||||||
instance_facet_results,
|
instance_facet_results,
|
||||||
instance_facets_timed_out,
|
instance_facets_timed_out,
|
||||||
) = await facet.facet_results()
|
) = await facet.facet_results()
|
||||||
facet_results.update(instance_facet_results)
|
for facet_info in instance_facet_results:
|
||||||
|
base_key = facet_info["name"]
|
||||||
|
key = base_key
|
||||||
|
i = 1
|
||||||
|
while key in facet_results:
|
||||||
|
i += 1
|
||||||
|
key = f"{base_key}_{i}"
|
||||||
|
facet_results[key] = facet_info
|
||||||
facets_timed_out.extend(instance_facets_timed_out)
|
facets_timed_out.extend(instance_facets_timed_out)
|
||||||
|
|
||||||
# Figure out columns and rows for the query
|
# Figure out columns and rows for the query
|
||||||
|
|
|
||||||
|
|
@ -668,7 +668,7 @@ Each Facet subclass implements a new type of facet operation. The class should l
|
||||||
async def facet_results(self):
|
async def facet_results(self):
|
||||||
# This should execute the facet operation and return results, again
|
# This should execute the facet operation and return results, again
|
||||||
# using self.sql and self.params as the starting point
|
# using self.sql and self.params as the starting point
|
||||||
facet_results = {}
|
facet_results = []
|
||||||
facets_timed_out = []
|
facets_timed_out = []
|
||||||
facet_size = self.get_facet_size()
|
facet_size = self.get_facet_size()
|
||||||
# Do some calculations here...
|
# Do some calculations here...
|
||||||
|
|
@ -683,11 +683,11 @@ Each Facet subclass implements a new type of facet operation. The class should l
|
||||||
"toggle_url": self.ds.absolute_url(self.request, toggle_path),
|
"toggle_url": self.ds.absolute_url(self.request, toggle_path),
|
||||||
"selected": selected,
|
"selected": selected,
|
||||||
})
|
})
|
||||||
facet_results[column] = {
|
facet_results.append({
|
||||||
"name": column,
|
"name": column,
|
||||||
"results": facet_results_values,
|
"results": facet_results_values,
|
||||||
"truncated": len(facet_rows_results) > facet_size,
|
"truncated": len(facet_rows_results) > facet_size,
|
||||||
}
|
})
|
||||||
except QueryInterrupted:
|
except QueryInterrupted:
|
||||||
facets_timed_out.append(column)
|
facets_timed_out.append(column)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -107,8 +107,8 @@ async def test_column_facet_results(app_client):
|
||||||
)
|
)
|
||||||
buckets, timed_out = await facet.facet_results()
|
buckets, timed_out = await facet.facet_results()
|
||||||
assert [] == timed_out
|
assert [] == timed_out
|
||||||
assert {
|
assert [
|
||||||
"_city_id": {
|
{
|
||||||
"name": "_city_id",
|
"name": "_city_id",
|
||||||
"type": "column",
|
"type": "column",
|
||||||
"hideable": True,
|
"hideable": True,
|
||||||
|
|
@ -145,7 +145,7 @@ async def test_column_facet_results(app_client):
|
||||||
],
|
],
|
||||||
"truncated": False,
|
"truncated": False,
|
||||||
}
|
}
|
||||||
} == buckets
|
] == buckets
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
|
|
@ -159,8 +159,8 @@ async def test_column_facet_results_column_starts_with_underscore(app_client):
|
||||||
)
|
)
|
||||||
buckets, timed_out = await facet.facet_results()
|
buckets, timed_out = await facet.facet_results()
|
||||||
assert [] == timed_out
|
assert [] == timed_out
|
||||||
assert buckets == {
|
assert buckets == [
|
||||||
"_neighborhood": {
|
{
|
||||||
"name": "_neighborhood",
|
"name": "_neighborhood",
|
||||||
"type": "column",
|
"type": "column",
|
||||||
"hideable": True,
|
"hideable": True,
|
||||||
|
|
@ -267,7 +267,7 @@ async def test_column_facet_results_column_starts_with_underscore(app_client):
|
||||||
],
|
],
|
||||||
"truncated": False,
|
"truncated": False,
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
|
|
@ -282,8 +282,8 @@ async def test_column_facet_from_metadata_cannot_be_hidden(app_client):
|
||||||
)
|
)
|
||||||
buckets, timed_out = await facet.facet_results()
|
buckets, timed_out = await facet.facet_results()
|
||||||
assert [] == timed_out
|
assert [] == timed_out
|
||||||
assert {
|
assert [
|
||||||
"_city_id": {
|
{
|
||||||
"name": "_city_id",
|
"name": "_city_id",
|
||||||
"type": "column",
|
"type": "column",
|
||||||
"hideable": False,
|
"hideable": False,
|
||||||
|
|
@ -320,7 +320,7 @@ async def test_column_facet_from_metadata_cannot_be_hidden(app_client):
|
||||||
],
|
],
|
||||||
"truncated": False,
|
"truncated": False,
|
||||||
}
|
}
|
||||||
} == buckets
|
] == buckets
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
|
|
@ -369,8 +369,8 @@ async def test_array_facet_results(app_client):
|
||||||
)
|
)
|
||||||
buckets, timed_out = await facet.facet_results()
|
buckets, timed_out = await facet.facet_results()
|
||||||
assert [] == timed_out
|
assert [] == timed_out
|
||||||
assert {
|
assert [
|
||||||
"tags": {
|
{
|
||||||
"name": "tags",
|
"name": "tags",
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"results": [
|
"results": [
|
||||||
|
|
@ -400,7 +400,7 @@ async def test_array_facet_results(app_client):
|
||||||
"toggle_url": "/",
|
"toggle_url": "/",
|
||||||
"truncated": False,
|
"truncated": False,
|
||||||
}
|
}
|
||||||
} == buckets
|
] == buckets
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
|
|
@ -471,8 +471,8 @@ async def test_date_facet_results(app_client):
|
||||||
)
|
)
|
||||||
buckets, timed_out = await facet.facet_results()
|
buckets, timed_out = await facet.facet_results()
|
||||||
assert [] == timed_out
|
assert [] == timed_out
|
||||||
assert {
|
assert [
|
||||||
"created": {
|
{
|
||||||
"name": "created",
|
"name": "created",
|
||||||
"type": "date",
|
"type": "date",
|
||||||
"results": [
|
"results": [
|
||||||
|
|
@ -509,7 +509,7 @@ async def test_date_facet_results(app_client):
|
||||||
"toggle_url": "/",
|
"toggle_url": "/",
|
||||||
"truncated": False,
|
"truncated": False,
|
||||||
}
|
}
|
||||||
} == buckets
|
] == buckets
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue