42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
import json
|
|
from typing import Any
|
|
from typing import Dict
|
|
from typing import Iterable
|
|
|
|
from ytdl_sub.script.types.resolvable import Resolvable
|
|
from ytdl_sub.script.types.resolvable import String
|
|
|
|
|
|
class ScriptUtils:
|
|
@classmethod
|
|
def add_dummy_variables(cls, variables: Iterable[str]) -> Dict[str, str]:
|
|
dummy_variables: Dict[str, str] = {}
|
|
for var in variables:
|
|
dummy_variables[var] = ""
|
|
dummy_variables[f"{var}_sanitized"] = ""
|
|
|
|
return dummy_variables
|
|
|
|
@classmethod
|
|
def add_sanitized_variables(cls, variables: Dict[str, str]) -> Dict[str, str]:
|
|
sanitized_variables = {
|
|
f"{name}_sanitized": f"{{%sanitize({name})}}" for name in variables.keys()
|
|
}
|
|
return dict(variables, **sanitized_variables)
|
|
|
|
@classmethod
|
|
def to_script(cls, value: Any) -> str:
|
|
if value is None:
|
|
out = ""
|
|
elif isinstance(value, str):
|
|
out = value
|
|
elif isinstance(value, int):
|
|
out = f"{{%int({value})}}"
|
|
elif isinstance(value, float):
|
|
out = f"{{%float({value})}}"
|
|
elif isinstance(value, bool):
|
|
out = f"{{%bool({value})}}"
|
|
else:
|
|
out = json.dumps(value)
|
|
|
|
return out
|