[BACKEND] Remove subscription __value__ (#856)

Removes the deprecated `__value__` field in the subscriptions file (different from `__preset__` which is NOT deprecated). This was very short-lived, and most likely not used.
This commit is contained in:
Jesse Bannon 2023-12-27 10:49:39 -08:00 committed by GitHub
parent 008bcf1b2d
commit 1375a0fbe3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 13 additions and 204 deletions

View file

@ -10,7 +10,6 @@ from ytdl_sub.config.defaults import DEFAULT_FFPROBE_PATH
from ytdl_sub.config.defaults import DEFAULT_LOCK_DIRECTORY from ytdl_sub.config.defaults import DEFAULT_LOCK_DIRECTORY
from ytdl_sub.config.defaults import MAX_FILE_NAME_BYTES from ytdl_sub.config.defaults import MAX_FILE_NAME_BYTES
from ytdl_sub.prebuilt_presets import PREBUILT_PRESETS from ytdl_sub.prebuilt_presets import PREBUILT_PRESETS
from ytdl_sub.subscriptions.utils import SUBSCRIPTION_VALUE_CONFIG_KEY
from ytdl_sub.validators.file_path_validators import FFmpegFileValidator from ytdl_sub.validators.file_path_validators import FFmpegFileValidator
from ytdl_sub.validators.file_path_validators import FFprobeFileValidator from ytdl_sub.validators.file_path_validators import FFprobeFileValidator
from ytdl_sub.validators.strict_dict_validator import StrictDictValidator from ytdl_sub.validators.strict_dict_validator import StrictDictValidator
@ -107,7 +106,6 @@ class ConfigOptions(StrictDictValidator):
"ffprobe_path", "ffprobe_path",
"file_name_max_bytes", "file_name_max_bytes",
"experimental", "experimental",
SUBSCRIPTION_VALUE_CONFIG_KEY,
} }
def __init__(self, name: str, value: Any): def __init__(self, name: str, value: Any):
@ -142,9 +140,6 @@ class ConfigOptions(StrictDictValidator):
self._file_name_max_bytes = self._validate_key( self._file_name_max_bytes = self._validate_key(
key="file_name_max_bytes", validator=IntValidator, default=MAX_FILE_NAME_BYTES key="file_name_max_bytes", validator=IntValidator, default=MAX_FILE_NAME_BYTES
) )
self._subscription_value = self._validate_key_if_present(
key=SUBSCRIPTION_VALUE_CONFIG_KEY, validator=StringValidator
)
@property @property
def working_directory(self) -> str: def working_directory(self) -> str:
@ -237,14 +232,6 @@ class ConfigOptions(StrictDictValidator):
""" """
return self._ffprobe_path.value return self._ffprobe_path.value
@property
def subscription_value(self) -> Optional[str]:
"""
Sets the :ref:`subscription value` for subscription
files that use this config.
"""
return self._subscription_value.value if self._subscription_value else None
class ConfigValidator(StrictDictValidator): class ConfigValidator(StrictDictValidator):
_optional_keys = {"configuration", "presets"} _optional_keys = {"configuration", "presets"}

View file

@ -3,19 +3,16 @@ from pathlib import Path
from typing import Any from typing import Any
from typing import Dict from typing import Dict
from typing import List from typing import List
from typing import Optional
from ytdl_sub.config.config_file import ConfigFile from ytdl_sub.config.config_file import ConfigFile
from ytdl_sub.config.preset import Preset from ytdl_sub.config.preset import Preset
from ytdl_sub.subscriptions.subscription_download import SubscriptionDownload from ytdl_sub.subscriptions.subscription_download import SubscriptionDownload
from ytdl_sub.subscriptions.subscription_validators import SubscriptionValidator from ytdl_sub.subscriptions.subscription_validators import SubscriptionValidator
from ytdl_sub.utils.exceptions import ValidationException
from ytdl_sub.utils.logger import Logger from ytdl_sub.utils.logger import Logger
from ytdl_sub.utils.yaml import load_yaml from ytdl_sub.utils.yaml import load_yaml
from ytdl_sub.validators.validators import LiteralDictValidator from ytdl_sub.validators.validators import LiteralDictValidator
FILE_PRESET_APPLY_KEY = "__preset__" FILE_PRESET_APPLY_KEY = "__preset__"
FILE_SUBSCRIPTION_VALUE_KEY = "__value__"
logger = Logger.get("subscription") logger = Logger.get("subscription")
@ -70,36 +67,12 @@ class Subscription(SubscriptionDownload):
config=config, config=config,
) )
@classmethod
def _maybe_get_subscription_value(
cls, config: ConfigFile, subscription_dict: Dict
) -> Optional[str]:
subscription_value_key: Optional[str] = config.config_options.subscription_value
if FILE_SUBSCRIPTION_VALUE_KEY in subscription_dict:
if not isinstance(subscription_dict[FILE_SUBSCRIPTION_VALUE_KEY], str):
raise ValidationException(
f"Using {FILE_SUBSCRIPTION_VALUE_KEY} in a subscription"
f"must be a string that corresponds to an override variable"
)
subscription_value_key = subscription_dict[FILE_SUBSCRIPTION_VALUE_KEY]
if subscription_value_key is not None:
logger.warning(
"Using %s in a subscription will eventually be deprecated in favor of writing "
"to the override variable `subscription_value`. Please update by Dec 2023.",
FILE_SUBSCRIPTION_VALUE_KEY,
)
return subscription_value_key
@classmethod @classmethod
def from_file_path( def from_file_path(
cls, config: ConfigFile, subscription_path: str | Path cls, config: ConfigFile, subscription_path: str | Path
) -> List["Subscription"]: ) -> List["Subscription"]:
""" """
Loads subscriptions from a file and applies ``__preset__`` to all of them if present. Loads subscriptions from a file.
If a subscription is in the form of key: value, it will set value to the override
variable defined in ``__value__``.
Parameters Parameters
---------- ----------
@ -121,9 +94,6 @@ class Subscription(SubscriptionDownload):
subscription_dict = load_yaml(file_path=subscription_path) subscription_dict = load_yaml(file_path=subscription_path)
has_file_preset = FILE_PRESET_APPLY_KEY in subscription_dict has_file_preset = FILE_PRESET_APPLY_KEY in subscription_dict
file_subscription_value: Optional[str] = cls._maybe_get_subscription_value(
config=config, subscription_dict=subscription_dict
)
# If a file preset is present... # If a file preset is present...
if has_file_preset: if has_file_preset:
@ -138,9 +108,7 @@ class Subscription(SubscriptionDownload):
config.presets.dict[FILE_PRESET_APPLY_KEY] = file_preset.dict config.presets.dict[FILE_PRESET_APPLY_KEY] = file_preset.dict
subscriptions_dict: Dict[str, Any] = { subscriptions_dict: Dict[str, Any] = {
key: obj key: obj for key, obj in subscription_dict.items() if key not in [FILE_PRESET_APPLY_KEY]
for key, obj in subscription_dict.items()
if key not in [FILE_PRESET_APPLY_KEY, FILE_SUBSCRIPTION_VALUE_KEY]
} }
subscriptions_dicts = SubscriptionValidator( subscriptions_dicts = SubscriptionValidator(
@ -149,7 +117,6 @@ class Subscription(SubscriptionDownload):
config=config, config=config,
presets=[], presets=[],
indent_overrides=[], indent_overrides=[],
subscription_value=file_subscription_value,
).subscription_dicts( ).subscription_dicts(
global_presets_to_apply=[FILE_PRESET_APPLY_KEY] if has_file_preset else [] global_presets_to_apply=[FILE_PRESET_APPLY_KEY] if has_file_preset else []
) )

View file

@ -120,7 +120,6 @@ class SubscriptionValueValidator(SubscriptionLeafValidator, StringValidator):
config: ConfigFile, config: ConfigFile,
presets: List[str], presets: List[str],
indent_overrides: List[str], indent_overrides: List[str],
subscription_value: Optional[str],
): ):
super().__init__( super().__init__(
name=name, name=name,
@ -129,10 +128,6 @@ class SubscriptionValueValidator(SubscriptionLeafValidator, StringValidator):
presets=presets, presets=presets,
indent_overrides=indent_overrides, indent_overrides=indent_overrides,
) )
# TODO: Eventually delete in favor of {subscription_value}
if subscription_value:
self._overrides_to_add[subscription_value] = self.value
self._overrides_to_add[SUBSCRIPTION_VALUE] = self.value self._overrides_to_add[SUBSCRIPTION_VALUE] = self.value
@ -234,7 +229,6 @@ class SubscriptionValidator(SubscriptionOutput):
config: ConfigFile, config: ConfigFile,
presets: List[str], presets: List[str],
indent_overrides: List[str], indent_overrides: List[str],
subscription_value: Optional[str],
): ):
super().__init__(name=name, value=value, presets=presets, indent_overrides=indent_overrides) super().__init__(name=name, value=value, presets=presets, indent_overrides=indent_overrides)
self._children: List[SubscriptionOutput] = [] self._children: List[SubscriptionOutput] = []
@ -252,7 +246,6 @@ class SubscriptionValidator(SubscriptionOutput):
config=config, config=config,
presets=presets, presets=presets,
indent_overrides=indent_overrides, indent_overrides=indent_overrides,
subscription_value=subscription_value,
) )
) )
# Subscription defined as # Subscription defined as
@ -294,7 +287,6 @@ class SubscriptionValidator(SubscriptionOutput):
config=config, config=config,
presets=presets + preset_indent_key.presets, presets=presets + preset_indent_key.presets,
indent_overrides=indent_overrides + preset_indent_key.indent_overrides, indent_overrides=indent_overrides + preset_indent_key.indent_overrides,
subscription_value=subscription_value,
) )
) )
else: else:

View file

@ -1,2 +0,0 @@
# Key used in configs, should delete at some point
SUBSCRIPTION_VALUE_CONFIG_KEY = "subscription_value"

View file

@ -9,19 +9,8 @@ from mergedeep import mergedeep
from ytdl_sub.config.config_file import ConfigFile from ytdl_sub.config.config_file import ConfigFile
from ytdl_sub.plugins.nfo_tags import NfoTagsOptions from ytdl_sub.plugins.nfo_tags import NfoTagsOptions
from ytdl_sub.subscriptions.subscription import FILE_SUBSCRIPTION_VALUE_KEY
from ytdl_sub.subscriptions.subscription import Subscription from ytdl_sub.subscriptions.subscription import Subscription
from ytdl_sub.utils.exceptions import ValidationException from ytdl_sub.utils.exceptions import ValidationException
from ytdl_sub.utils.yaml import load_yaml
@pytest.fixture
def config_file_with_subscription_value(config_file: ConfigFile):
config_dict = config_file.as_dict()
mergedeep.merge(
config_dict, {"configuration": {"subscription_value": "test_config_subscription_value"}}
)
return ConfigFile.from_dict(config_dict)
@contextmanager @contextmanager
@ -43,8 +32,6 @@ def preset_with_file_preset(youtube_video: Dict, output_options: Dict):
"tags": {"key-3": "file_preset"}, "tags": {"key-3": "file_preset"},
}, },
"overrides": { "overrides": {
"test_file_subscription_value": "original",
"test_config_subscription_value": "original",
"subscription_indent_1": "original_1", "subscription_indent_1": "original_1",
"subscription_indent_2": "original_2", "subscription_indent_2": "original_2",
"current_override": "__preset__", "current_override": "__preset__",
@ -70,17 +57,6 @@ def preset_with_subscription_value(preset_with_file_preset: Dict):
) )
@pytest.fixture
def preset_with_subscription_file_value(preset_with_subscription_value: Dict):
return dict(
preset_with_subscription_value,
**{
"__value__": "test_file_subscription_value",
"test_value": "is_overwritten",
},
)
@pytest.fixture @pytest.fixture
def preset_with_subscription_value_nested_presets(preset_with_subscription_value: Dict): def preset_with_subscription_value_nested_presets(preset_with_subscription_value: Dict):
return dict( return dict(
@ -224,97 +200,14 @@ def test_subscription_file_preset_applies(config_file: ConfigFile, preset_with_f
assert overrides.get("current_override") == "test_preset" assert overrides.get("current_override") == "test_preset"
def test_subscription_file_value_applies(
config_file: ConfigFile, preset_with_subscription_file_value: Dict
):
with mock_load_yaml(preset_dict=preset_with_subscription_file_value):
subs = Subscription.from_file_path(config=config_file, subscription_path="mocked")
assert len(subs) == 2
# Test __value__ worked correctly
value_sub = subs[1]
overrides = value_sub.overrides.dict_with_format_strings
assert value_sub.name == "test_value"
assert overrides.get("test_file_subscription_value") == "is_overwritten"
assert overrides.get("test_file_subscription_value")
assert overrides.get("subscription_value") == "is_overwritten"
assert overrides.get("current_override") == "__preset__" # ensure __preset__ takes precedence
def test_subscription_file_value_applies_sub_file_takes_precedence(
config_file_with_subscription_value: ConfigFile,
preset_with_subscription_file_value: Dict,
):
with mock_load_yaml(preset_dict=preset_with_subscription_file_value):
subs = Subscription.from_file_path(
config=config_file_with_subscription_value, subscription_path="mocked"
)
assert len(subs) == 2
# Test __value__ worked correctly
value_sub = subs[1].overrides.dict_with_format_strings
assert value_sub.get("test_file_subscription_value") == "is_overwritten"
assert value_sub.get("test_config_subscription_value") == "original"
assert value_sub.get("subscription_name") == "test_value"
assert value_sub.get("subscription_value") == "is_overwritten"
assert value_sub.get("current_override") == "__preset__" # ensure __preset__ takes precedence
def test_subscription_file_value_applies_from_config(
config_file_with_subscription_value: ConfigFile, preset_with_subscription_value: Dict
):
with mock_load_yaml(preset_dict=preset_with_subscription_value):
subs = Subscription.from_file_path(
config=config_file_with_subscription_value, subscription_path="mocked"
)
assert len(subs) == 2
# Test __value__ worked correctly from the config
value_sub = subs[1].overrides.dict_with_format_strings
assert value_sub.get("test_file_subscription_value") == "original"
assert value_sub.get("test_config_subscription_value") == "is_overwritten"
assert value_sub.get("subscription_name") == "test_value"
assert value_sub.get("subscription_value") == "is_overwritten"
assert value_sub.get("current_override") == "__preset__" # ensure __preset__ takes precedence
def test_subscription_file_value_applies_from_config_and_nested(
config_file_with_subscription_value: ConfigFile,
preset_with_subscription_value_nested_presets: Dict,
):
with mock_load_yaml(preset_dict=preset_with_subscription_value_nested_presets):
subs = Subscription.from_file_path(
config=config_file_with_subscription_value, subscription_path="mocked"
)
assert len(subs) == 4
# Test __value__ worked correctly from the config
sub_1 = [sub for sub in subs if sub.name == "test_1"][0].overrides.dict_with_format_strings
sub_2_1 = [sub for sub in subs if sub.name == "test_2_1"][0].overrides.dict_with_format_strings
assert sub_1.get("test_config_subscription_value") == "is_1_overwritten"
assert sub_1.get("subscription_name") == "test_1"
assert sub_1.get("subscription_value") == "is_1_overwritten"
assert sub_1.get("current_override") == "__preset__" # ensure __preset__ takes precedence
assert sub_2_1.get("test_config_subscription_value") == "is_2_1_overwritten"
assert sub_2_1.get("subscription_name") == "test_2_1"
assert sub_2_1.get("subscription_value") == "is_2_1_overwritten"
assert sub_2_1.get("current_override") == "__preset__" # ensure __preset__ takes precedence
def test_subscription_list( def test_subscription_list(
config_file_with_subscription_value: ConfigFile, config_file: ConfigFile,
preset_with_subscription_list: Dict, preset_with_subscription_list: Dict,
): ):
with mock_load_yaml(preset_dict=preset_with_subscription_list): with mock_load_yaml(preset_dict=preset_with_subscription_list):
subs = Subscription.from_file_path( subs = Subscription.from_file_path(config=config_file, subscription_path="mocked")
config=config_file_with_subscription_value, subscription_path="mocked"
)
assert len(subs) == 3 assert len(subs) == 3
# Test __value__ worked correctly from the config
sub_2_1 = [sub for sub in subs if sub.name == "test_2_1"][0].overrides.dict_with_format_strings sub_2_1 = [sub for sub in subs if sub.name == "test_2_1"][0].overrides.dict_with_format_strings
assert sub_2_1.get("subscription_name") == "test_2_1" assert sub_2_1.get("subscription_name") == "test_2_1"
@ -325,16 +218,13 @@ def test_subscription_list(
def test_subscription_overrides_tilda( def test_subscription_overrides_tilda(
config_file_with_subscription_value: ConfigFile, config_file: ConfigFile,
preset_with_subscription_overrides_tilda: Dict, preset_with_subscription_overrides_tilda: Dict,
): ):
with mock_load_yaml(preset_dict=preset_with_subscription_overrides_tilda): with mock_load_yaml(preset_dict=preset_with_subscription_overrides_tilda):
subs = Subscription.from_file_path( subs = Subscription.from_file_path(config=config_file, subscription_path="mocked")
config=config_file_with_subscription_value, subscription_path="mocked"
)
assert len(subs) == 3 assert len(subs) == 3
# Test __value__ worked correctly from the config
sub_2_1 = [sub for sub in subs if sub.name == "test_2_1"][0].overrides.dict_with_format_strings sub_2_1 = [sub for sub in subs if sub.name == "test_2_1"][0].overrides.dict_with_format_strings
assert sub_2_1.get("subscription_name") == "test_2_1" assert sub_2_1.get("subscription_name") == "test_2_1"
@ -342,18 +232,15 @@ def test_subscription_overrides_tilda(
def test_subscription_file_value_applies_from_config_and_nested_and_indent_variables( def test_subscription_file_value_applies_from_config_and_nested_and_indent_variables(
config_file_with_subscription_value: ConfigFile, config_file: ConfigFile,
preset_with_subscription_value_nested_presets_and_indent_variables: Dict, preset_with_subscription_value_nested_presets_and_indent_variables: Dict,
): ):
with mock_load_yaml( with mock_load_yaml(
preset_dict=preset_with_subscription_value_nested_presets_and_indent_variables preset_dict=preset_with_subscription_value_nested_presets_and_indent_variables
): ):
subs = Subscription.from_file_path( subs = Subscription.from_file_path(config=config_file, subscription_path="mocked")
config=config_file_with_subscription_value, subscription_path="mocked"
)
assert len(subs) == 4 assert len(subs) == 4
# Test __value__ worked correctly from the config
sub_test_value = [sub for sub in subs if sub.name == "test_value"][ sub_test_value = [sub for sub in subs if sub.name == "test_value"][
0 0
].overrides.dict_with_format_strings ].overrides.dict_with_format_strings
@ -363,14 +250,12 @@ def test_subscription_file_value_applies_from_config_and_nested_and_indent_varia
assert sub_test_value.get("subscription_indent_1") == "original_1" assert sub_test_value.get("subscription_indent_1") == "original_1"
assert sub_test_value.get("subscription_indent_2") == "original_2" assert sub_test_value.get("subscription_indent_2") == "original_2"
assert sub_1.get("test_config_subscription_value") == "is_1_overwritten"
assert sub_1.get("subscription_name") == "test_1" assert sub_1.get("subscription_name") == "test_1"
assert sub_1.get("subscription_value") == "is_1_overwritten" assert sub_1.get("subscription_value") == "is_1_overwritten"
assert sub_1.get("subscription_indent_1") == "INDENT_1" assert sub_1.get("subscription_indent_1") == "INDENT_1"
assert sub_1.get("subscription_indent_2") == "INDENT_2" assert sub_1.get("subscription_indent_2") == "INDENT_2"
assert sub_1.get("current_override") == "__preset__" # ensure __preset__ takes precedence assert sub_1.get("current_override") == "__preset__" # ensure __preset__ takes precedence
assert sub_2_1.get("test_config_subscription_value") == "is_2_1_overwritten"
assert sub_2_1.get("subscription_name") == "test_2_1" assert sub_2_1.get("subscription_name") == "test_2_1"
assert sub_2_1.get("subscription_value") == "is_2_1_overwritten" assert sub_2_1.get("subscription_value") == "is_2_1_overwritten"
assert sub_2_1.get("subscription_indent_1") == "INDENT_1" assert sub_2_1.get("subscription_indent_1") == "INDENT_1"
@ -380,7 +265,7 @@ def test_subscription_file_value_applies_from_config_and_nested_and_indent_varia
@pytest.mark.parametrize("all_same_line", [True, False]) @pytest.mark.parametrize("all_same_line", [True, False])
def test_subscription_file_value_applies_from_config_and_nested_and_indent_variables_same_line( def test_subscription_file_value_applies_from_config_and_nested_and_indent_variables_same_line(
config_file_with_subscription_value: ConfigFile, config_file: ConfigFile,
preset_with_subscription_value_nested_presets_and_indent_variables_same_line: Dict, preset_with_subscription_value_nested_presets_and_indent_variables_same_line: Dict,
preset_with_subscription_value_nested_presets_and_indent_variables_all_same_line: Dict, preset_with_subscription_value_nested_presets_and_indent_variables_all_same_line: Dict,
all_same_line: bool, all_same_line: bool,
@ -392,12 +277,9 @@ def test_subscription_file_value_applies_from_config_and_nested_and_indent_varia
) )
with mock_load_yaml(preset_dict=preset_dict): with mock_load_yaml(preset_dict=preset_dict):
subs = Subscription.from_file_path( subs = Subscription.from_file_path(config=config_file, subscription_path="mocked")
config=config_file_with_subscription_value, subscription_path="mocked"
)
assert len(subs) == 4 assert len(subs) == 4
# Test __value__ worked correctly from the config
sub_test_value = [sub for sub in subs if sub.name == "test_value"][ sub_test_value = [sub for sub in subs if sub.name == "test_value"][
0 0
].overrides.dict_with_format_strings ].overrides.dict_with_format_strings
@ -407,7 +289,6 @@ def test_subscription_file_value_applies_from_config_and_nested_and_indent_varia
assert sub_test_value.get("subscription_indent_1") == "original_1" assert sub_test_value.get("subscription_indent_1") == "original_1"
assert sub_test_value.get("subscription_indent_2") == "original_2" assert sub_test_value.get("subscription_indent_2") == "original_2"
assert sub_1.get("test_config_subscription_value") == "is_1_overwritten"
assert sub_1.get("subscription_name") == "test_1" assert sub_1.get("subscription_name") == "test_1"
assert sub_1.get("subscription_value") == "is_1_overwritten" assert sub_1.get("subscription_value") == "is_1_overwritten"
assert sub_1.get("subscription_indent_1") == "INDENT_1" assert sub_1.get("subscription_indent_1") == "INDENT_1"
@ -415,7 +296,6 @@ def test_subscription_file_value_applies_from_config_and_nested_and_indent_varia
assert sub_1.get("subscription_indent_3") == "INDENT_3" assert sub_1.get("subscription_indent_3") == "INDENT_3"
assert sub_1.get("current_override") == "__preset__" # ensure __preset__ takes precedence assert sub_1.get("current_override") == "__preset__" # ensure __preset__ takes precedence
assert sub_2_1.get("test_config_subscription_value") == "is_2_1_overwritten"
assert sub_2_1.get("subscription_name") == "test_2_1" assert sub_2_1.get("subscription_name") == "test_2_1"
assert sub_2_1.get("subscription_value") == "is_2_1_overwritten" assert sub_2_1.get("subscription_value") == "is_2_1_overwritten"
assert sub_2_1.get("subscription_indent_1") == "INDENT_1" assert sub_2_1.get("subscription_indent_1") == "INDENT_1"
@ -425,7 +305,7 @@ def test_subscription_file_value_applies_from_config_and_nested_and_indent_varia
def test_subscription_file_value_applies_from_config_and_nested_and_indent_variables_same_line_old_format_errors( def test_subscription_file_value_applies_from_config_and_nested_and_indent_variables_same_line_old_format_errors(
config_file_with_subscription_value: ConfigFile, config_file: ConfigFile,
preset_with_subscription_value_nested_presets_and_indent_variables_same_line_old_format_errors: Dict, preset_with_subscription_value_nested_presets_and_indent_variables_same_line_old_format_errors: Dict,
): ):
with mock_load_yaml( with mock_load_yaml(
@ -437,28 +317,13 @@ def test_subscription_file_value_applies_from_config_and_nested_and_indent_varia
"To use as a subscription indent value, define it as '= INDENT_3'" "To use as a subscription indent value, define it as '= INDENT_3'"
), ),
): ):
Subscription.from_file_path( Subscription.from_file_path(config=config_file, subscription_path="mocked")
config=config_file_with_subscription_value, subscription_path="mocked"
)
def test_subscription_file_bad_value(config_file: ConfigFile):
with mock_load_yaml(preset_dict={"__value__": {"should be": "string"}}), pytest.raises(
ValidationException,
match=re.escape(
f"Using {FILE_SUBSCRIPTION_VALUE_KEY} in a subscription"
f"must be a string that corresponds to an override variable"
),
):
_ = Subscription.from_file_path(config=config_file, subscription_path="mocked")
def test_subscription_file_using_conflicting_preset_name(config_file: ConfigFile): def test_subscription_file_using_conflicting_preset_name(config_file: ConfigFile):
with mock_load_yaml( with mock_load_yaml(
preset_dict={ preset_dict={
"= INDENTS_IN_ERR_MSG ": { "= INDENTS_IN_ERR_MSG ": {"=ANOTHER": {"jellyfin_tv_show_by_date": "single value"}}
"=ANOTHER": {"jellyfin_tv_show_by_date": "single value, __value__ not defined"}
}
} }
), pytest.raises( ), pytest.raises(
ValidationException, ValidationException,