null
This commit is contained in:
parent
4a7685f284
commit
5cc09d3385
5 changed files with 30 additions and 11 deletions
|
|
@ -74,14 +74,14 @@ class _Variables:
|
||||||
return Variable("uid_sanitized_plex")
|
return Variable("uid_sanitized_plex")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def ie_key(self) -> MetadataVariable:
|
def extractor_key(self) -> MetadataVariable:
|
||||||
"""
|
"""
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
str
|
str
|
||||||
The info-extractor key
|
The info-extractor key
|
||||||
"""
|
"""
|
||||||
return MetadataVariable(metadata_key="ie_key", variable_name="ie_key")
|
return MetadataVariable(metadata_key="extractor_key", variable_name="extractor_key")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def extractor(self) -> MetadataVariable:
|
def extractor(self) -> MetadataVariable:
|
||||||
|
|
|
||||||
|
|
@ -40,11 +40,11 @@ def _get_internal(
|
||||||
# TODO: assert with good error message if key DNE
|
# TODO: assert with good error message if key DNE
|
||||||
out = f"%map_get({metadata.variable_name}, '{key.metadata_key}')"
|
out = f"%map_get({metadata.variable_name}, '{key.metadata_key}')"
|
||||||
elif isinstance(default, Variable):
|
elif isinstance(default, Variable):
|
||||||
out = f"%map_get({metadata.variable_name}, '{key.metadata_key}', {default.variable_name})"
|
out = f"%map_get_non_empty({metadata.variable_name}, '{key.metadata_key}', {default.variable_name})"
|
||||||
elif isinstance(default, str):
|
elif isinstance(default, str):
|
||||||
out = f"%map_get({metadata.variable_name}, '{key.metadata_key}', '{default}')"
|
out = f"%map_get_non_empty({metadata.variable_name}, '{key.metadata_key}', '{default}')"
|
||||||
else:
|
else:
|
||||||
out = f"%map_get({metadata.variable_name}, '{key.metadata_key}', {default})"
|
out = f"%map_get_non_empty({metadata.variable_name}, '{key.metadata_key}', {default})"
|
||||||
|
|
||||||
return f"%legacy_bracket_safety({out})"
|
return f"%legacy_bracket_safety({out})"
|
||||||
|
|
||||||
|
|
@ -107,7 +107,7 @@ ENTRY_HARDCODED_VARIABLES: Dict[Variable, str] = {
|
||||||
|
|
||||||
ENTRY_REQUIRED_VARIABLES: Dict[MetadataVariable, str] = {
|
ENTRY_REQUIRED_VARIABLES: Dict[MetadataVariable, str] = {
|
||||||
v.uid: entry_get(v.uid),
|
v.uid: entry_get(v.uid),
|
||||||
v.ie_key: entry_get(v.ie_key),
|
v.extractor_key: entry_get(v.extractor_key),
|
||||||
v.epoch: entry_get_int(v.epoch),
|
v.epoch: entry_get_int(v.epoch),
|
||||||
v.webpage_url: entry_get(v.webpage_url),
|
v.webpage_url: entry_get(v.webpage_url),
|
||||||
v.ext: entry_get(v.ext),
|
v.ext: entry_get(v.ext),
|
||||||
|
|
@ -116,7 +116,7 @@ ENTRY_REQUIRED_VARIABLES: Dict[MetadataVariable, str] = {
|
||||||
ENTRY_DEFAULT_VARIABLES: Dict[MetadataVariable, str] = {
|
ENTRY_DEFAULT_VARIABLES: Dict[MetadataVariable, str] = {
|
||||||
v.playlist_index: playlist_get_int(v.playlist_index, 1),
|
v.playlist_index: playlist_get_int(v.playlist_index, 1),
|
||||||
v.title: entry_get(v.title, v.uid),
|
v.title: entry_get(v.title, v.uid),
|
||||||
v.extractor: entry_get(v.extractor, v.ie_key),
|
v.extractor: entry_get(v.extractor, v.extractor_key),
|
||||||
v.description: entry_get(v.description, ""),
|
v.description: entry_get(v.description, ""),
|
||||||
v.uploader_id: entry_get(v.uploader_id, v.uid),
|
v.uploader_id: entry_get(v.uploader_id, v.uid),
|
||||||
v.uploader: entry_get(v.uploader, v.uploader_id),
|
v.uploader: entry_get(v.uploader, v.uploader_id),
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ from ytdl_sub.script.types.resolvable import Hashable
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
from ytdl_sub.script.types.resolvable import Integer
|
||||||
from ytdl_sub.script.types.resolvable import LambdaThree
|
from ytdl_sub.script.types.resolvable import LambdaThree
|
||||||
from ytdl_sub.script.types.resolvable import LambdaTwo
|
from ytdl_sub.script.types.resolvable import LambdaTwo
|
||||||
|
from ytdl_sub.script.types.resolvable import String
|
||||||
from ytdl_sub.script.utils.exceptions import KeyDoesNotExistRuntimeException
|
from ytdl_sub.script.utils.exceptions import KeyDoesNotExistRuntimeException
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -27,6 +28,17 @@ class MapFunctions:
|
||||||
)
|
)
|
||||||
return mapping.value[key]
|
return mapping.value[key]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def map_get_non_empty(mapping: Map, key: Hashable, default: AnyArgument) -> AnyArgument:
|
||||||
|
"""
|
||||||
|
Return ``key``'s value within the Map. If ``key`` does not exist or is an empty string,
|
||||||
|
return ``default``. Otherwise, will error.
|
||||||
|
"""
|
||||||
|
output = MapFunctions.map_get(mapping, key, default)
|
||||||
|
if isinstance(output, String) and output.value == "":
|
||||||
|
return default
|
||||||
|
return output
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def map_contains(mapping: Map, key: Hashable) -> Boolean:
|
def map_contains(mapping: Map, key: Hashable) -> Boolean:
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -113,11 +113,15 @@ def _is_breakable(char: str) -> bool:
|
||||||
|
|
||||||
|
|
||||||
def _is_boolean_true(string: Optional[str]) -> bool:
|
def _is_boolean_true(string: Optional[str]) -> bool:
|
||||||
return string == "True"
|
return string and string.lower() == "true"
|
||||||
|
|
||||||
|
|
||||||
def _is_boolean_false(string: Optional[str]) -> bool:
|
def _is_boolean_false(string: Optional[str]) -> bool:
|
||||||
return string == "False"
|
return string and string.lower() == "false"
|
||||||
|
|
||||||
|
|
||||||
|
def _is_null(string: Optional[str]) -> bool:
|
||||||
|
return string and string.lower() == "null"
|
||||||
|
|
||||||
|
|
||||||
def _is_custom_function_argument_start(char: str) -> bool:
|
def _is_custom_function_argument_start(char: str) -> bool:
|
||||||
|
|
@ -306,6 +310,9 @@ class _Parser:
|
||||||
if _is_boolean_false(self._read(increment_pos=False, length=5)):
|
if _is_boolean_false(self._read(increment_pos=False, length=5)):
|
||||||
self._pos += 5
|
self._pos += 5
|
||||||
return Boolean(value=False)
|
return Boolean(value=False)
|
||||||
|
if _is_null(self._read(increment_pos=False, length=4)):
|
||||||
|
self._pos += 4
|
||||||
|
return String(value="")
|
||||||
if _is_string_start(self._read(increment_pos=False)):
|
if _is_string_start(self._read(increment_pos=False)):
|
||||||
return self._parse_string()
|
return self._parse_string()
|
||||||
if self._read(increment_pos=False) == "[":
|
if self._read(increment_pos=False) == "[":
|
||||||
|
|
@ -528,7 +535,7 @@ class _Parser:
|
||||||
self._ast.append(self._parse_variable())
|
self._ast.append(self._parse_variable())
|
||||||
elif _is_numeric_start(ch1):
|
elif _is_numeric_start(ch1):
|
||||||
raise NUMERICS_ONLY_ARGS
|
raise NUMERICS_ONLY_ARGS
|
||||||
elif _is_string_start(ch1):
|
elif _is_string_start(ch1) or _is_null(self._read(increment_pos=False, length=4)):
|
||||||
raise STRINGS_ONLY_ARGS
|
raise STRINGS_ONLY_ARGS
|
||||||
elif _is_boolean_true(
|
elif _is_boolean_true(
|
||||||
self._read(increment_pos=False, length=4)
|
self._read(increment_pos=False, length=4)
|
||||||
|
|
|
||||||
|
|
@ -5,5 +5,5 @@ 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):
|
||||||
output = mock_entry.script.resolve().as_native()
|
output = mock_entry.script.resolve().as_native()
|
||||||
del output[VARIABLES.entry_metadata.variable_name]
|
del output[VARIABLES.entry_metadata.variable_name]
|
||||||
del output[VARIABLES.ie_key.variable_name]
|
del output[VARIABLES.extractor_key.variable_name]
|
||||||
assert output == mock_entry_to_dict
|
assert output == mock_entry_to_dict
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue