[DEV] String validators to allow ints, floats, bools (#810)
This commit is contained in:
parent
6123e35c64
commit
52d1a5887e
4 changed files with 15 additions and 10 deletions
|
|
@ -12,7 +12,7 @@ from ytdl_sub.utils.exceptions import StringFormattingException
|
||||||
from ytdl_sub.utils.exceptions import StringFormattingVariableNotFoundException
|
from ytdl_sub.utils.exceptions import StringFormattingVariableNotFoundException
|
||||||
from ytdl_sub.validators.validators import ListValidator
|
from ytdl_sub.validators.validators import ListValidator
|
||||||
from ytdl_sub.validators.validators import LiteralDictValidator
|
from ytdl_sub.validators.validators import LiteralDictValidator
|
||||||
from ytdl_sub.validators.validators import Validator
|
from ytdl_sub.validators.validators import StringValidator
|
||||||
|
|
||||||
_fields_validator = re.compile(r"{([a-z][a-z0-9_]+?)}")
|
_fields_validator = re.compile(r"{([a-z][a-z0-9_]+?)}")
|
||||||
|
|
||||||
|
|
@ -47,7 +47,7 @@ def is_valid_source_variable_name(input_str: str, raise_exception: bool = False)
|
||||||
return is_source_variable_name
|
return is_source_variable_name
|
||||||
|
|
||||||
|
|
||||||
class StringFormatterValidator(Validator):
|
class StringFormatterValidator(StringValidator):
|
||||||
"""
|
"""
|
||||||
String that can use
|
String that can use
|
||||||
:class:`source variables <ytdl_sub.entries.variables.entry_variables.SourceVariables>`
|
:class:`source variables <ytdl_sub.entries.variables.entry_variables.SourceVariables>`
|
||||||
|
|
@ -73,7 +73,6 @@ class StringFormatterValidator(Validator):
|
||||||
and would resolve to something like ``sweet_tv_show.s2022.e502.mp4``.
|
and would resolve to something like ``sweet_tv_show.s2022.e502.mp4``.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_expected_value_type = str
|
|
||||||
_expected_value_type_name = "format string"
|
_expected_value_type_name = "format string"
|
||||||
_variable_not_found_error_msg_formatter = (
|
_variable_not_found_error_msg_formatter = (
|
||||||
"Format variable '{variable_name}' does not exist. Available variables: {available_fields}"
|
"Format variable '{variable_name}' does not exist. Available variables: {available_fields}"
|
||||||
|
|
|
||||||
|
|
@ -138,6 +138,12 @@ class StringValidator(ValueValidator[str]):
|
||||||
_expected_value_type = str
|
_expected_value_type = str
|
||||||
_expected_value_type_name = "string"
|
_expected_value_type_name = "string"
|
||||||
|
|
||||||
|
def __init__(self, name: str, value: Any):
|
||||||
|
if isinstance(value, (int, float, bool)):
|
||||||
|
value = str(value)
|
||||||
|
|
||||||
|
super().__init__(name, value)
|
||||||
|
|
||||||
|
|
||||||
class FloatValidator(ValueValidator[float]):
|
class FloatValidator(ValueValidator[float]):
|
||||||
_expected_value_type = (int, float)
|
_expected_value_type = (int, float)
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ class TestDictValidator:
|
||||||
):
|
):
|
||||||
_ = dict_validator._validate_key(key="key_name", validator=StringValidator)
|
_ = dict_validator._validate_key(key="key_name", validator=StringValidator)
|
||||||
|
|
||||||
@pytest.mark.parametrize("bad_value", [True, None, {}])
|
@pytest.mark.parametrize("bad_value", [None, {}, []])
|
||||||
def test_dict_validator_validate_key_errors_bad_validation(self, bad_value):
|
def test_dict_validator_validate_key_errors_bad_validation(self, bad_value):
|
||||||
dict_validator = DictValidator(name="parent", value={"child": bad_value})
|
dict_validator = DictValidator(name="parent", value={"child": bad_value})
|
||||||
with pytest.raises(
|
with pytest.raises(
|
||||||
|
|
@ -87,7 +87,7 @@ class TestDictValidator:
|
||||||
|
|
||||||
assert out is None
|
assert out is None
|
||||||
|
|
||||||
@pytest.mark.parametrize("bad_value", [True, None, {}])
|
@pytest.mark.parametrize("bad_value", [None, {}, []])
|
||||||
def test_dict_validator_validate_key_errors_none_bad_validation(self, bad_value):
|
def test_dict_validator_validate_key_errors_none_bad_validation(self, bad_value):
|
||||||
dict_validator = DictValidator(name="parent", value={"child": bad_value})
|
dict_validator = DictValidator(name="parent", value={"child": bad_value})
|
||||||
with pytest.raises(
|
with pytest.raises(
|
||||||
|
|
|
||||||
|
|
@ -4,16 +4,16 @@ from ytdl_sub.utils.exceptions import ValidationException
|
||||||
from ytdl_sub.validators.validators import StringValidator
|
from ytdl_sub.validators.validators import StringValidator
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("value", ["a", "unicode 💩", ""])
|
@pytest.mark.parametrize("value", ["a", "unicode 💩", "", 1, 3.14, True, False])
|
||||||
def test_string_validator(value):
|
def test_string_validator(value):
|
||||||
string_validator = StringValidator(name="good_str_validator", value=value)
|
string_validator = StringValidator(name="good_str_validator", value=value)
|
||||||
assert string_validator._name == "good_str_validator"
|
assert string_validator._name == "good_str_validator"
|
||||||
assert string_validator._value == value
|
assert string_validator._value == str(value)
|
||||||
assert string_validator.value == value
|
assert string_validator.value == str(value)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("value", [None, {}, True, 0])
|
@pytest.mark.parametrize("value", [None, dict(), [], set()])
|
||||||
def test_bool_validator_fails_bad_value(value):
|
def test_string_validator_fails_bad_value(value):
|
||||||
with pytest.raises(
|
with pytest.raises(
|
||||||
ValidationException, match="Validation error in fail: should be of type string"
|
ValidationException, match="Validation error in fail: should be of type string"
|
||||||
):
|
):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue