Skip to content

result

Wrap up a function result neatly without throwing.

Result

Exception container class.

Source code in client/ayon_comfyui/api/result.py
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
class Result:
    """Exception container class."""

    def __init__(
        self,
        value: Any | BaseException | Type[BaseException],  # noqa: ANN401
    ) -> None:
        """Capture value and mark result as either ok or err."""
        self._is_err = False
        self._is_ok = False
        self._value = None

        if isclass(value) and issubclass(value, BaseException):
            self._is_err = True
            self._value = value()  # instance class
        elif isinstance(value, BaseException):
            self._is_err = True
            self._value = value
        else:
            self._is_ok = True
            self._value = value

    def unwrap(self) -> Any:  # noqa: ANN401
        """Returns value if is_ok, else raise error."""
        if self._is_err:
            raise self._value
        return self._value

    def unwrap_with_default(self, default: Any = None) -> Any:  # noqa: ANN401
        """Returns value if is_ok, else return default."""
        if self._is_err:
            return default
        return self._value

    @property
    def is_ok(self) -> bool:
        """Returns whether contained value is not an error."""
        return self._is_ok

    @property
    def is_err(self) -> bool:
        """Returns whether contained value is an error."""
        return self._is_err

    @property
    def error(self) -> BaseException | None:
        """Returns exception."""
        if self.is_err:
            return self._value
        return None

    @property
    def value(self) -> Any | None:  # noqa: ANN401
        """Returns value if present."""
        if self.is_ok:
            return self._value
        return None

error property

Returns exception.

is_err property

Returns whether contained value is an error.

is_ok property

Returns whether contained value is not an error.

value property

Returns value if present.

__init__(value)

Capture value and mark result as either ok or err.

Source code in client/ayon_comfyui/api/result.py
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def __init__(
    self,
    value: Any | BaseException | Type[BaseException],  # noqa: ANN401
) -> None:
    """Capture value and mark result as either ok or err."""
    self._is_err = False
    self._is_ok = False
    self._value = None

    if isclass(value) and issubclass(value, BaseException):
        self._is_err = True
        self._value = value()  # instance class
    elif isinstance(value, BaseException):
        self._is_err = True
        self._value = value
    else:
        self._is_ok = True
        self._value = value

unwrap()

Returns value if is_ok, else raise error.

Source code in client/ayon_comfyui/api/result.py
35
36
37
38
39
def unwrap(self) -> Any:  # noqa: ANN401
    """Returns value if is_ok, else raise error."""
    if self._is_err:
        raise self._value
    return self._value

unwrap_with_default(default=None)

Returns value if is_ok, else return default.

Source code in client/ayon_comfyui/api/result.py
41
42
43
44
45
def unwrap_with_default(self, default: Any = None) -> Any:  # noqa: ANN401
    """Returns value if is_ok, else return default."""
    if self._is_err:
        return default
    return self._value

capture_as_result(func)

Decorator for function as Result type.

Source code in client/ayon_comfyui/api/result.py
72
73
74
75
76
77
78
79
80
81
82
83
def capture_as_result(func: Callable) -> Callable[[], Result]:
    """Decorator for function as Result type."""  # noqa: DOC201

    @wraps(func)
    def _inner_function(*args: list, **kwargs: dict) -> Result:
        try:
            ret = func(*args, **kwargs)
            return Result(ret)
        except BaseException as e:  # noqa : BLE001
            return Result(e)

    return _inner_function

safe_partial(func, *args, **kwargs)

Returns a functools.partial wrapped in capture as result.

Source code in client/ayon_comfyui/api/result.py
86
87
88
89
90
91
92
93
94
95
96
def safe_partial(
    func: Callable, *args: list, **kwargs: dict
) -> Callable[[], Result]:
    """Returns a functools.partial wrapped in capture as result."""

    @wraps(func)
    @capture_as_result
    def safe_func(*_args: list, **_kwargs: dict) -> Any:  # noqa : ANN401
        return func(*_args, **_kwargs)

    return partial(safe_func, *args, **kwargs)