42 lines
1 KiB
Python
42 lines
1 KiB
Python
from typing import Dict
|
|
from typing import Optional
|
|
|
|
from ytdl_sub.config.plugin.plugin import Plugin
|
|
from ytdl_sub.config.validators.options import OptionsValidator
|
|
from ytdl_sub.validators.validators import StringValidator
|
|
|
|
|
|
class FormatOptions(OptionsValidator):
|
|
"""
|
|
Set ``--format`` to pass into yt-dlp to download a specific format quality.
|
|
Uses the same syntax as yt-dlp.
|
|
|
|
Usage:
|
|
|
|
.. code-block:: yaml
|
|
|
|
format: "(bv*[height<=1080]+bestaudio/best[height<=1080])"
|
|
"""
|
|
|
|
def __init__(self, name, value):
|
|
super().__init__(name, value)
|
|
self._format = StringValidator(name=name, value=value).value
|
|
|
|
@property
|
|
def format(self) -> str:
|
|
"""
|
|
yt-dlp format, uses same syntax as yt-dlp.
|
|
"""
|
|
return self._format
|
|
|
|
|
|
class FormatPlugin(Plugin[FormatOptions]):
|
|
plugin_options_type = FormatOptions
|
|
|
|
def ytdl_options(self) -> Optional[Dict]:
|
|
"""
|
|
Returns
|
|
-------
|
|
yt-dlp format
|
|
"""
|
|
return {"format": self.plugin_options.format}
|