Auto-link column values that look like URLs

Refs #153
sanic-07
Simon Willison 2017-11-29 09:05:24 -08:00
rodzic 0120c24927
commit b67890d15d
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: FBB38AFE227189DB
3 zmienionych plików z 30 dodań i 0 usunięć

Wyświetl plik

@ -25,6 +25,7 @@ from .utils import (
escape_sqlite_table_name,
filters_should_redirect,
get_all_foreign_keys,
is_url,
InvalidSql,
path_from_row_pks,
path_with_added_args,
@ -443,6 +444,10 @@ class RowTableShared(BaseView):
)
elif value is None:
display_value = jinja2.Markup(' ')
elif is_url(str(value).strip()):
display_value = jinja2.Markup(
'<a href="{url}">{url}</a>'.format(url=value.strip())
)
else:
display_value = str(value)
cells.append({

Wyświetl plik

@ -441,3 +441,18 @@ def filters_should_redirect(special_args):
('_filter_value_{}'.format(number), None),
])
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

Wyświetl plik

@ -151,3 +151,13 @@ def test_detect_fts():
assert None is utils.detect_fts(conn, 'Dumb_Table')
assert None is utils.detect_fts(conn, 'Test_View')
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)