allow_facet, allow_download, suggest_facets boolean --config

Refs #284
This commit is contained in:
Simon Willison 2018-05-24 18:12:27 -07:00
commit 50920cfe3d
No known key found for this signature in database
GPG key ID: 17E2DEA2588B7F52
9 changed files with 177 additions and 55 deletions

View file

@ -9,7 +9,7 @@ import tempfile
import time
def app_client(sql_time_limit_ms=None, max_returned_rows=None):
def app_client(sql_time_limit_ms=None, max_returned_rows=None, config=None):
with tempfile.TemporaryDirectory() as tmpdir:
filepath = os.path.join(tmpdir, 'test_tables.db')
conn = sqlite3.connect(filepath)
@ -18,15 +18,17 @@ def app_client(sql_time_limit_ms=None, max_returned_rows=None):
plugins_dir = os.path.join(tmpdir, 'plugins')
os.mkdir(plugins_dir)
open(os.path.join(plugins_dir, 'my_plugin.py'), 'w').write(PLUGIN)
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,
})
ds = Datasette(
[filepath],
metadata=METADATA,
plugins_dir=plugins_dir,
config={
'default_page_size': 50,
'max_returned_rows': max_returned_rows or 100,
'sql_time_limit_ms': sql_time_limit_ms or 200,
}
config=config,
)
ds.sqlite_functions.append(
('sleep', 1, lambda n: time.sleep(float(n))),

View file

@ -914,6 +914,9 @@ def test_config_json(app_client):
"facet_time_limit_ms": 200,
"max_returned_rows": 100,
"sql_time_limit_ms": 200,
"allow_download": True,
"allow_facet": True,
"suggest_facets": True
} == response.json
@ -1080,3 +1083,36 @@ def test_facets(app_client, path, expected_facet_results):
for facet_value in facet_info["results"]:
facet_value['toggle_url'] = facet_value['toggle_url'].split('?')[1]
assert expected_facet_results == facet_results
def test_suggested_facets(app_client):
assert len(app_client.get(
"/test_tables/facetable.json",
gather_request=False
).json["suggested_facets"]) > 0
def test_allow_facet_off():
for client in app_client(config={
'allow_facet': False,
}):
assert 400 == client.get(
"/test_tables/facetable.json?_facet=planet_int",
gather_request=False
).status
# Should not suggest any facets either:
assert [] == client.get(
"/test_tables/facetable.json",
gather_request=False
).json["suggested_facets"]
def test_suggest_facets_off():
for client in app_client(config={
'suggest_facets': False,
}):
# Now suggested_facets should be []
assert [] == client.get(
"/test_tables/facetable.json",
gather_request=False
).json["suggested_facets"]

View file

@ -468,6 +468,33 @@ def test_table_metadata(app_client):
assert_footer_links(soup)
def test_allow_download_on(app_client):
response = app_client.get(
"/test_tables",
gather_request=False
)
soup = Soup(response.body, 'html.parser')
assert len(soup.findAll('a', {'href': re.compile('\.db$')}))
def test_allow_download_off():
for client in app_client(config={
'allow_download': False,
}):
response = client.get(
"/test_tables",
gather_request=False
)
soup = Soup(response.body, 'html.parser')
assert not len(soup.findAll('a', {'href': re.compile('\.db$')}))
# Accessing URL directly should 403
response = client.get(
"/test_tables.db",
gather_request=False
)
assert 403 == response.status
def assert_querystring_equal(expected, actual):
assert sorted(expected.split('&')) == sorted(actual.split('&'))