[FEATURE] Add scripting print functions
This commit is contained in:
parent
36e23839f3
commit
a6aa411733
4 changed files with 106 additions and 0 deletions
|
|
@ -523,6 +523,32 @@ sub
|
|||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
Print Functions
|
||||
---------------
|
||||
|
||||
print
|
||||
~~~~~
|
||||
:spec: ``print(message: AnyArgument, passthrough: ReturnableArgument) -> ReturnableArgument``
|
||||
|
||||
:description:
|
||||
Print the ``message`` and return ``passthrough``.
|
||||
|
||||
print_if_false
|
||||
~~~~~~~~~~~~~~
|
||||
:spec: ``print_if_false(message: AnyArgument, passthrough: ReturnableArgument) -> ReturnableArgument``
|
||||
|
||||
:description:
|
||||
Print the ``message`` if ``passthrough`` evaluates to ``false``. Return ``passthrough``.
|
||||
|
||||
print_if_true
|
||||
~~~~~~~~~~~~~
|
||||
:spec: ``print_if_true(message: AnyArgument, passthrough: ReturnableArgument) -> ReturnableArgument``
|
||||
|
||||
:description:
|
||||
Print the ``message`` if ``passthrough`` evaluates to ``true``. Return ``passthrough``.
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
|
||||
Regex Functions
|
||||
---------------
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ from ytdl_sub.script.functions.error_functions import ErrorFunctions
|
|||
from ytdl_sub.script.functions.json_functions import JsonFunctions
|
||||
from ytdl_sub.script.functions.map_functions import MapFunctions
|
||||
from ytdl_sub.script.functions.numeric_functions import NumericFunctions
|
||||
from ytdl_sub.script.functions.print_functions import PrintFunctions
|
||||
from ytdl_sub.script.functions.regex_functions import RegexFunctions
|
||||
from ytdl_sub.script.functions.string_functions import StringFunctions
|
||||
from ytdl_sub.script.types.resolvable import Resolvable
|
||||
|
|
@ -26,6 +27,7 @@ class Functions(
|
|||
RegexFunctions,
|
||||
DateFunctions,
|
||||
JsonFunctions,
|
||||
PrintFunctions,
|
||||
):
|
||||
_custom_functions: Dict[str, Callable[..., Resolvable]] = {}
|
||||
|
||||
|
|
|
|||
42
src/ytdl_sub/script/functions/print_functions.py
Normal file
42
src/ytdl_sub/script/functions/print_functions.py
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
from ytdl_sub.script.types.resolvable import AnyArgument
|
||||
from ytdl_sub.script.types.resolvable import ReturnableArgument
|
||||
from ytdl_sub.utils.logger import Logger
|
||||
|
||||
logger = Logger.get(name="preset")
|
||||
|
||||
|
||||
class PrintFunctions:
|
||||
@staticmethod
|
||||
def print(
|
||||
message: AnyArgument, passthrough: ReturnableArgument
|
||||
) -> ReturnableArgument:
|
||||
"""
|
||||
:description:
|
||||
Print the ``message`` and return ``passthrough``.
|
||||
"""
|
||||
logger.info(str(message))
|
||||
return passthrough
|
||||
|
||||
@staticmethod
|
||||
def print_if_true(
|
||||
message: AnyArgument, passthrough: ReturnableArgument
|
||||
) -> ReturnableArgument:
|
||||
"""
|
||||
:description:
|
||||
Print the ``message`` if ``passthrough`` evaluates to ``true``. Return ``passthrough``.
|
||||
"""
|
||||
if passthrough.value:
|
||||
logger.info(str(message))
|
||||
return passthrough
|
||||
|
||||
@staticmethod
|
||||
def print_if_false(
|
||||
message: AnyArgument, passthrough: ReturnableArgument
|
||||
) -> ReturnableArgument:
|
||||
"""
|
||||
:description:
|
||||
Print the ``message`` if ``passthrough`` evaluates to ``false``. Return ``passthrough``.
|
||||
"""
|
||||
if not passthrough.value:
|
||||
logger.info(str(message))
|
||||
return passthrough
|
||||
36
tests/unit/script/functions/test_print_functions.py
Normal file
36
tests/unit/script/functions/test_print_functions.py
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
import logging
|
||||
from typing import Any, Optional
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
from unit.script.conftest import single_variable_output
|
||||
|
||||
|
||||
|
||||
class TestPrintFunctions:
|
||||
@pytest.mark.parametrize(
|
||||
"function_str, expected_print, expected_output",
|
||||
[
|
||||
# print
|
||||
("{%print('hi mom', True)}", 'hi mom', True),
|
||||
("{%print('this is great', [1, 2, 3])}", 'this is great', [1, 2, 3]),
|
||||
("{%print([1, 2], [3, 4])}", '[1, 2]', [3, 4]),
|
||||
# print_if_true
|
||||
("{%print_if_true('hi mom', True)}", 'hi mom', True),
|
||||
("{%print_if_true('hi mom', False)}", None, False),
|
||||
# print_if_false
|
||||
("{%print_if_false('hi mom', True)}", None, True),
|
||||
("{%print_if_false('hi mom', False)}", 'hi mom', False),
|
||||
],
|
||||
)
|
||||
def test_print_functions(self, function_str: str, expected_print: Optional[str], expected_output: Any):
|
||||
with patch.object(logging.Logger, "info") as mock_logger:
|
||||
output = single_variable_output(function_str)
|
||||
assert output == expected_output
|
||||
|
||||
if expected_print is not None:
|
||||
assert mock_logger.call_count == 1
|
||||
assert mock_logger.call_args.args[0] == expected_print
|
||||
else:
|
||||
assert mock_logger.call_count == 0
|
||||
|
||||
Loading…
Reference in a new issue