summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2021-01-04 19:18:19 +0100
committerFlorian Bruhin <me@the-compiler.org>2021-01-04 19:49:03 +0100
commite513745e205423df2255e35768b0ece7d1d74b36 (patch)
tree8e365acb9362c6be9b8cd68b6c05d37884624981
parent1a5b95a745b0317923894d5a7383c5f2fec2fd4b (diff)
downloadqutebrowser-e513745e205423df2255e35768b0ece7d1d74b36.tar.gz
qutebrowser-e513745e205423df2255e35768b0ece7d1d74b36.zip
urlutils: Add fallback to filename_from_url
This makes the callers a bit simpler because they don't need to take care of falling back themselves.
-rw-r--r--qutebrowser/utils/urlutils.py8
-rw-r--r--tests/unit/utils/test_urlutils.py5
2 files changed, 10 insertions, 3 deletions
diff --git a/qutebrowser/utils/urlutils.py b/qutebrowser/utils/urlutils.py
index 3f1fb021c..24285404a 100644
--- a/qutebrowser/utils/urlutils.py
+++ b/qutebrowser/utils/urlutils.py
@@ -439,24 +439,26 @@ def parse_data_url(url: QUrl) -> Tuple[str, str, bytes]:
return media_type, params, data
-def filename_from_url(url: QUrl) -> Optional[str]:
+def filename_from_url(url: QUrl, fallback: str = None) -> Optional[str]:
"""Get a suitable filename from a URL.
Args:
url: The URL to parse, as a QUrl.
+ fallback: Value to use if no name can be determined.
Return:
The suggested filename as a string, or None.
"""
if not url.isValid():
- return None
+ return fallback
+
pathname = posixpath.basename(url.path())
if pathname:
return pathname
elif url.host():
return url.host() + '.html'
else:
- return None
+ return fallback
HostTupleType = Tuple[str, str, int]
diff --git a/tests/unit/utils/test_urlutils.py b/tests/unit/utils/test_urlutils.py
index c2ff0042f..54d195d1a 100644
--- a/tests/unit/utils/test_urlutils.py
+++ b/tests/unit/utils/test_urlutils.py
@@ -656,6 +656,11 @@ def test_filename_from_url(qurl, output):
assert urlutils.filename_from_url(qurl) == output
+@pytest.mark.parametrize('qurl', [QUrl(), QUrl('qute://')])
+def test_filename_from_url_fallback(qurl):
+ assert urlutils.filename_from_url(qurl, fallback='fallback') == 'fallback'
+
+
@pytest.mark.parametrize('qurl, expected', [
(QUrl('ftp://example.com/'), ('ftp', 'example.com', 21)),
(QUrl('ftp://example.com:2121/'), ('ftp', 'example.com', 2121)),