mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
parent
0120c24927
commit
b67890d15d
3 changed files with 30 additions and 0 deletions
|
|
@ -25,6 +25,7 @@ from .utils import (
|
||||||
escape_sqlite_table_name,
|
escape_sqlite_table_name,
|
||||||
filters_should_redirect,
|
filters_should_redirect,
|
||||||
get_all_foreign_keys,
|
get_all_foreign_keys,
|
||||||
|
is_url,
|
||||||
InvalidSql,
|
InvalidSql,
|
||||||
path_from_row_pks,
|
path_from_row_pks,
|
||||||
path_with_added_args,
|
path_with_added_args,
|
||||||
|
|
@ -443,6 +444,10 @@ class RowTableShared(BaseView):
|
||||||
)
|
)
|
||||||
elif value is None:
|
elif value is None:
|
||||||
display_value = jinja2.Markup(' ')
|
display_value = jinja2.Markup(' ')
|
||||||
|
elif is_url(str(value).strip()):
|
||||||
|
display_value = jinja2.Markup(
|
||||||
|
'<a href="{url}">{url}</a>'.format(url=value.strip())
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
display_value = str(value)
|
display_value = str(value)
|
||||||
cells.append({
|
cells.append({
|
||||||
|
|
|
||||||
|
|
@ -441,3 +441,18 @@ def filters_should_redirect(special_args):
|
||||||
('_filter_value_{}'.format(number), None),
|
('_filter_value_{}'.format(number), None),
|
||||||
])
|
])
|
||||||
return redirect_params
|
return redirect_params
|
||||||
|
|
||||||
|
|
||||||
|
whitespace_re = re.compile(r'\s')
|
||||||
|
|
||||||
|
|
||||||
|
def is_url(value):
|
||||||
|
"Must start with http:// or https:// and contain JUST a URL"
|
||||||
|
if not isinstance(value, str):
|
||||||
|
return False
|
||||||
|
if not value.startswith('http://') and not value.startswith('https://'):
|
||||||
|
return False
|
||||||
|
# Any whitespace at all is invalid
|
||||||
|
if whitespace_re.search(value):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
|
||||||
|
|
@ -151,3 +151,13 @@ def test_detect_fts():
|
||||||
assert None is utils.detect_fts(conn, 'Dumb_Table')
|
assert None is utils.detect_fts(conn, 'Dumb_Table')
|
||||||
assert None is utils.detect_fts(conn, 'Test_View')
|
assert None is utils.detect_fts(conn, 'Test_View')
|
||||||
assert 'Street_Tree_List_fts' == utils.detect_fts(conn, 'Street_Tree_List')
|
assert 'Street_Tree_List_fts' == utils.detect_fts(conn, 'Street_Tree_List')
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('url,expected', [
|
||||||
|
('http://www.google.com/', True),
|
||||||
|
('https://example.com/', True),
|
||||||
|
('www.google.com', False),
|
||||||
|
('http://www.google.com/ is a search engine', False),
|
||||||
|
])
|
||||||
|
def test_is_url(url, expected):
|
||||||
|
assert expected == utils.is_url(url)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue