testing almost ready

This commit is contained in:
Jesse Bannon 2023-12-06 17:21:20 -08:00
parent c28628b10a
commit 62e47b1d43
4 changed files with 46 additions and 13 deletions

View file

@ -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)

View file

@ -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()

View file

@ -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.
""" """

View 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