diff --git a/src/ytdl_sub/script/functions/__init__.py b/src/ytdl_sub/script/functions/__init__.py index 5e12c931..5e272cb2 100644 --- a/src/ytdl_sub/script/functions/__init__.py +++ b/src/ytdl_sub/script/functions/__init__.py @@ -4,6 +4,7 @@ from typing import Dict from ytdl_sub.script.functions.array_functions import ArrayFunctions from ytdl_sub.script.functions.boolean_functions import BooleanFunctions from ytdl_sub.script.functions.conditional_functions import ConditionalFunctions +from ytdl_sub.script.functions.date_functions import DateFunctions from ytdl_sub.script.functions.error_functions import ErrorFunctions from ytdl_sub.script.functions.map_functions import MapFunctions from ytdl_sub.script.functions.numeric_functions import NumericFunctions @@ -22,6 +23,7 @@ class Functions( BooleanFunctions, ErrorFunctions, RegexFunctions, + DateFunctions, ): _custom_functions: Dict[str, Callable[..., Resolvable]] = {} diff --git a/src/ytdl_sub/script/functions/date_functions.py b/src/ytdl_sub/script/functions/date_functions.py new file mode 100644 index 00000000..8d68f052 --- /dev/null +++ b/src/ytdl_sub/script/functions/date_functions.py @@ -0,0 +1,13 @@ +from datetime import datetime + +from ytdl_sub.script.types.resolvable import Integer +from ytdl_sub.script.types.resolvable import String + + +class DateFunctions: + @staticmethod + def datetime_strftime(posix_timestamp: Integer, date_format: String) -> String: + """ + Converts a posix timestamp to a date using strftime formatting. + """ + return String(datetime.utcfromtimestamp(posix_timestamp.value).strftime(date_format.value)) diff --git a/tests/unit/script/functions/test_date_functions.py b/tests/unit/script/functions/test_date_functions.py new file mode 100644 index 00000000..1c826ea4 --- /dev/null +++ b/tests/unit/script/functions/test_date_functions.py @@ -0,0 +1,17 @@ +import pytest +from unit.script.conftest import single_variable_output + +from ytdl_sub.script.script import Script + + +class TestNumericFunctions: + @pytest.mark.parametrize( + "timestamp, date_format, expected_output", + [ + (1596877200, "'%Y%m%d'", "20200808"), + (1596877200, "'%m'", "08"), + ], + ) + def test_datetime_strftime(self, timestamp: int, date_format: str, expected_output: str): + output = single_variable_output(f"{{%datetime_strftime({timestamp}, {date_format})}}") + assert output == expected_output