Skip to content

Commit

Permalink
?_facet_size=max, ... now links to that, closes #1337
Browse files Browse the repository at this point in the history
Refs #1332
  • Loading branch information
simonw committed May 27, 2021
1 parent 51d7881 commit 7e983fe
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 13 deletions.
4 changes: 3 additions & 1 deletion datasette/facets.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,9 @@ def get_facet_size(self):
facet_size = self.ds.setting("default_facet_size")
max_returned_rows = self.ds.setting("max_returned_rows")
custom_facet_size = self.request.args.get("_facet_size")
if custom_facet_size and custom_facet_size.isdigit():
if custom_facet_size == "max":
facet_size = max_returned_rows
elif custom_facet_size and custom_facet_size.isdigit():
facet_size = int(custom_facet_size)
return min(facet_size, max_returned_rows)

Expand Down
9 changes: 8 additions & 1 deletion datasette/static/app.css
Original file line number Diff line number Diff line change
Expand Up @@ -645,13 +645,20 @@ form button[type=button] {
.facet-info a.cross:active {
text-decoration: none;
}
ul li.facet-truncated {
list-style-type: none;
position: relative;
top: -0.35em;
text-indent: 0.85em;
}

.advanced-export {
margin-top: 1em;
padding: 0.01em 2em 0.01em 1em;
width: auto;
display: inline-block;
box-shadow: 1px 2px 8px 2px rgba(0,0,0,0.08);
background-color: white;
background-color: white;
}

.download-sqlite em {
Expand Down
4 changes: 3 additions & 1 deletion datasette/templates/table.html
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,9 @@ <h3>{{ extra_wheres_for_ui|length }} extra where clause{% if extra_wheres_for_ui
{% endif %}
{% endfor %}
{% if facet_info.truncated %}
<li>...</li>
<li class="facet-truncated">{% if request.args._facet_size != "max" -%}
<a href="{{ path_with_replaced_args(request, {"_facet_size": "max"}) }}"></a>{% else -%}…{% endif %}
</li>
{% endif %}
</ul>
</div>
Expand Down
20 changes: 10 additions & 10 deletions tests/fixtures.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,16 +129,16 @@ def make_app_client(
files.append(extra_filepath)
os.chdir(os.path.dirname(filepath))
config = config or {}
config.update(
{
"default_page_size": 50,
"max_returned_rows": max_returned_rows or 100,
"sql_time_limit_ms": sql_time_limit_ms or 200,
# Default is 3 but this results in "too many open files"
# errors when running the full test suite:
"num_sql_threads": 1,
}
)
for key, value in {
"default_page_size": 50,
"max_returned_rows": max_returned_rows or 100,
"sql_time_limit_ms": sql_time_limit_ms or 200,
# Default is 3 but this results in "too many open files"
# errors when running the full test suite:
"num_sql_threads": 1,
}.items():
if key not in config:
config[key] = value
ds = Datasette(
files,
immutables=immutables,
Expand Down
62 changes: 62 additions & 0 deletions tests/test_html.py
Original file line number Diff line number Diff line change
Expand Up @@ -1612,3 +1612,65 @@ def test_navigation_menu_links(
assert (
details.find("a", {"href": link}) is None
), f"{link} found but should not have been in nav menu"


@pytest.mark.parametrize(
"max_returned_rows,path,expected_num_facets,expected_ellipses,expected_ellipses_url",
(
(
5,
# Default should show 2 facets
"/fixtures/facetable?_facet=neighborhood",
2,
True,
"/fixtures/facetable?_facet=neighborhood&_facet_size=max",
),
# _facet_size above max_returned_rows should show max_returned_rows (5)
(
5,
"/fixtures/facetable?_facet=neighborhood&_facet_size=50",
5,
True,
"/fixtures/facetable?_facet=neighborhood&_facet_size=max",
),
# If max_returned_rows is high enough, should return all
(
20,
"/fixtures/facetable?_facet=neighborhood&_facet_size=max",
14,
False,
None,
),
# If num facets > max_returned_rows, show ... without a link
# _facet_size above max_returned_rows should show max_returned_rows (5)
(
5,
"/fixtures/facetable?_facet=neighborhood&_facet_size=max",
5,
True,
None,
),
),
)
def test_facet_more_links(
max_returned_rows,
path,
expected_num_facets,
expected_ellipses,
expected_ellipses_url,
):
with make_app_client(
config={"max_returned_rows": max_returned_rows, "default_facet_size": 2}
) as client:
response = client.get(path)
soup = Soup(response.body, "html.parser")
lis = soup.select("#facet-neighborhood ul li:not(.facet-truncated)")
facet_truncated = soup.select_one(".facet-truncated")
assert len(lis) == expected_num_facets
if not expected_ellipses:
assert facet_truncated is None
else:
if expected_ellipses_url:
assert facet_truncated.find("a")["href"] == expected_ellipses_url
else:
assert facet_truncated.find("a") is None

0 comments on commit 7e983fe

Please # to comment.