This commit is contained in:
oskvr37
2025-01-23 19:26:03 +01:00
parent 791f100300
commit 5eac4598f5
2 changed files with 32 additions and 39 deletions
+7 -12
View File
@@ -108,28 +108,23 @@ class TestFormatTrack(unittest.TestCase):
("{album}", "Konnichiwa"),
("{number}", "9"),
("{disc}", "1"),
("{date}", "11-15-16"),
("{date:%m-%d-%y}", "11-15-16"),
("{date:%Y}", "2016"),
("{year}", "2016"),
("{playlist_number}", ""),
("{bpm}", "69"),
("{quality}", "high"),
("{artist}/{album}/{title}", "Skepta/Konnichiwa/Shutdown"),
("{number:02d}. {title}", "09. Shutdown"),
]
for template, expected_result in test_cases:
result = formatTrack(template, self.track)
self.assertEqual(result, expected_result)
with self.subTest(template=template, expected_result=expected_result):
result = formatTrack(template, self.track)
self.assertEqual(result, expected_result)
def test_invalid_characters(self):
test_cases = [
"\\",
":",
'"',
"?",
"<",
">",
"|",
]
test_cases = ["\\", ":", '"', "?", "<", ">", "|", "{number}:{title}"]
for template in test_cases:
with self.subTest(template=template):
+25 -27
View File
@@ -47,44 +47,42 @@ def sanitizeString(string: str) -> str:
return re.sub(pattern, "", string)
def formatTrack(template: str, track: Track, date_format="%x") -> str:
disallowed_chars = r'[\\:"*?<>|]+'
invalid_chars = re.findall(disallowed_chars, template)
if invalid_chars:
raise ValueError(
f"Template '{template}' contains disallowed characters: {' '.join(sorted(set(invalid_chars)))}"
)
artist = track.artist.name if track.artist else ""
def formatTrack(template: str, track: Track, album_artist="", playlist_title="") -> str:
artist = sanitizeString(track.artist.name) if track.artist else ""
features = [
track_artist.name
sanitizeString(track_artist.name)
for track_artist in track.artists
if track_artist.name != artist
]
track_dict: dict[str, str] = {
track_dict = {
"id": str(track.id),
"title": track.title,
"version": track.version or "",
"title": sanitizeString(track.title),
"version": sanitizeString(track.version or ""),
"artist": artist,
"artists": ", ".join(features + [artist]),
"features": ", ".join(features),
"album": track.album.title,
"number": str(track.trackNumber),
"disc": str(track.volumeNumber),
"date": (
track.streamStartDate.strftime(date_format).replace("/", "-")
if track.streamStartDate
else ""
),
"album": sanitizeString(track.album.title),
"number": track.trackNumber,
"disc": track.volumeNumber,
"date": (track.streamStartDate if track.streamStartDate else ""),
# i think we can remove year as we are able to format date
"year": track.streamStartDate.strftime("%Y") if track.streamStartDate else "",
"playlist_number": str(track.playlistNumber or ""),
"bpm": str(track.bpm or ""),
"playlist": sanitizeString(playlist_title),
"bpm": track.bpm or "",
"quality": QUALITY_TO_ARG[track.audioQuality],
"album_artist": sanitizeString(album_artist),
"playlist_number": track.playlistNumber or "",
}
for key, value in track_dict.items():
track_dict[key] = sanitizeString(value)
formatted_track = template.format(**track_dict)
return template.format(**track_dict)
disallowed_chars = r'[\\:"*?<>|]+'
invalid_chars = re.findall(disallowed_chars, formatted_track)
if invalid_chars:
raise ValueError(
f"Template '{template}' and formatted track '{formatted_track}' contains disallowed characters: {' '.join(sorted(set(invalid_chars)))}"
)
return formatted_track