From 8fe4460ea5947ecce3e0c92a0d3f907400c0d25b Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Wed, 15 Nov 2023 00:23:12 -0800 Subject: [PATCH] function output error messages looking good, need more tests --- src/ytdl_sub/script/types/array.py | 4 ++++ src/ytdl_sub/script/types/function.py | 8 +++++++- src/ytdl_sub/script/types/map.py | 4 ++++ src/ytdl_sub/script/types/resolvable.py | 4 +++- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/ytdl_sub/script/types/array.py b/src/ytdl_sub/script/types/array.py index 768aac38..182f575f 100644 --- a/src/ytdl_sub/script/types/array.py +++ b/src/ytdl_sub/script/types/array.py @@ -18,6 +18,10 @@ from ytdl_sub.script.types.variable_dependency import VariableDependency class Array(NonHashable): value: List[Resolvable] + @classmethod + def human_readable_name(cls) -> str: + return "Array" + @dataclass(frozen=True) class UnresolvedArray(Array, VariableDependency, FutureResolvable): diff --git a/src/ytdl_sub/script/types/function.py b/src/ytdl_sub/script/types/function.py index 4d23447a..7fc7d49a 100644 --- a/src/ytdl_sub/script/types/function.py +++ b/src/ytdl_sub/script/types/function.py @@ -207,7 +207,13 @@ class BuiltInFunction(Function): received_type_names: List[str] = [] for arg in self.args: if isinstance(arg, BuiltInFunction): - received_type_names.append(f"%{arg.name}(...)->{arg.output_type.__name__}") + if is_union(arg.output_type): + # TODO: Move naming to separate function, deal with Union input naming + received_type_names.append( + f"%{arg.name}(...)->Union[{', '.join(arg_type.human_readable_name() for arg_type in arg.output_type.__args__)}]" + ) + else: + received_type_names.append(f"%{arg.name}(...)->{arg.output_type.__name__}") else: received_type_names.append(arg.__class__.__name__) diff --git a/src/ytdl_sub/script/types/map.py b/src/ytdl_sub/script/types/map.py index b014228c..b29c91a2 100644 --- a/src/ytdl_sub/script/types/map.py +++ b/src/ytdl_sub/script/types/map.py @@ -20,6 +20,10 @@ from ytdl_sub.utils.exceptions import StringFormattingException class Map(NonHashable): value: Dict[Hashable, Resolvable] + @classmethod + def human_readable_name(cls) -> str: + return "Map" + @dataclass(frozen=True) class UnresolvedMap(Map, VariableDependency, FutureResolvable): diff --git a/src/ytdl_sub/script/types/resolvable.py b/src/ytdl_sub/script/types/resolvable.py index 3a475c79..463eb5e3 100644 --- a/src/ytdl_sub/script/types/resolvable.py +++ b/src/ytdl_sub/script/types/resolvable.py @@ -15,7 +15,9 @@ class ArgumentType(ABC): Any possible argument type that has not been resolved yet """ - pass + @classmethod + def human_readable_name(cls) -> str: + return cls.__name__ class AnyType_0(ABC):