add 'ext_from_url' to text.py
This commit is contained in:
@@ -55,15 +55,22 @@ def split_html(txt, sep=None):
|
|||||||
|
|
||||||
|
|
||||||
def filename_from_url(url):
|
def filename_from_url(url):
|
||||||
"""Extract the last part of an url to use as a filename"""
|
"""Extract the last part of an URL to use as a filename"""
|
||||||
try:
|
try:
|
||||||
return urllib.parse.urlsplit(url).path.rpartition("/")[2]
|
return urllib.parse.urlsplit(url).path.rpartition("/")[2]
|
||||||
except (TypeError, AttributeError):
|
except (TypeError, AttributeError):
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
def ext_from_url(url):
|
||||||
|
"""Extract the filename extension of an URL"""
|
||||||
|
filename = filename_from_url(url)
|
||||||
|
ext = os.path.splitext(filename)[1]
|
||||||
|
return ext[1:].lower()
|
||||||
|
|
||||||
|
|
||||||
def nameext_from_url(url, data=None):
|
def nameext_from_url(url, data=None):
|
||||||
"""Extract the last part of an url and fill 'data' accordingly"""
|
"""Extract the last part of an URL and fill 'data' accordingly"""
|
||||||
if data is None:
|
if data is None:
|
||||||
data = {}
|
data = {}
|
||||||
data["filename"] = unquote(filename_from_url(url))
|
data["filename"] = unquote(filename_from_url(url))
|
||||||
|
|||||||
@@ -105,6 +105,22 @@ class TestText(unittest.TestCase):
|
|||||||
for value in INVALID:
|
for value in INVALID:
|
||||||
self.assertEqual(f(value), "")
|
self.assertEqual(f(value), "")
|
||||||
|
|
||||||
|
def test_ext_from_url(self, f=text.ext_from_url):
|
||||||
|
result = "ext"
|
||||||
|
|
||||||
|
# standard usage
|
||||||
|
self.assertEqual(f(""), "")
|
||||||
|
self.assertEqual(f("filename.ext"), result)
|
||||||
|
self.assertEqual(f("/filename.ext"), result)
|
||||||
|
self.assertEqual(f("example.org/filename.ext"), result)
|
||||||
|
self.assertEqual(f("http://example.org/v2/filename.ext"), result)
|
||||||
|
self.assertEqual(
|
||||||
|
f("http://example.org/v2/filename.ext?param=value#frag"), result)
|
||||||
|
|
||||||
|
# invalid arguments
|
||||||
|
for value in INVALID:
|
||||||
|
self.assertEqual(f(value), "")
|
||||||
|
|
||||||
def test_nameext_from_url(self, f=text.nameext_from_url):
|
def test_nameext_from_url(self, f=text.nameext_from_url):
|
||||||
empty = {"filename": "", "name": "", "extension": ""}
|
empty = {"filename": "", "name": "", "extension": ""}
|
||||||
result = {"filename": "filename.ext",
|
result = {"filename": "filename.ext",
|
||||||
|
|||||||
Reference in New Issue
Block a user