Make the file name safe function less restrictive

This commit is contained in:
Veronica Berglyd Olsen
2024-06-11 21:38:50 +02:00
parent 6d54902a08
commit 556caea308
2 changed files with 34 additions and 8 deletions
+2 -3
View File
@@ -523,12 +523,11 @@ def readTextFile(path: str | Path) -> str:
def makeFileNameSafe(text: str) -> str:
"""Return a filename safe string.
"""Return a filename-safe string.
See: https://unicode.org/reports/tr15/#Norm_Forms
"""
text = unicodedata.normalize("NFKC", text).strip()
allowed = (" ", ".", "-", "_")
return "".join(c for c in text if c.isalnum() or c in allowed)
return "".join(c for c in text if c.isprintable() and c not in r'\/:*?"<>|')
def getFileSize(path: Path) -> int:
+32 -5
View File
@@ -621,13 +621,40 @@ def testBaseCommon_readTextFile(monkeypatch, fncPath, ipsumText):
@pytest.mark.base
def testBaseCommon_makeFileNameSafe():
"""Test the makeFileNameSafe function."""
assert makeFileNameSafe(" aaaa ") == "aaaa"
assert makeFileNameSafe("aaaa,bbbb") == "aaaabbbb"
assert makeFileNameSafe("aaaa\tbbbb") == "aaaabbbb"
assert makeFileNameSafe("aaaa bbbb") == "aaaa bbbb"
assert makeFileNameSafe("æøå") == "æøå"
# Trim edges
assert makeFileNameSafe(" Name ") == "Name"
# Normalise Unicode
assert makeFileNameSafe("Stuff œfi2⁵") == "Stuff œfi25"
# No control characters
assert makeFileNameSafe("One\tTwo") == "OneTwo"
assert makeFileNameSafe("One\nTwo") == "OneTwo"
assert makeFileNameSafe("One\rTwo") == "OneTwo"
# Invalid special characters
assert makeFileNameSafe("One\\Two") == "OneTwo"
assert makeFileNameSafe("One/Two") == "OneTwo"
assert makeFileNameSafe("One:Two") == "OneTwo"
assert makeFileNameSafe("One*Two") == "OneTwo"
assert makeFileNameSafe("One?Two") == "OneTwo"
assert makeFileNameSafe('One"Two') == "OneTwo"
assert makeFileNameSafe("One<Two") == "OneTwo"
assert makeFileNameSafe("One>Two") == "OneTwo"
assert makeFileNameSafe("One|Two") == "OneTwo"
# Names that are valid
assert makeFileNameSafe("One Two") == "One Two"
assert makeFileNameSafe("One,Two") == "One,Two"
assert makeFileNameSafe("One-Two") == "One-Two"
assert makeFileNameSafe("OneTwo") == "OneTwo"
assert makeFileNameSafe("One—Two") == "One—Two"
assert makeFileNameSafe("Bob's Story") == "Bob's Story"
# Unicode
assert makeFileNameSafe("æøå") == "æøå"
assert makeFileNameSafe("ßÜ") == "ßÜ"
@pytest.mark.base
def testBaseCommon_getFileSize(fncPath):