[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:
parent
008bcf1b2d
commit
1375a0fbe3
5 changed files with 13 additions and 204 deletions
|
|
@ -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"}
|
||||||
|
|
|
||||||
|
|
@ -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 []
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
# Key used in configs, should delete at some point
|
|
||||||
SUBSCRIPTION_VALUE_CONFIG_KEY = "subscription_value"
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue