A complete gutting of the internals of ytdl-sub to support functions in our variable syntax, in addition to being able to access a yt-dlp entry's .info.json fields using functions. Functionally, ytdl-sub should still look and behave the same from a user-perspective. With so many lines of code changed (+8927, -2708), no doubt there will be new issues. Please make a GH issue or reach out on Discord if your config/subscriptions break in any way/shape/form. Details on how to use function support will come soon in the form of proper documentation in our readthedocs.
42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
import re
|
|
from typing import AnyStr
|
|
from typing import Match
|
|
|
|
from ytdl_sub.script.types.array import Array
|
|
from ytdl_sub.script.types.resolvable import String
|
|
|
|
|
|
def _re_output_to_array(re_out: Match[AnyStr] | None) -> Array:
|
|
if re_out is None:
|
|
return Array([])
|
|
|
|
return Array(list([String(re_out.string)]) + list(String(group) for group in re_out.groups()))
|
|
|
|
|
|
class RegexFunctions:
|
|
@staticmethod
|
|
def regex_match(regex: String, string: String) -> Array:
|
|
"""
|
|
Checks for a match only at the beginning of the string. If a match exists, returns
|
|
the string as the first element of the Array. If there are capture groups, returns each
|
|
group as a subsequent element in the Array.
|
|
"""
|
|
return _re_output_to_array(re.match(regex.value, string.value))
|
|
|
|
@staticmethod
|
|
def regex_search(regex: String, string: String) -> Array:
|
|
"""
|
|
Checks for a match anywhere in the string. If a match exists, returns
|
|
the string as the first element of the Array. If there are capture groups, returns each
|
|
group as a subsequent element in the Array.
|
|
"""
|
|
return _re_output_to_array(re.search(regex.value, string.value))
|
|
|
|
@staticmethod
|
|
def regex_fullmatch(regex: String, string: String) -> Array:
|
|
"""
|
|
Checks for entire string to be a match. If a match exists, returns
|
|
the string as the first element of the Array. If there are capture groups, returns each
|
|
group as a subsequent element in the Array.
|
|
"""
|
|
return _re_output_to_array(re.fullmatch(regex.value, string.value))
|