testing almost ready
This commit is contained in:
parent
c28628b10a
commit
62e47b1d43
4 changed files with 46 additions and 13 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
from yt_dlp.utils import sanitize_filename
|
from yt_dlp.utils import sanitize_filename
|
||||||
|
|
||||||
|
from ytdl_sub.script.functions import Functions
|
||||||
from ytdl_sub.script.types.map import Map
|
from ytdl_sub.script.types.map import Map
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
from ytdl_sub.script.types.resolvable import Integer
|
||||||
from ytdl_sub.script.types.resolvable import String
|
from ytdl_sub.script.types.resolvable import String
|
||||||
|
|
@ -98,3 +99,9 @@ class CustomFunctions:
|
||||||
String("day_of_year_reversed_padded"): String(_pad(day_of_year_reversed, width=3)),
|
String("day_of_year_reversed_padded"): String(_pad(day_of_year_reversed, width=3)),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def register():
|
||||||
|
Functions.register_function(CustomFunctions.sanitize)
|
||||||
|
Functions.register_function(CustomFunctions.sanitize_plex_episode)
|
||||||
|
Functions.register_function(CustomFunctions.to_date_metadata)
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ from typing import Optional
|
||||||
|
|
||||||
import mergedeep
|
import mergedeep
|
||||||
|
|
||||||
|
from ytdl_sub.entries.script.function_scripts import CustomFunctions
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES as v
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES as v
|
||||||
from ytdl_sub.entries.script.variable_definitions import DerivedMetadata
|
from ytdl_sub.entries.script.variable_definitions import DerivedMetadata
|
||||||
from ytdl_sub.entries.script.variable_definitions import Metadata
|
from ytdl_sub.entries.script.variable_definitions import Metadata
|
||||||
|
|
@ -33,7 +34,9 @@ def date_metadata(date_key: Variable, metadata_key: str) -> str:
|
||||||
# Metadata Getters
|
# Metadata Getters
|
||||||
|
|
||||||
|
|
||||||
def _get(metadata: Metadata, key: MetadataVariable, default: Optional[Variable | str | int]) -> str:
|
def _get_internal(
|
||||||
|
metadata: Metadata, key: MetadataVariable, default: Optional[Variable | str | int]
|
||||||
|
) -> str:
|
||||||
if default is None:
|
if default is None:
|
||||||
# TODO: assert with good error message if key DNE
|
# TODO: assert with good error message if key DNE
|
||||||
return f"%map_get({metadata.variable_name}, '{key.metadata_key}')"
|
return f"%map_get({metadata.variable_name}, '{key.metadata_key}')"
|
||||||
|
|
@ -48,7 +51,11 @@ def _get(metadata: Metadata, key: MetadataVariable, default: Optional[Variable |
|
||||||
def _get_int(
|
def _get_int(
|
||||||
metadata: Metadata, key: MetadataVariable, default: Optional[Variable | int] = None
|
metadata: Metadata, key: MetadataVariable, default: Optional[Variable | int] = None
|
||||||
) -> str:
|
) -> str:
|
||||||
return f"{{%int({_get(metadata=metadata, key=key, default=default)}}}"
|
return f"{{%int({_get_internal(metadata=metadata, key=key, default=default)})}}"
|
||||||
|
|
||||||
|
|
||||||
|
def _get(metadata: Metadata, key: MetadataVariable, default: Optional[Variable | str | int]) -> str:
|
||||||
|
return f"{{{_get_internal(metadata=metadata, key=key, default=default)}}}"
|
||||||
|
|
||||||
|
|
||||||
###############################################################################################
|
###############################################################################################
|
||||||
|
|
@ -56,11 +63,11 @@ def _get_int(
|
||||||
|
|
||||||
|
|
||||||
def entry_get(key: MetadataVariable, default: Optional[Variable | str | int] = None) -> str:
|
def entry_get(key: MetadataVariable, default: Optional[Variable | str | int] = None) -> str:
|
||||||
return f"{{{_get(metadata=v.entry_metadata, key=key, default=default)}}}"
|
return _get(metadata=v.entry_metadata, key=key, default=default)
|
||||||
|
|
||||||
|
|
||||||
def entry_get_int(key: MetadataVariable, default: Optional[Variable | int] = None) -> str:
|
def entry_get_int(key: MetadataVariable, default: Optional[Variable | int] = None) -> str:
|
||||||
return f"{{%int({_get_int(metadata=v.entry_metadata, key=key, default=default)}}}"
|
return _get_int(metadata=v.entry_metadata, key=key, default=default)
|
||||||
|
|
||||||
|
|
||||||
###############################################################################################
|
###############################################################################################
|
||||||
|
|
@ -68,11 +75,11 @@ def entry_get_int(key: MetadataVariable, default: Optional[Variable | int] = Non
|
||||||
|
|
||||||
|
|
||||||
def playlist_get(key: MetadataVariable, default: Optional[Variable | str | int] = None) -> str:
|
def playlist_get(key: MetadataVariable, default: Optional[Variable | str | int] = None) -> str:
|
||||||
return f"{{{_get(metadata=v.playlist_metadata, key=key, default=default)}}}"
|
return _get(metadata=v.playlist_metadata, key=key, default=default)
|
||||||
|
|
||||||
|
|
||||||
def playlist_get_int(key: MetadataVariable, default: Optional[Variable | int] = None) -> str:
|
def playlist_get_int(key: MetadataVariable, default: Optional[Variable | int] = None) -> str:
|
||||||
return f"{{%int({_get_int(metadata=v.playlist_metadata, key=key, default=default)}}}"
|
return _get_int(metadata=v.playlist_metadata, key=key, default=default)
|
||||||
|
|
||||||
|
|
||||||
###############################################################################################
|
###############################################################################################
|
||||||
|
|
@ -80,11 +87,11 @@ def playlist_get_int(key: MetadataVariable, default: Optional[Variable | int] =
|
||||||
|
|
||||||
|
|
||||||
def source_get(key: MetadataVariable, default: Optional[Variable | str | int] = None) -> str:
|
def source_get(key: MetadataVariable, default: Optional[Variable | str | int] = None) -> str:
|
||||||
return f"{{{_get(metadata=v.source_metadata, key=key, default=default)}}}"
|
return _get(metadata=v.source_metadata, key=key, default=default)
|
||||||
|
|
||||||
|
|
||||||
def source_get_int(key: MetadataVariable, default: Optional[Variable | int] = None) -> str:
|
def source_get_int(key: MetadataVariable, default: Optional[Variable | int] = None) -> str:
|
||||||
return f"{{%int({_get_int(metadata=v.source_metadata, key=key, default=default)}}}"
|
return _get_int(metadata=v.source_metadata, key=key, default=default)
|
||||||
|
|
||||||
|
|
||||||
###############################################################################################
|
###############################################################################################
|
||||||
|
|
@ -131,7 +138,7 @@ ENTRY_INJECTED_VARIABLES: Dict[MetadataVariable, str] = {
|
||||||
|
|
||||||
ENTRY_DERIVED_VARIABLES: Dict[Variable, str] = {
|
ENTRY_DERIVED_VARIABLES: Dict[Variable, str] = {
|
||||||
v.uid_sanitized: sanitized(v.uid),
|
v.uid_sanitized: sanitized(v.uid),
|
||||||
v.uid_sanitized_plex: sanitized_plex(v.uid_sanitized_plex),
|
v.uid_sanitized_plex: sanitized_plex(v.uid),
|
||||||
v.title_sanitized: sanitized(v.title),
|
v.title_sanitized: sanitized(v.title),
|
||||||
v.title_sanitized_plex: sanitized_plex(v.title),
|
v.title_sanitized_plex: sanitized_plex(v.title),
|
||||||
v.epoch_date: f"{{%datetime_strftime({v.epoch.variable_name}, '%Y%m%d')}}",
|
v.epoch_date: f"{{%datetime_strftime({v.epoch.variable_name}, '%Y%m%d')}}",
|
||||||
|
|
@ -140,7 +147,7 @@ ENTRY_DERIVED_VARIABLES: Dict[Variable, str] = {
|
||||||
v.creator_sanitized: sanitized(v.creator),
|
v.creator_sanitized: sanitized(v.creator),
|
||||||
v.download_index_padded6: pad_int(v.download_index, 6),
|
v.download_index_padded6: pad_int(v.download_index, 6),
|
||||||
v.upload_date_index_padded: pad_int(v.upload_date_index, 2),
|
v.upload_date_index_padded: pad_int(v.upload_date_index, 2),
|
||||||
v.upload_date_index_reversed: f"{{%sub(100, {v.download_index})}}",
|
v.upload_date_index_reversed: f"{{%sub(100, {v.download_index.variable_name})}}",
|
||||||
v.upload_date_index_reversed_padded: pad_int(v.upload_date_index_reversed, 2),
|
v.upload_date_index_reversed_padded: pad_int(v.upload_date_index_reversed, 2),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -203,7 +210,7 @@ PLAYLIST_INJECTED_VARIABLES: Dict[MetadataVariable, str] = {
|
||||||
|
|
||||||
PLAYLIST_DERIVED_VARIABLES: Dict[Variable, str] = {
|
PLAYLIST_DERIVED_VARIABLES: Dict[Variable, str] = {
|
||||||
v.playlist_title_sanitized: sanitized(v.playlist_title),
|
v.playlist_title_sanitized: sanitized(v.playlist_title),
|
||||||
v.playlist_index_reversed: f"{{%sub({v.playlist_count, v.playlist_index, 1})}}",
|
v.playlist_index_reversed: f"{{%sub({v.playlist_count.variable_name}, {v.playlist_index.variable_name}, 1)}}",
|
||||||
v.playlist_index_padded: pad_int(v.playlist_index, 2),
|
v.playlist_index_padded: pad_int(v.playlist_index, 2),
|
||||||
v.playlist_index_reversed_padded: pad_int(v.playlist_index_reversed, 2),
|
v.playlist_index_reversed_padded: pad_int(v.playlist_index_reversed, 2),
|
||||||
v.playlist_index_padded6: pad_int(v.playlist_index, 6),
|
v.playlist_index_padded6: pad_int(v.playlist_index, 6),
|
||||||
|
|
@ -233,6 +240,7 @@ SOURCE_DERIVED_VARIABLES: Dict[Variable, str] = {
|
||||||
_VARIABLE_SCRIPTS: Dict[Variable, str] = {}
|
_VARIABLE_SCRIPTS: Dict[Variable, str] = {}
|
||||||
mergedeep.merge(
|
mergedeep.merge(
|
||||||
_VARIABLE_SCRIPTS,
|
_VARIABLE_SCRIPTS,
|
||||||
|
ENTRY_METADATA,
|
||||||
ENTRY_HARDCODED_VARIABLES,
|
ENTRY_HARDCODED_VARIABLES,
|
||||||
ENTRY_REQUIRED_VARIABLES,
|
ENTRY_REQUIRED_VARIABLES,
|
||||||
ENTRY_DEFAULT_VARIABLES,
|
ENTRY_DEFAULT_VARIABLES,
|
||||||
|
|
@ -250,3 +258,5 @@ 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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CustomFunctions.register()
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import math
|
import math
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
|
from ytdl_sub.script.types.resolvable import AnyArgument
|
||||||
from ytdl_sub.script.types.resolvable import Boolean
|
from ytdl_sub.script.types.resolvable import Boolean
|
||||||
from ytdl_sub.script.types.resolvable import Float
|
from ytdl_sub.script.types.resolvable import Float
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
from ytdl_sub.script.types.resolvable import Integer
|
||||||
|
|
@ -16,14 +17,14 @@ def _to_numeric(value: int | float) -> Numeric:
|
||||||
|
|
||||||
class NumericFunctions:
|
class NumericFunctions:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def float(value: Union[Float, Integer, Boolean, String]) -> Float:
|
def float(value: AnyArgument) -> Float:
|
||||||
"""
|
"""
|
||||||
Cast to Float.
|
Cast to Float.
|
||||||
"""
|
"""
|
||||||
return Float(value=float(value.value))
|
return Float(value=float(value.value))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def int(value: Union[Float, Integer, Boolean, String]) -> Integer:
|
def int(value: AnyArgument) -> Integer:
|
||||||
"""
|
"""
|
||||||
Cast to Integer.
|
Cast to Integer.
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
15
tests/unit/entries/test_variable_scripts.py
Normal file
15
tests/unit/entries/test_variable_scripts.py
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
import json
|
||||||
|
from typing import Dict
|
||||||
|
|
||||||
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
||||||
|
from ytdl_sub.entries.script.variable_scripts import VARIABLE_SCRIPTS
|
||||||
|
from ytdl_sub.script.script import Script
|
||||||
|
|
||||||
|
|
||||||
|
class TestEntry(object):
|
||||||
|
def test_entry_to_dict(self, mock_entry, mock_entry_to_dict):
|
||||||
|
entry_metadata: Dict[str, str] = {
|
||||||
|
VARIABLES.entry_metadata.variable_name: f"{{{json.dumps(mock_entry._kwargs)}}}"
|
||||||
|
}
|
||||||
|
script = Script(dict(entry_metadata, **VARIABLE_SCRIPTS)).resolve()
|
||||||
|
assert script == mock_entry_to_dict
|
||||||
Loading…
Reference in a new issue