replace calls to 'os.path.splitext()' with 'str.rpartition()'

Makes functions who used it more than twice as fast
and we can get rid of an import as well.
pull/1431/head
Mike Fährmann 4 years ago
parent 0a9af56e3c
commit 8553b218d9
No known key found for this signature in database
GPG Key ID: 5680CA389D365A88

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright 2015-2019 Mike Fährmann # Copyright 2015-2021 Mike Fährmann
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as # it under the terms of the GNU General Public License version 2 as
@ -10,7 +10,6 @@
import re import re
import html import html
import os.path
import datetime import datetime
import urllib.parse import urllib.parse
@ -77,18 +76,22 @@ def filename_from_url(url):
def ext_from_url(url): def ext_from_url(url):
"""Extract the filename extension of an URL""" """Extract the filename extension of an URL"""
filename = filename_from_url(url) name, _, ext = filename_from_url(url).rpartition(".")
ext = os.path.splitext(filename)[1] return ext.lower() if name else ""
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 = {}
name = unquote(filename_from_url(url))
data["filename"], ext = os.path.splitext(name) filename = unquote(filename_from_url(url))
data["extension"] = ext[1:].lower() name, _, ext = filename.rpartition(".")
if name:
data["filename"], data["extension"] = name, ext.lower()
else:
data["filename"], data["extension"] = filename, ""
return data return data

@ -1,7 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright 2015-2020 Mike Fährmann # Copyright 2015-2021 Mike Fährmann
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as # it under the terms of the GNU General Public License version 2 as
@ -142,8 +142,9 @@ class TestText(unittest.TestCase):
# standard usage # standard usage
self.assertEqual(f(""), "") self.assertEqual(f(""), "")
self.assertEqual(f("filename"), "")
self.assertEqual(f("filename.ext"), result) self.assertEqual(f("filename.ext"), result)
self.assertEqual(f("/filename.ext"), result) self.assertEqual(f("/filename.ExT"), result)
self.assertEqual(f("example.org/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"), result)
self.assertEqual( self.assertEqual(
@ -160,7 +161,7 @@ class TestText(unittest.TestCase):
# standard usage # standard usage
self.assertEqual(f(""), empty) self.assertEqual(f(""), empty)
self.assertEqual(f("filename.ext"), result) self.assertEqual(f("filename.ext"), result)
self.assertEqual(f("/filename.ext"), result) self.assertEqual(f("/filename.ExT"), result)
self.assertEqual(f("example.org/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"), result)
self.assertEqual( self.assertEqual(

Loading…
Cancel
Save