Skip to content

Commit 38ff10c

Browse files
committed
chore: deduplicate return_value handling
1 parent 3fac4bf commit 38ff10c

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

utils/result.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -82,29 +82,38 @@ def do_error(value: UT) -> NoReturn:
8282
@staticmethod
8383
def do(*, error: type[UE] = object) -> "Callable[[Callable[TArgs, UT]], Callable[TArgs, Result[UT, UE]]]":
8484
def decorator(func):
85+
def handle_exception(raised: Exception):
86+
match raised:
87+
case ResultDoError() as do_error:
88+
return Result.error(do_error.value)
89+
case Exception() as unknown_exception:
90+
print('[outer-scout-blender]', unknown_exception)
91+
return Result.error(str(raised))
92+
93+
def wrap_return_value(return_value):
94+
if isinstance(return_value, Result):
95+
return return_value
96+
return Result.ok(return_value)
97+
8598
if isgeneratorfunction(func):
8699

87100
@wraps(func)
88101
def wrapper(*args, **kwargs):
89102
try:
90103
return_value = yield from func(*args, **kwargs)
91-
except ResultDoError as do_error:
92-
return_value = Result.error(do_error.value)
93-
if not isinstance(return_value, Result):
94-
return_value = Result.ok(return_value)
95-
return return_value
104+
except Exception as exception:
105+
return_value = handle_exception(exception)
106+
return wrap_return_value(return_value)
96107

97108
else:
98109

99110
@wraps(func)
100111
def wrapper(*args, **kwargs):
101112
try:
102113
return_value = func(*args, **kwargs)
103-
except ResultDoError as do_error:
104-
return_value = Result.error(do_error.value)
105-
if not isinstance(return_value, Result):
106-
return_value = Result.ok(return_value)
107-
return return_value
114+
except Exception as exception:
115+
return_value = handle_exception(exception)
116+
return wrap_return_value(return_value)
108117

109118
return wrapper
110119

@@ -124,4 +133,3 @@ def __repr__(self) -> str:
124133
if self.is_ok:
125134
return f"Ok({self.__value!r})"
126135
return f"Error({self.__error!r})"
127-

0 commit comments

Comments
 (0)