A complete gutting of the internals of ytdl-sub to support functions in our variable syntax, in addition to being able to access a yt-dlp entry's .info.json fields using functions. Functionally, ytdl-sub should still look and behave the same from a user-perspective. With so many lines of code changed (+8927, -2708), no doubt there will be new issues. Please make a GH issue or reach out on Discord if your config/subscriptions break in any way/shape/form. Details on how to use function support will come soon in the form of proper documentation in our readthedocs.
59 lines
1.5 KiB
Python
59 lines
1.5 KiB
Python
import copy
|
|
from typing import Dict
|
|
from typing import Optional
|
|
|
|
import mergedeep
|
|
|
|
|
|
class YTDLOptionsBuilder:
|
|
"""
|
|
A class to track any modifications made to ytdl options
|
|
"""
|
|
|
|
def __init__(self):
|
|
self._ytdl_options: Dict = {}
|
|
|
|
def add(
|
|
self,
|
|
*ytdl_option_dicts: Optional[Dict],
|
|
before: bool = False,
|
|
strategy: mergedeep.Strategy = mergedeep.Strategy.TYPESAFE_ADDITIVE,
|
|
) -> "YTDLOptionsBuilder":
|
|
"""
|
|
Parameters
|
|
----------
|
|
*ytdl_option_dicts
|
|
One or many ytdl_option dicts. Can also contain None's for convenience
|
|
before
|
|
Optional. Whether to add these dicts before or after the original
|
|
strategy
|
|
Optional. mergedeep strategy. Defaults to TYPESAFE_ADDITIVE
|
|
|
|
Returns
|
|
-------
|
|
instance with the added ytdl_option dict(s)
|
|
"""
|
|
non_empty = [ytdl_options for ytdl_options in ytdl_option_dicts if ytdl_options is not None]
|
|
|
|
if before:
|
|
non_empty.append(self.to_dict())
|
|
self._ytdl_options = {}
|
|
|
|
mergedeep.merge(self._ytdl_options, *non_empty, strategy=strategy)
|
|
return self
|
|
|
|
def clone(self) -> "YTDLOptionsBuilder":
|
|
"""
|
|
Returns
|
|
-------
|
|
Deep-copied instance
|
|
"""
|
|
return copy.deepcopy(self)
|
|
|
|
def to_dict(self) -> Dict:
|
|
"""
|
|
Returns
|
|
-------
|
|
Deep-copied dict of the current builder state
|
|
"""
|
|
return copy.deepcopy(self._ytdl_options)
|