mirror of
https://github.com/LukeHagar/ytdl-sub.git
synced 2025-12-06 04:22:12 +00:00
[FEATURE] Add subscription_name override variable by default (#599)
* [FEATURE] Add `subscription_name` override variable by default * docs for it * lint * only test non-cli video test
This commit is contained in:
@@ -318,6 +318,12 @@ Source Variables
|
|||||||
:inherited-members:
|
:inherited-members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
|
|
||||||
|
Override Variables
|
||||||
|
------------------
|
||||||
|
|
||||||
|
.. autoclass:: ytdl_sub.config.preset_options.OverridesVariables()
|
||||||
|
:members:
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
Config Types
|
Config Types
|
||||||
|
|||||||
@@ -110,9 +110,45 @@ class YTDLOptions(LiteralDictValidator):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class OverridesVariables(DictFormatterValidator):
|
||||||
|
"""
|
||||||
|
Override variables that are automatically added to every subscription.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def _add_override_variable(self, key_name: str, format_string: str, sanitize: bool = False):
|
||||||
|
if sanitize:
|
||||||
|
key_name = f"{key_name}_sanitized"
|
||||||
|
format_string = sanitize_filename(format_string)
|
||||||
|
|
||||||
|
self._value[key_name] = StringFormatterValidator(
|
||||||
|
name="__should_never_fail__",
|
||||||
|
value=format_string,
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, name, value):
|
||||||
|
super().__init__(name, value)
|
||||||
|
|
||||||
|
# Add sanitized and non-sanitized override variables
|
||||||
|
for sanitize in [True, False]:
|
||||||
|
self._add_override_variable(
|
||||||
|
key_name="subscription_name",
|
||||||
|
format_string=self.subscription_name,
|
||||||
|
sanitize=sanitize,
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def subscription_name(self) -> str:
|
||||||
|
"""
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
Name of the subscription
|
||||||
|
"""
|
||||||
|
return self._root_name
|
||||||
|
|
||||||
|
|
||||||
# Disable for proper docstring formatting
|
# Disable for proper docstring formatting
|
||||||
# pylint: disable=line-too-long
|
# pylint: disable=line-too-long
|
||||||
class Overrides(DictFormatterValidator):
|
class Overrides(OverridesVariables):
|
||||||
"""
|
"""
|
||||||
Optional. This section allows you to define variables that can be used in any string formatter.
|
Optional. This section allows you to define variables that can be used in any string formatter.
|
||||||
For example, if you want your file and thumbnail files to match without copy-pasting a large
|
For example, if you want your file and thumbnail files to match without copy-pasting a large
|
||||||
@@ -142,16 +178,6 @@ class Overrides(DictFormatterValidator):
|
|||||||
|
|
||||||
# pylint: enable=line-too-long
|
# pylint: enable=line-too-long
|
||||||
|
|
||||||
def _add_override_variable(self, key_name: str, format_string: str, sanitize: bool = False):
|
|
||||||
if sanitize:
|
|
||||||
key_name = f"{key_name}_sanitized"
|
|
||||||
format_string = sanitize_filename(format_string)
|
|
||||||
|
|
||||||
self._value[key_name] = StringFormatterValidator(
|
|
||||||
name="__should_never_fail__",
|
|
||||||
value=format_string,
|
|
||||||
)
|
|
||||||
|
|
||||||
def __init__(self, name, value):
|
def __init__(self, name, value):
|
||||||
super().__init__(name, value)
|
super().__init__(name, value)
|
||||||
|
|
||||||
|
|||||||
@@ -179,6 +179,16 @@ class DictValidator(Validator):
|
|||||||
super().__init__(name, value)
|
super().__init__(name, value)
|
||||||
self.__validator_dict: Dict[str, Validator] = {}
|
self.__validator_dict: Dict[str, Validator] = {}
|
||||||
|
|
||||||
|
@final
|
||||||
|
@property
|
||||||
|
def _root_name(self) -> str:
|
||||||
|
"""
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
"first" from the first.element.of.the.name
|
||||||
|
"""
|
||||||
|
return self._name.split(".")[0]
|
||||||
|
|
||||||
@final
|
@final
|
||||||
@property
|
@property
|
||||||
def _dict(self) -> dict:
|
def _dict(self) -> dict:
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ from conftest import preset_dict_to_dl_args
|
|||||||
from e2e.conftest import mock_run_from_cli
|
from e2e.conftest import mock_run_from_cli
|
||||||
from expected_download import assert_expected_downloads
|
from expected_download import assert_expected_downloads
|
||||||
from expected_transaction_log import assert_transaction_log_matches
|
from expected_transaction_log import assert_transaction_log_matches
|
||||||
from mergedeep import mergedeep
|
|
||||||
|
|
||||||
from ytdl_sub.subscriptions.subscription import Subscription
|
from ytdl_sub.subscriptions.subscription import Subscription
|
||||||
|
|
||||||
@@ -49,6 +48,13 @@ def single_tv_show_video_nulled_values_preset_dict(output_directory):
|
|||||||
"format": "worst[ext=mp4]",
|
"format": "worst[ext=mp4]",
|
||||||
"max_downloads": 2,
|
"max_downloads": 2,
|
||||||
},
|
},
|
||||||
|
# test override variables added by ytdl-sub
|
||||||
|
"nfo_tags": {
|
||||||
|
"tags": {
|
||||||
|
"subscription_name": "{subscription_name}",
|
||||||
|
"subscription_name_sanitized": "{subscription_name_sanitized}",
|
||||||
|
}
|
||||||
|
},
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"url": "https://www.youtube.com/@ProjectZombie603",
|
"url": "https://www.youtube.com/@ProjectZombie603",
|
||||||
"tv_show_name": "Project Zombie",
|
"tv_show_name": "Project Zombie",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"JMC/JMC - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e",
|
"JMC/JMC - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e",
|
||||||
"JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "e4eb0e33920f9b4dce1fcba0561614c9",
|
"JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "59ac500bb4778b37bd8c8fb472269e95",
|
||||||
"JMC/JMC - Oblivion Mod "Falcor" p.1.mp4": "3744c49f2e447bd7712a5aad5ed36be2",
|
"JMC/JMC - Oblivion Mod "Falcor" p.1.mp4": "3744c49f2e447bd7712a5aad5ed36be2",
|
||||||
"JMC/JMC - Oblivion Mod "Falcor" p.1.nfo": "24cc4e17d2bebc89b2759ce5471d403e"
|
"JMC/JMC - Oblivion Mod "Falcor" p.1.nfo": "24cc4e17d2bebc89b2759ce5471d403e"
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"JMC/JMC - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e",
|
"JMC/JMC - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e",
|
||||||
"JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "62101bc3899f69860004ddcfc061a28b",
|
"JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "2ad1e593fc1c50a53a107db062e82c4a",
|
||||||
"JMC/JMC - Oblivion Mod "Falcor" p.1.mp4": "3744c49f2e447bd7712a5aad5ed36be2",
|
"JMC/JMC - Oblivion Mod "Falcor" p.1.mp4": "3744c49f2e447bd7712a5aad5ed36be2",
|
||||||
"JMC/JMC - Oblivion Mod "Falcor" p.1.nfo": "24cc4e17d2bebc89b2759ce5471d403e"
|
"JMC/JMC - Oblivion Mod "Falcor" p.1.nfo": "24cc4e17d2bebc89b2759ce5471d403e"
|
||||||
}
|
}
|
||||||
@@ -43,6 +43,8 @@ Files created:
|
|||||||
|
|
||||||
This is the first time I've really used the editor, and the beginning of our first mod. Hope you enjoy.
|
This is the first time I've really used the editor, and the beginning of our first mod. Hope you enjoy.
|
||||||
season: 2010
|
season: 2010
|
||||||
|
subscription_name: tv_video_nulled_values
|
||||||
|
subscription_name_sanitized: tv_video_nulled_values
|
||||||
title: 2010-08-13 - Oblivion Mod "Falcor" p.1
|
title: 2010-08-13 - Oblivion Mod "Falcor" p.1
|
||||||
year: 2010
|
year: 2010
|
||||||
s2010.e000002 - Oblivion Mod "Falcor" p.2.mp4
|
s2010.e000002 - Oblivion Mod "Falcor" p.2.mp4
|
||||||
@@ -78,5 +80,7 @@ Files created:
|
|||||||
|
|
||||||
Please keep in mind that the mod is not complete, so you'll see some blank areas during the video. I haven't made LOD (Level of Distance) yet either, so areas far away will not appear.
|
Please keep in mind that the mod is not complete, so you'll see some blank areas during the video. I haven't made LOD (Level of Distance) yet either, so areas far away will not appear.
|
||||||
season: 2010
|
season: 2010
|
||||||
|
subscription_name: tv_video_nulled_values
|
||||||
|
subscription_name_sanitized: tv_video_nulled_values
|
||||||
title: 2010-12-02 - Oblivion Mod "Falcor" p.2
|
title: 2010-12-02 - Oblivion Mod "Falcor" p.2
|
||||||
year: 2010
|
year: 2010
|
||||||
Reference in New Issue
Block a user