mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-08-15 19:14:01 +08:00
166 lines
6.4 KiB
Python
166 lines
6.4 KiB
Python
"""为插件保留历史 StringUtils 类的轻量兼容门面。"""
|
|
|
|
from functools import wraps
|
|
from inspect import signature
|
|
from typing import Callable
|
|
|
|
from app.domain.episode import compact_numbers, format_ranges
|
|
from app.domain.site import extract_domain, urls_match
|
|
from app.domain.title import is_media_title_like, parse_search_keyword
|
|
from app.domain.torrent import is_magnet_link
|
|
from app.foundation.crypto import HashUtils
|
|
from app.foundation.dom import DomUtils
|
|
from app.foundation.size import format_compact_size, format_size, parse_size
|
|
from app.foundation.temporal import (
|
|
format_approx_duration,
|
|
format_duration,
|
|
format_minutes,
|
|
format_remaining,
|
|
format_timestamp,
|
|
normalize_datetime,
|
|
parse_datetime,
|
|
parse_timestamp,
|
|
)
|
|
from app.foundation.text import (
|
|
common_prefix,
|
|
contains_chinese,
|
|
contains_japanese,
|
|
contains_korean,
|
|
cookiejar_to_string,
|
|
count_words,
|
|
escape_markdown,
|
|
extract_named_ids,
|
|
format_amount,
|
|
is_all_chinese,
|
|
is_english_word,
|
|
is_number,
|
|
natural_sort_key,
|
|
normalize_upper,
|
|
parse_bool,
|
|
parse_float,
|
|
parse_int,
|
|
random_string,
|
|
remove_punctuation,
|
|
sanitize_filename,
|
|
split_by_bytes,
|
|
strip_optional,
|
|
title_case,
|
|
)
|
|
from app.foundation.url import (
|
|
base_url,
|
|
host_label,
|
|
is_link,
|
|
parse_address,
|
|
second_level_label,
|
|
split_netloc,
|
|
)
|
|
from app.foundation.version import compare_version
|
|
|
|
|
|
def _legacy_alias(function: Callable, **keyword_aliases: str) -> Callable:
|
|
"""创建支持旧关键字名称的静态方法转发器。"""
|
|
|
|
@wraps(function)
|
|
def call(*args, **kwargs):
|
|
"""把旧关键字转换为 canonical 参数后调用真实实现。"""
|
|
for legacy_name, canonical_name in keyword_aliases.items():
|
|
if legacy_name in kwargs:
|
|
kwargs[canonical_name] = kwargs.pop(legacy_name)
|
|
return function(*args, **kwargs)
|
|
|
|
canonical_to_legacy = {
|
|
canonical_name: legacy_name
|
|
for legacy_name, canonical_name in keyword_aliases.items()
|
|
}
|
|
call.__signature__ = signature(function).replace(
|
|
parameters=[
|
|
parameter.replace(
|
|
name=canonical_to_legacy.get(parameter.name, parameter.name)
|
|
)
|
|
for parameter in signature(function).parameters.values()
|
|
]
|
|
)
|
|
return call
|
|
|
|
|
|
def _legacy_md5_hash(data) -> str:
|
|
"""保持 StringUtils.md5_hash 对空值和对象文本化的历史语义。"""
|
|
if not data:
|
|
return ""
|
|
return HashUtils.md5(str(data))
|
|
|
|
|
|
class StringUtils:
|
|
"""组合已拆分实现,保持插件使用的历史静态方法接口。"""
|
|
|
|
num_filesize = staticmethod(parse_size)
|
|
str_timelong = staticmethod(_legacy_alias(format_approx_duration, time_sec="seconds"))
|
|
str_secends = staticmethod(_legacy_alias(format_duration, time_sec="seconds"))
|
|
is_chinese = staticmethod(_legacy_alias(contains_chinese, word="value"))
|
|
is_japanese = staticmethod(_legacy_alias(contains_japanese, word="value"))
|
|
is_korean = staticmethod(_legacy_alias(contains_korean, word="value"))
|
|
is_all_chinese = staticmethod(_legacy_alias(is_all_chinese, word="value"))
|
|
is_english_word = staticmethod(_legacy_alias(is_english_word, word="value"))
|
|
str_int = staticmethod(_legacy_alias(parse_int, text="value"))
|
|
str_float = staticmethod(_legacy_alias(parse_float, text="value"))
|
|
clear = staticmethod(
|
|
_legacy_alias(
|
|
remove_punctuation,
|
|
text="value",
|
|
replace_word="replacement",
|
|
)
|
|
)
|
|
clear_upper = staticmethod(_legacy_alias(normalize_upper, text="value"))
|
|
str_filesize = staticmethod(_legacy_alias(format_compact_size, pre="precision"))
|
|
format_size = staticmethod(format_size)
|
|
url_equal = staticmethod(_legacy_alias(urls_match, url1="first", url2="second"))
|
|
get_url_netloc = staticmethod(split_netloc)
|
|
get_url_domain = staticmethod(extract_domain)
|
|
get_url_sld = staticmethod(second_level_label)
|
|
get_url_host = staticmethod(host_label)
|
|
get_base_url = staticmethod(base_url)
|
|
clear_file_name = staticmethod(_legacy_alias(sanitize_filename, name="value"))
|
|
generate_random_str = staticmethod(_legacy_alias(random_string, randomlength="length"))
|
|
get_time = staticmethod(_legacy_alias(parse_datetime, date="value"))
|
|
unify_datetime_str = staticmethod(_legacy_alias(normalize_datetime, datetime_str="value"))
|
|
format_timestamp = staticmethod(format_timestamp)
|
|
str_to_timestamp = staticmethod(_legacy_alias(parse_timestamp, date_str="value"))
|
|
to_bool = staticmethod(_legacy_alias(parse_bool, text="value", default_val="default"))
|
|
str_from_cookiejar = staticmethod(_legacy_alias(cookiejar_to_string, cj="cookiejar"))
|
|
get_idlist = staticmethod(_legacy_alias(extract_named_ids, dicts="entries"))
|
|
md5_hash = staticmethod(_legacy_md5_hash)
|
|
str_timehours = staticmethod(format_minutes)
|
|
str_amount = staticmethod(_legacy_alias(format_amount, curr="currency"))
|
|
count_words = staticmethod(_legacy_alias(count_words, text="value"))
|
|
is_media_title_like = staticmethod(_legacy_alias(is_media_title_like, text="value"))
|
|
split_text = staticmethod(_legacy_alias(split_by_bytes, text="value"))
|
|
get_keyword = staticmethod(parse_search_keyword)
|
|
str_title = staticmethod(_legacy_alias(title_case, s="value"))
|
|
escape_markdown = staticmethod(_legacy_alias(escape_markdown, content="value"))
|
|
get_domain_address = staticmethod(
|
|
_legacy_alias(parse_address, prefix="include_scheme")
|
|
)
|
|
str_series = staticmethod(_legacy_alias(compact_numbers, array="numbers"))
|
|
format_ep = staticmethod(_legacy_alias(format_ranges, nums="numbers"))
|
|
is_number = staticmethod(_legacy_alias(is_number, text="value"))
|
|
find_common_prefix = staticmethod(
|
|
_legacy_alias(common_prefix, str1="first", str2="second")
|
|
)
|
|
compare_version = staticmethod(
|
|
_legacy_alias(
|
|
compare_version,
|
|
v1="source",
|
|
compare_type="comparison",
|
|
v2="target",
|
|
)
|
|
)
|
|
diff_time_str = staticmethod(_legacy_alias(format_remaining, time_str="value"))
|
|
safe_strip = staticmethod(strip_optional)
|
|
is_valid_html_element = staticmethod(_legacy_alias(DomUtils.has_child_elements, elem="element"))
|
|
is_link = staticmethod(_legacy_alias(is_link, text="value"))
|
|
is_magnet_link = staticmethod(is_magnet_link)
|
|
natural_sort_key = staticmethod(_legacy_alias(natural_sort_key, text="value"))
|
|
|
|
|
|
__all__ = ["StringUtils"]
|