Skip to content

Commit

Permalink
Fix passing arguments to yt-dlp. (#2250)
Browse files Browse the repository at this point in the history
As mentioned in yt-dlp/yt-dlp#10196,
`yt_dlp.parse_options` should be used for parsing command line flags.

However, as this API doesn't take in a set of configured options, the
defaults handling is a little bit messier. Basically checks for any
non-default values after parsing the command line flags, and skips
setting them from the `defaults` dictionary.

This fixes #2242.

# Title
<!--- Provide a general summary of your changes in the Title above -->

## Description
<!--- Describe your changes in detail -->

## Related Issue
<!--- This project only accepts pull requests related to open issues -->
<!--- If suggesting a new feature or change, please discuss it in an
issue first -->
<!--- If fixing a bug, there should be an issue describing it with steps
to reproduce -->
<!--- Please link to the issue here: -->

## Motivation and Context
<!--- Why is this change required? What problem does it solve? -->

## How Has This Been Tested?
<!--- Please describe in detail how you tested your changes. -->
<!--- Include details of your testing environment, and the tests you ran
to -->
<!--- see how your change affects other areas of the code, etc. -->

## Screenshots (if appropriate)

## Types of Changes
<!--- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)

## Checklist
<!--- Go over all the following points, and put an `x` in all the boxes
that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
- [ ] My code follows the code style of this project
- [ ] My change requires a change to the documentation
- [ ] I have updated the documentation accordingly
- [ ] I have read the [CONTRIBUTING](/docs/CONTRIBUTING.md) document
- [ ] I have read the  [CORE VALUES](/docs/CORE_VALUES.md) document
- [ ] I have added tests to cover my changes
- [ ] All new and existing tests passed
  • Loading branch information
Silverarmor authored Jan 16, 2025
2 parents 8273124 + b8f4e4e commit d81c601
Showing 1 changed file with 14 additions and 5 deletions.
19 changes: 14 additions & 5 deletions spotdl/utils/formatter.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@
import pykakasi
from rapidfuzz import fuzz
from slugify import slugify as py_slugify
from yt_dlp.options import create_parser
from yt_dlp.options import optparse as yt_dlp_optparse
from yt_dlp import parse_options
from yt_dlp.utils import sanitize_filename

from spotdl.types.song import Song
Expand Down Expand Up @@ -70,7 +69,6 @@
)

DISALLOWED_REGEX = re.compile(r"[^-a-zA-Z0-9\!\@\$]+")
YT_DLP_PARSER = create_parser()

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -622,6 +620,17 @@ def args_to_ytdlp_options(
- the dictionary of options
"""

new_args = YT_DLP_PARSER.parse_args(argument_list, yt_dlp_optparse.Values(defaults))
parsed_options = parse_options(argument_list).ydl_opts

return vars(new_args[0])
if defaults is None:
return parsed_options

default_options = parse_options([]).ydl_opts

for key, value in defaults.items():
if key not in parsed_options:
parsed_options[key] = value
elif parsed_options[key] == default_options[key]:
parsed_options[key] = value

return parsed_options

0 comments on commit d81c601

Please sign in to comment.