From f7f15fb35aa593c2ee4360e636b8445d97229f74 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Mon, 4 Dec 2023 17:41:51 -0800 Subject: [PATCH] sanitize --- src/ytdl_sub/script/functions/string_functions.py | 10 ++++++++++ tests/unit/script/functions/test_string_functions.py | 12 ++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/ytdl_sub/script/functions/string_functions.py b/src/ytdl_sub/script/functions/string_functions.py index ec7cc70e..104db663 100644 --- a/src/ytdl_sub/script/functions/string_functions.py +++ b/src/ytdl_sub/script/functions/string_functions.py @@ -1,5 +1,7 @@ from typing import Optional +from yt_dlp.utils import sanitize_filename + from ytdl_sub.script.types.resolvable import AnyArgument from ytdl_sub.script.types.resolvable import Integer from ytdl_sub.script.types.resolvable import Numeric @@ -83,3 +85,11 @@ class StringFunctions: length=length, char=String("0"), ) + + @staticmethod + def sanitize(string: String) -> String: + """ + Returns a sanitized string that is safe to use in file paths (Windows, OSX, Unix). + """ + # TODO: Move this out of script before making it a separate library + return String(sanitize_filename(string.value)) diff --git a/tests/unit/script/functions/test_string_functions.py b/tests/unit/script/functions/test_string_functions.py index 5f0c226e..82adf75a 100644 --- a/tests/unit/script/functions/test_string_functions.py +++ b/tests/unit/script/functions/test_string_functions.py @@ -98,3 +98,15 @@ class TestNumericFunctions: def test_pad_zero(self, values: str, expected_output: str): output = single_variable_output(f"{{%pad_zero({values})}}") assert output == expected_output + + @pytest.mark.parametrize( + "values, expected_output", + [ + ("'2012'", "2012"), + ("'$?ahh'", "$?ahh"), + ], + ) + def test_sanitize(self, values: str, expected_output: str): + # TODO: Move this out once it is its own library + output = single_variable_output(f"{{%sanitize({values})}}") + assert output == expected_output