ytdl-sub/src/ytdl_sub/entries/script/variable_scripts.py
2023-12-13 14:23:04 -08:00

168 lines
6.5 KiB
Python

from typing import Dict
from typing import Optional
from ytdl_sub.entries.script.variable_definitions import KwargKey
from ytdl_sub.entries.script.variable_definitions import Variables
ENTRY_MAP_VARIABLE = "entry"
def _entry_get(key: KwargKey, default: Optional[KwargKey | str | int]) -> str:
if default is None:
# TODO: assert with good error message if key DNE
return f"%map_get({ENTRY_MAP_VARIABLE}, '{key.entry_key}')"
if isinstance(default, KwargKey):
return f"%map_get({ENTRY_MAP_VARIABLE}, '{key.entry_key}', {default.variable_name})"
if isinstance(default, str):
return f"%map_get({ENTRY_MAP_VARIABLE}, '{key.entry_key}', '{default}')"
return f"%map_get({ENTRY_MAP_VARIABLE}, '{key.entry_key}', {default})"
def entry_get(key: KwargKey, default: Optional[KwargKey | str | int] = None) -> str:
return f"{{{_entry_get(key=key, default=default)}}}"
def entry_get_int(key: KwargKey, default: Optional[KwargKey] = None) -> str:
return f"{{%int({_entry_get(key=key, default=default)}}}"
def sanitized(key: KwargKey) -> str:
return f"{{%sanitize({key.variable_name})}}"
def sanitized_plex(key: KwargKey) -> str:
return f"{{%sanitize_plex_episode({key.variable_name})}}"
def date_metadata(date_key: KwargKey, metadata_key: str) -> str:
return f"{{%map_get(%date_metadata({date_key.variable_name}), '{metadata_key}')}}"
# singleton to produce variable keys
v = Variables()
ENTRY_HARDCODED_VARIABLES: Dict[KwargKey, str] = {
v.info_json_ext: "info.json",
v.thumbnail_ext: "jpg",
}
ENTRY_REQUIRED_VARIABLES: Dict[KwargKey, str] = {
v.uid: entry_get(v.uid),
v.ie_key: entry_get(v.ie_key),
v.epoch: entry_get_int(v.epoch),
v.webpage_url: entry_get(v.webpage_url),
v.ext: entry_get(v.ext),
}
ENTRY_DEFAULT_VARIABLES: Dict[KwargKey, str] = {
v.title: entry_get(v.title, v.uid),
v.extractor: entry_get(v.extractor, v.ie_key),
v.description: entry_get(v.description, ""),
v.uploader_id: entry_get(v.uploader_id, v.uid),
v.uploader: entry_get(v.uploader, v.uploader_id),
v.uploader_url: entry_get(v.uploader_url, v.webpage_url),
}
ENTRY_DERIVED_VARIABLES: Dict[KwargKey, str] = {
v.uid_sanitized: sanitized(v.uid),
v.uid_sanitized_plex: sanitized_plex(v.uid_sanitized_plex),
v.title_sanitized: sanitized(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_hour: f"{{%datetime_strftime({v.epoch.variable_name}, '%H')}}",
v.upload_date: entry_get(v.upload_date, v.epoch_date),
v.release_date: entry_get(v.release_date, v.upload_date),
v.channel: entry_get(v.channel, v.uploader),
v.channel_sanitized: sanitized(v.channel),
v.creator: entry_get(v.creator, v.channel),
v.creator_sanitized: sanitized(v.creator),
v.channel_id: entry_get(v.channel_id, v.uploader_id),
}
ENTRY_ARCHIVE_VARIABLES: Dict[KwargKey, str] = {
# download_index
# download_index_padded6
# upload_date_index
# upload_date_index_padded
# upload_date_index_reversed
# upload_date_index_reversed_padded
}
ENTRY_UPLOAD_DATE_VARIABLES: Dict[KwargKey, str] = {
v.upload_year: date_metadata(v.upload_date, "year"),
v.upload_year_truncated: date_metadata(v.upload_date, "year_truncated"),
v.upload_year_truncated_reversed: date_metadata(v.upload_date, "year_truncated_reversed"),
v.upload_month_reversed: date_metadata(v.upload_date, "month_reversed"),
v.upload_month_reversed_padded: date_metadata(v.upload_date, "month_reversed_padded"),
v.upload_month_padded: date_metadata(v.upload_date, "month_padded"),
v.upload_day_padded: date_metadata(v.upload_date, "day_padded"),
v.upload_month: date_metadata(v.upload_date, "month"),
v.upload_day: date_metadata(v.upload_date, "day"),
v.upload_day_reversed: date_metadata(v.upload_date, "day_reversed"),
v.upload_day_reversed_padded: date_metadata(v.upload_date, "day_reversed_padded"),
v.upload_day_of_year: date_metadata(v.upload_date, "day_of_year"),
v.upload_day_of_year_padded: date_metadata(v.upload_date, "day_of_year_padded"),
v.upload_day_of_year_reversed: date_metadata(v.upload_date, "day_of_year_reversed"),
v.upload_day_of_year_reversed_padded: date_metadata(
v.upload_date, "day_of_year_reversed_padded"
),
v.upload_date_standardized: date_metadata(v.upload_date, "date_standardized"),
}
ENTRY_RELEASE_DATE_VARIABLES: Dict[KwargKey, str] = {
v.release_year: date_metadata(v.release_date, "year"),
v.release_year_truncated: date_metadata(v.release_date, "year_truncated"),
v.release_year_truncated_reversed: date_metadata(v.release_date, "year_truncated_reversed"),
v.release_month_reversed: date_metadata(v.release_date, "month_reversed"),
v.release_month_reversed_padded: date_metadata(v.release_date, "month_reversed_padded"),
v.release_month_padded: date_metadata(v.release_date, "month_padded"),
v.release_day_padded: date_metadata(v.release_date, "day_padded"),
v.release_month: date_metadata(v.release_date, "month"),
v.release_day: date_metadata(v.release_date, "day"),
v.release_day_reversed: date_metadata(v.release_date, "day_reversed"),
v.release_day_reversed_padded: date_metadata(v.release_date, "day_reversed_padded"),
v.release_day_of_year: date_metadata(v.release_date, "day_of_year"),
v.release_day_of_year_padded: date_metadata(v.release_date, "day_of_year_padded"),
v.release_day_of_year_reversed: date_metadata(v.release_date, "day_of_year_reversed"),
v.release_day_of_year_reversed_padded: date_metadata(
v.release_date, "day_of_year_reversed_padded"
),
v.release_date_standardized: date_metadata(v.release_date, "date_standardized"),
}
ENTRY_SOURCE_VARIABLES: Dict[KwargKey, str] = {
# source_title
# source_title_sanitized
# source_uid
# source_index
# source_index_padded
# source_count
# source_webpage_url
# source_description
# source_uploader_id
# source_uploader
# source_uploader_url
}
ENTRY_PLAYLIST_VARIABLES: Dict[KwargKey, str] = {
# playlist_uid
# playlist_title
# playlist_title_sanitized
# playlist_index
# playlist_index_reversed
# playlist_index_padded
# playlist_index_reversed_padded
# playlist_index_padded6
# playlist_index_reversed_padded6
# playlist_count
# playlist_description
# playlist_webpage_url
# playlist_max_upload_year
# playlist_max_upload_year_truncated
# playlist_uploader_id
# playlist_uploader
# playlist_uploader_sanitized
# playlist_uploader_url
}