diff --git a/src/ytdl_sub/downloaders/url/validators.py b/src/ytdl_sub/downloaders/url/validators.py index 0185e300..97a7645e 100644 --- a/src/ytdl_sub/downloaders/url/validators.py +++ b/src/ytdl_sub/downloaders/url/validators.py @@ -268,8 +268,8 @@ class MultiUrlValidator(OptionsValidator): for idx, url_validator in enumerate(self.urls.list) } output = script.resolve_once(url_variables) - for out in output: + for out in output.values(): has_non_empty_url |= bool(str(out)) - if not has_non_empty_url: + if not output or not has_non_empty_url: raise self._validation_exception("Must contain at least one url that is non-empty") diff --git a/src/ytdl_sub/entries/entry.py b/src/ytdl_sub/entries/entry.py index a0f55629..f52050ec 100644 --- a/src/ytdl_sub/entries/entry.py +++ b/src/ytdl_sub/entries/entry.py @@ -34,6 +34,9 @@ class Entry(BaseEntry, Scriptable): def get(self, variable: Variable) -> str: return self.script.resolve(unresolvable=self.unresolvable).get_str(variable.variable_name) + def get_int(self, variable: Variable) -> int: + return self.script.resolve(unresolvable=self.unresolvable).get_int(variable.variable_name) + @property def ext(self) -> str: """ diff --git a/src/ytdl_sub/script/script_output.py b/src/ytdl_sub/script/script_output.py index 834c9044..1ca3f47b 100644 --- a/src/ytdl_sub/script/script_output.py +++ b/src/ytdl_sub/script/script_output.py @@ -23,3 +23,8 @@ class ScriptOutput: def get_str(self, name: str) -> str: return str(self.output[name]) + + def get_int(self, name: str) -> int: + out = self.get_native(name) + assert isinstance(out, int) + return out diff --git a/tests/unit/entries/conftest.py b/tests/unit/entries/conftest.py index 6fdf8e62..a6b0e616 100644 --- a/tests/unit/entries/conftest.py +++ b/tests/unit/entries/conftest.py @@ -75,6 +75,7 @@ def mock_entry_to_dict( "channel_sanitized": "abc123", "channel_id": uid, "extractor": extractor, + "extractor_key": "test_extractor_key", "uploader": "abc123", "uploader_id": "abc123", "uploader_url": "https://yourname.here", @@ -162,8 +163,8 @@ def mock_entry_kwargs( return { "id": uid, "epoch": 1596878400, - "ie_key": "test_ie_key", "extractor": extractor, + "extractor_key": "test_extractor_key", "title": title, "ext": ext, "upload_date": upload_date, @@ -174,20 +175,6 @@ def mock_entry_kwargs( @pytest.fixture def mock_entry(mock_entry_kwargs): - return Entry(entry_dict=mock_entry_kwargs, working_directory=".") - - -@pytest.fixture -def validate_entry_dict_contains_valid_formatters(): - def _validate_entry_dict_contains_valid_formatters(entry: Entry): - for key, value in entry.to_dict().items(): - expected_string = f"test {value} formatting works" - formatter = StringFormatterValidator( - name="test", value=f"test {{{key}}} formatting works" - ) - - assert formatter.apply_formatter(entry.to_dict()) == expected_string - - return True - - return _validate_entry_dict_contains_valid_formatters + return Entry(entry_dict=mock_entry_kwargs, working_directory=".").initialize_script( + override_variables={} + ) diff --git a/tests/unit/entries/test_entry.py b/tests/unit/entries/test_entry.py index 4885420d..be21ebd3 100644 --- a/tests/unit/entries/test_entry.py +++ b/tests/unit/entries/test_entry.py @@ -1,14 +1,14 @@ import pytest +from ytdl_sub.entries.entry import Entry +from ytdl_sub.entries.script.variable_definitions import VARIABLES as v + class TestEntry(object): def test_entry_to_dict(self, mock_entry, mock_entry_to_dict): - assert mock_entry.to_dict() == mock_entry_to_dict - - def test_entry_dict_contains_valid_formatters( - self, mock_entry, validate_entry_dict_contains_valid_formatters - ): - assert validate_entry_dict_contains_valid_formatters(mock_entry) + out = mock_entry.to_dict() + del out["entry_metadata"] + assert out == mock_entry_to_dict def test_entry_missing_kwarg(self, mock_entry): key = "dne" @@ -26,16 +26,25 @@ class TestEntry(object): ], ) def test_entry_reverse_variables( - self, mock_entry, upload_date, year_rev, month_rev, day_rev, month_rev_pad, day_rev_pad + self, + mock_entry_kwargs, + upload_date, + year_rev, + month_rev, + day_rev, + month_rev_pad, + day_rev_pad, ): - mock_entry._kwargs["upload_date"] = upload_date - assert mock_entry.upload_year_truncated_reversed == year_rev - assert mock_entry.upload_month_reversed == month_rev - assert mock_entry.upload_day_reversed == day_rev - - assert mock_entry.upload_month_reversed_padded == month_rev_pad - assert mock_entry.upload_day_reversed_padded == day_rev_pad + mock_entry_kwargs["upload_date"] = upload_date + entry = Entry(entry_dict=mock_entry_kwargs, working_directory=".").initialize_script( + override_variables={} + ) + assert entry.get_int(v.upload_year_truncated_reversed) == year_rev + assert entry.get_int(v.upload_month_reversed) == month_rev + assert entry.get_int(v.upload_day_reversed) == day_rev + assert entry.get(v.upload_month_reversed_padded) == month_rev_pad + assert entry.get(v.upload_day_reversed_padded) == day_rev_pad @pytest.mark.parametrize( "upload_date, day_year, day_year_rev, day_year_pad, day_year_rev_pad", @@ -45,11 +54,14 @@ class TestEntry(object): ], ) def test_entry_upload_day_of_year_variables( - self, mock_entry, upload_date, day_year, day_year_rev, day_year_pad, day_year_rev_pad + self, mock_entry_kwargs, upload_date, day_year, day_year_rev, day_year_pad, day_year_rev_pad ): - mock_entry._kwargs["upload_date"] = upload_date + mock_entry_kwargs["upload_date"] = upload_date + entry = Entry(entry_dict=mock_entry_kwargs, working_directory=".").initialize_script( + override_variables={} + ) - assert mock_entry.upload_day_of_year == day_year - assert mock_entry.upload_day_of_year_reversed == day_year_rev - assert mock_entry.upload_day_of_year_padded == day_year_pad - assert mock_entry.upload_day_of_year_reversed_padded == day_year_rev_pad + assert entry.get_int(v.upload_day_of_year) == day_year + assert entry.get_int(v.upload_day_of_year_reversed) == day_year_rev + assert entry.get(v.upload_day_of_year_padded) == day_year_pad + assert entry.get(v.upload_day_of_year_reversed_padded) == day_year_rev_pad diff --git a/tests/unit/entries/test_variable_scripts.py b/tests/unit/entries/test_variable_scripts.py index 955dd5aa..c621bfb6 100644 --- a/tests/unit/entries/test_variable_scripts.py +++ b/tests/unit/entries/test_variable_scripts.py @@ -5,5 +5,4 @@ class TestEntry(object): def test_entry_to_dict(self, mock_entry, mock_entry_to_dict): output = mock_entry.script.resolve().as_native() del output[VARIABLES.entry_metadata.variable_name] - del output[VARIABLES.extractor_key.variable_name] assert output == mock_entry_to_dict