clean entry
This commit is contained in:
parent
148e73fdde
commit
3cc2d0755d
8 changed files with 38 additions and 43 deletions
|
|
@ -109,10 +109,7 @@ 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(
|
entry.initialize_script(self.overrides).add(
|
||||||
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,
|
||||||
|
|
|
||||||
|
|
@ -459,10 +459,7 @@ class MultiUrlDownloader(SourcePlugin[MultiUrlValidator]):
|
||||||
for entry in self._iterate_entries(
|
for entry in self._iterate_entries(
|
||||||
url_validator=collection_url, parents=parents, orphans=orphan_entries
|
url_validator=collection_url, parents=parents, orphans=orphan_entries
|
||||||
):
|
):
|
||||||
entry.initialize_script(
|
entry.initialize_script(self.overrides).add(
|
||||||
override_variables=self.overrides.dict_with_format_strings,
|
|
||||||
unresolvable=self.overrides.unresolvable,
|
|
||||||
).add(
|
|
||||||
{
|
{
|
||||||
v.ytdl_sub_input_url.variable_name: self.overrides.apply_formatter(
|
v.ytdl_sub_input_url.variable_name: self.overrides.apply_formatter(
|
||||||
collection_url.url
|
collection_url.url
|
||||||
|
|
|
||||||
|
|
@ -30,28 +30,20 @@ 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(
|
def _add_entry_kwargs_to_script(self) -> None:
|
||||||
self, override_variables: Dict[str, str], unresolvable: Set[str]
|
# Add entry metadata, but avoid the `.add()` helper since it also adds sanitized
|
||||||
) -> "Entry":
|
self.unresolvable.remove(VARIABLES.entry_metadata.variable_name)
|
||||||
|
self.script.add({VARIABLES.entry_metadata.variable_name: f"{{{json.dumps(self._kwargs)}}}"})
|
||||||
|
self.update_script()
|
||||||
|
|
||||||
|
def initialize_script(self, other: Optional[Scriptable] = None) -> "Entry":
|
||||||
# TODO: CLEAN THIS SHIT UP
|
# TODO: CLEAN THIS SHIT UP
|
||||||
# Overrides contains added variables that are unresolvable, add them here
|
# Overrides contains added variables that are unresolvable, add them here
|
||||||
self.unresolvable |= unresolvable
|
if other:
|
||||||
|
self.script = copy.deepcopy(other.script)
|
||||||
|
self.unresolvable = copy.deepcopy(other.unresolvable)
|
||||||
|
|
||||||
# Remove the entry variable
|
self._add_entry_kwargs_to_script()
|
||||||
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(
|
|
||||||
{
|
|
||||||
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.update_script()
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def get(self, variable: Variable, expected_type: Type[TType]) -> TType:
|
def get(self, variable: Variable, expected_type: Type[TType]) -> TType:
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ class EntryParent(BaseEntry):
|
||||||
parents = [self]
|
parents = [self]
|
||||||
|
|
||||||
kwargs_to_add: Dict[str, Any] = {
|
kwargs_to_add: Dict[str, Any] = {
|
||||||
v.sibling_entry_metadata.metadata_key: self._sibling_entry_metadata()
|
v.sibling_metadata.metadata_key: self._sibling_entry_metadata()
|
||||||
}
|
}
|
||||||
if len(parents) >= 1:
|
if len(parents) >= 1:
|
||||||
kwargs_to_add[v.playlist_metadata.metadata_key] = parents[-1]._kwargs
|
kwargs_to_add[v.playlist_metadata.metadata_key] = parents[-1]._kwargs
|
||||||
|
|
|
||||||
|
|
@ -56,8 +56,8 @@ class _Variables:
|
||||||
return RelativeMetadata("source_metadata", metadata_key="source_metadata")
|
return RelativeMetadata("source_metadata", metadata_key="source_metadata")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def sibling_entry_metadata(self) -> SiblingMetadata:
|
def sibling_metadata(self) -> SiblingMetadata:
|
||||||
return SiblingMetadata("sibling_entry_metadata", metadata_key="sibling_entry_metadata")
|
return SiblingMetadata("sibling_metadata", metadata_key="sibling_metadata")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def uid(self) -> MetadataVariable:
|
def uid(self) -> MetadataVariable:
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,7 @@ ENTRY_HARDCODED_VARIABLES: Dict[Variable, str] = {
|
||||||
ENTRY_RELATIVE_VARIABLES: Dict[MetadataVariable, str] = {
|
ENTRY_RELATIVE_VARIABLES: Dict[MetadataVariable, str] = {
|
||||||
v.playlist_metadata: entry_get(v.playlist_metadata, {}),
|
v.playlist_metadata: entry_get(v.playlist_metadata, {}),
|
||||||
v.source_metadata: entry_get(v.source_metadata, {}),
|
v.source_metadata: entry_get(v.source_metadata, {}),
|
||||||
v.sibling_entry_metadata: entry_get(v.sibling_entry_metadata, "{ [] }"),
|
v.sibling_metadata: entry_get(v.sibling_metadata, []),
|
||||||
}
|
}
|
||||||
|
|
||||||
ENTRY_REQUIRED_VARIABLES: Dict[MetadataVariable, str] = {
|
ENTRY_REQUIRED_VARIABLES: Dict[MetadataVariable, str] = {
|
||||||
|
|
@ -279,6 +279,18 @@ mergedeep.merge(
|
||||||
VARIABLE_SCRIPTS: Dict[str, str] = {
|
VARIABLE_SCRIPTS: Dict[str, str] = {
|
||||||
var.variable_name: script for var, script in _VARIABLE_SCRIPTS.items()
|
var.variable_name: script for var, script in _VARIABLE_SCRIPTS.items()
|
||||||
}
|
}
|
||||||
UNRESOLVED_VARIABLES: Set[str] = {var.variable_name for var in ENTRY_INJECTED_VARIABLES}
|
|
||||||
|
|
||||||
|
def _keys(*variables: Dict[Variable, str]) -> Set[str]:
|
||||||
|
keys: Set[str] = set()
|
||||||
|
for variable_set in variables:
|
||||||
|
keys.update(set(var.variable_name for var in variable_set.keys()))
|
||||||
|
return keys
|
||||||
|
|
||||||
|
|
||||||
|
UNRESOLVED_VARIABLES: Set[str] = _keys(
|
||||||
|
ENTRY_EMPTY_METADATA,
|
||||||
|
ENTRY_INJECTED_VARIABLES,
|
||||||
|
)
|
||||||
|
|
||||||
CustomFunctions.register()
|
CustomFunctions.register()
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,4 @@ 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={},
|
|
||||||
unresolvable=set(),
|
|
||||||
)
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,11 @@ from ytdl_sub.entries.script.variable_definitions import VARIABLES as v
|
||||||
class TestEntry(object):
|
class TestEntry(object):
|
||||||
def test_entry_to_dict(self, mock_entry, mock_entry_to_dict):
|
def test_entry_to_dict(self, mock_entry, mock_entry_to_dict):
|
||||||
out = mock_entry.to_dict()
|
out = mock_entry.to_dict()
|
||||||
del out["entry_metadata"]
|
del out[v.entry_metadata.variable_name]
|
||||||
|
del out[v.ytdl_sub_input_url.variable_name]
|
||||||
|
del out[v.playlist_metadata.variable_name]
|
||||||
|
del out[v.source_metadata.variable_name]
|
||||||
|
del out[v.sibling_metadata.variable_name]
|
||||||
assert out == mock_entry_to_dict
|
assert out == mock_entry_to_dict
|
||||||
|
|
||||||
def test_entry_missing_kwarg(self, mock_entry):
|
def test_entry_missing_kwarg(self, mock_entry):
|
||||||
|
|
@ -37,9 +41,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={}, 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
|
||||||
assert entry.get_int(v.upload_day_reversed) == day_rev
|
assert entry.get_int(v.upload_day_reversed) == day_rev
|
||||||
|
|
@ -57,9 +59,7 @@ class TestEntry(object):
|
||||||
self, mock_entry_kwargs, 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(
|
entry = Entry(entry_dict=mock_entry_kwargs, working_directory=".").initialize_script()
|
||||||
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
|
||||||
assert entry.get_int(v.upload_day_of_year_reversed) == day_year_rev
|
assert entry.get_int(v.upload_day_of_year_reversed) == day_year_rev
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue