getting into real world

This commit is contained in:
Jesse Bannon 2023-12-09 01:18:40 -08:00
parent 1d465a7d69
commit a4920c03c3
7 changed files with 37 additions and 11 deletions

View file

@ -109,7 +109,10 @@ class InfoJsonDownloader(SourcePlugin[InfoJsonDownloaderOptions]):
prior_variables = entry.kwargs(YTDL_SUB_ENTRY_VARIABLES_KWARG_KEY) prior_variables = entry.kwargs(YTDL_SUB_ENTRY_VARIABLES_KWARG_KEY)
del entry._kwargs[YTDL_SUB_ENTRY_VARIABLES_KWARG_KEY] del entry._kwargs[YTDL_SUB_ENTRY_VARIABLES_KWARG_KEY]
entry.initialize_script(override_variables=self.overrides.dict_with_format_strings).add( entry.initialize_script(
override_variables=self.overrides.dict_with_format_strings,
unresolvable=self.overrides.unresolvable,
).add(
{ {
inj.variable_name: prior_variables.get( inj.variable_name: prior_variables.get(
inj.variable_name, inj.variable_name,

View file

@ -460,7 +460,8 @@ class MultiUrlDownloader(SourcePlugin[MultiUrlValidator]):
url_validator=collection_url, parents=parents, orphans=orphan_entries url_validator=collection_url, parents=parents, orphans=orphan_entries
): ):
entry.initialize_script( entry.initialize_script(
override_variables=self.overrides.dict_with_format_strings override_variables=self.overrides.dict_with_format_strings,
unresolvable=self.overrides.unresolvable,
).add( ).add(
{ {
v.ytdl_sub_input_url.variable_name: self.overrides.apply_formatter( v.ytdl_sub_input_url.variable_name: self.overrides.apply_formatter(

View file

@ -4,6 +4,7 @@ import os
from pathlib import Path from pathlib import Path
from typing import Dict from typing import Dict
from typing import Optional from typing import Optional
from typing import Set
from typing import Type from typing import Type
from typing import TypeVar from typing import TypeVar
from typing import final from typing import final
@ -29,8 +30,26 @@ class Entry(BaseEntry, Scriptable):
BaseEntry.__init__(self, entry_dict=entry_dict, working_directory=working_directory) BaseEntry.__init__(self, entry_dict=entry_dict, working_directory=working_directory)
Scriptable.__init__(self) Scriptable.__init__(self)
def initialize_script(self, override_variables: Dict[str, str]) -> "Entry": def initialize_script(
self, override_variables: Dict[str, str], unresolvable: Set[str]
) -> "Entry":
# TODO: CLEAN THIS SHIT UP
# Overrides contains added variables that are unresolvable, add them here
self.unresolvable |= unresolvable
# Remove the entry variable
self.unresolvable.remove(VARIABLES.entry_metadata.variable_name)
# Add entry metadata, but avoid the `.add()` helper since it also adds sanitized
self.script.add({VARIABLES.entry_metadata.variable_name: f"{{{json.dumps(self._kwargs)}}}"}) self.script.add({VARIABLES.entry_metadata.variable_name: f"{{{json.dumps(self._kwargs)}}}"})
self.script.add(
{
unresolved: f"{{%throw('Variable {unresolved} has not been resolved yet')}}"
for unresolved in self.unresolvable
}
)
# use .add here to get sanitized
self.add(override_variables) self.add(override_variables)
self.update_script() self.update_script()
return self return self

View file

@ -354,14 +354,16 @@ class Script:
pre_resolved=resolved, unresolvable=unresolvable, update=update, output_filter=None pre_resolved=resolved, unresolvable=unresolvable, update=update, output_filter=None
) )
def add(self, variables: Dict[str, str]) -> "Script": def add(self, variables: Dict[str, str], unresolvable: Optional[Set[str]] = None) -> "Script":
added_variables_to_validate: Set[str] = set() added_variables_to_validate: Set[str] = set()
for variable_name, variable_definition in variables.items(): for variable_name, variable_definition in variables.items():
self._variables[variable_name] = parse( self._variables[variable_name] = parse(
text=variable_definition, text=variable_definition,
name=variable_name, name=variable_name,
custom_function_names=set(self._functions.keys()), custom_function_names=set(self._functions.keys()),
variable_names=set(self._variables.keys()).union(variables.keys()), variable_names=set(self._variables.keys())
.union(variables.keys())
.union(unresolvable or set()),
) )
if self._variables[variable_name].maybe_resolvable is None: if self._variables[variable_name].maybe_resolvable is None:

View file

@ -19,11 +19,11 @@ class Scriptable(ABC):
self.script.resolve(unresolvable=self.unresolvable, update=True) self.script.resolve(unresolvable=self.unresolvable, update=True)
def add(self, values: Dict[str, Any]) -> None: def add(self, values: Dict[str, Any]) -> None:
self.unresolvable -= set(list(values.keys()))
self.script.add( self.script.add(
ScriptUtils.add_sanitized_variables( ScriptUtils.add_sanitized_variables(
{name: ScriptUtils.to_script(value) for name, value in values.items()} {name: ScriptUtils.to_script(value) for name, value in values.items()}
),
unresolvable=self.unresolvable,
) )
)
self.unresolvable -= set(list(values.keys()))
self.update_script() self.update_script()

View file

@ -179,5 +179,6 @@ def mock_entry_kwargs(
@pytest.fixture @pytest.fixture
def mock_entry(mock_entry_kwargs): def mock_entry(mock_entry_kwargs):
return Entry(entry_dict=mock_entry_kwargs, working_directory=".").initialize_script( return Entry(entry_dict=mock_entry_kwargs, working_directory=".").initialize_script(
override_variables={} override_variables={},
unresolvable=set(),
) )

View file

@ -38,7 +38,7 @@ class TestEntry(object):
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( entry = Entry(entry_dict=mock_entry_kwargs, working_directory=".").initialize_script(
override_variables={} override_variables={}, unresolvable=set()
) )
assert entry.get_int(v.upload_year_truncated_reversed) == year_rev 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_month_reversed) == month_rev
@ -58,7 +58,7 @@ class TestEntry(object):
): ):
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( entry = Entry(entry_dict=mock_entry_kwargs, working_directory=".").initialize_script(
override_variables={} override_variables={}, unresolvable=set()
) )
assert entry.get_int(v.upload_day_of_year) == day_year assert entry.get_int(v.upload_day_of_year) == day_year