From c33eed5a64bef0d26a58e115609f6250e42a777f Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Wed, 14 Sep 2022 08:36:56 -0700 Subject: [PATCH] [BUGFIX] Fix source vars containing variable-like syntax (#231) --- src/ytdl_sub/entries/base_entry.py | 7 ++++++- src/ytdl_sub/entries/variables/youtube_variables.py | 10 ++-------- tests/unit/entries/conftest.py | 6 +++--- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/ytdl_sub/entries/base_entry.py b/src/ytdl_sub/entries/base_entry.py index f1b611db..22d5fa5b 100644 --- a/src/ytdl_sub/entries/base_entry.py +++ b/src/ytdl_sub/entries/base_entry.py @@ -115,7 +115,12 @@ class BaseEntry(BaseEntryVariables, ABC): """Returns an internal kwarg value supplied from ytdl""" if not self.kwargs_contains(key): raise KeyError(f"Expected '{key}' in {self.__class__.__name__} but does not exist.") - return self._kwargs[key] + output = self._kwargs[key] + + # Replace curly braces with unicode version to avoid variable shenanigans + if isinstance(output, str): + return output.replace("{", "{").replace("}", "}") + return output def kwargs_get(self, key: str, default: Optional[Any] = None) -> Any: """ diff --git a/src/ytdl_sub/entries/variables/youtube_variables.py b/src/ytdl_sub/entries/variables/youtube_variables.py index 181c2046..616b2683 100644 --- a/src/ytdl_sub/entries/variables/youtube_variables.py +++ b/src/ytdl_sub/entries/variables/youtube_variables.py @@ -39,10 +39,7 @@ class YoutubeVideoVariables(EntryVariables): pulled via yt-dlp. Use with caution. """ # Try to get the track, fall back on title - if self.kwargs_contains("track"): - return self.kwargs("track") - - return super().title + return self.kwargs_get("track", super().title) @property def track_title_sanitized(self) -> str: @@ -64,10 +61,7 @@ class YoutubeVideoVariables(EntryVariables): NOTE: Even if a video has music metadata, this variable does not always get pulled via yt-dlp. Use with caution. """ - if self.kwargs_contains("artist"): - return self.kwargs("artist") - - return self.kwargs("channel") + return self.kwargs_get("artist", self.kwargs("channel")) @property def artist_sanitized(self) -> str: diff --git a/tests/unit/entries/conftest.py b/tests/unit/entries/conftest.py index 110f637c..6a4a5a95 100644 --- a/tests/unit/entries/conftest.py +++ b/tests/unit/entries/conftest.py @@ -16,7 +16,7 @@ def extractor(): @pytest.fixture def title(): - return "entry title" + return "entry {title}" @pytest.fixture @@ -61,8 +61,8 @@ def mock_entry_to_dict( ): return { "uid": uid, - "title": title, - "title_sanitized": title, + "title": "entry {title}", + "title_sanitized": "entry {title}", "ext": ext, "extractor": extractor, "upload_date": upload_date,