From f840c9b247fd61cd2c7a64d264723ce85009f9ce Mon Sep 17 00:00:00 2001 From: johnslavik Date: Sat, 3 Jan 2026 23:16:35 +0100 Subject: [PATCH] Remove `view.utils.reraises` --- src/view/utils.py | 37 +++---------------------------------- tests/test_utils.py | 26 +++++++++++++------------- 2 files changed, 16 insertions(+), 47 deletions(-) diff --git a/src/view/utils.py b/src/view/utils.py index 1fb1c10d..b602c6a7 100644 --- a/src/view/utils.py +++ b/src/view/utils.py @@ -1,13 +1,12 @@ from __future__ import annotations from contextlib import contextmanager -from functools import wraps -from typing import TYPE_CHECKING, ParamSpec, TypeVar +from typing import TYPE_CHECKING if TYPE_CHECKING: - from collections.abc import Callable, Iterator + from collections.abc import Iterator -__all__ = "reraise", "reraises" +__all__ = ("reraise",) @contextmanager @@ -27,33 +26,3 @@ def reraise( yield except target as error: raise new_exception from error - - -T = TypeVar("T") -P = ParamSpec("P") - - -def reraises( - new_exception: type[BaseException] | BaseException, - *exceptions: type[BaseException], -) -> Callable[[Callable[P, T]], Callable[P, T]]: - """ - Decorator to reraise one or many exceptions as a single exception for an - entire function. - - This is primarily useful for reraising exceptions into HTTP errors, such - as an error 400 (Bad Request). - """ - target = exceptions or Exception - - def factory(function: Callable[P, T], /) -> Callable[P, T]: - @wraps(function) - def decorator(*args: P.args, **kwargs: P.kwargs) -> T: - try: - return function(*args, **kwargs) - except target as error: - raise new_exception from error - - return decorator - - return factory diff --git a/tests/test_utils.py b/tests/test_utils.py index 8d0de0bc..07f032b0 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,5 +1,5 @@ import pytest -from view.utils import reraise, reraises +from view.utils import reraise def test_simple_reraise(): @@ -55,8 +55,8 @@ def test_do_not_reraise_base_exceptions(): raise KeyboardInterrupt -def test_simple_reraises(): - @reraises(RuntimeError, TypeError) +def test_simple_reraise_as_decorator(): + @reraise(RuntimeError, TypeError) def runtime_from_type() -> None: raise TypeError("silly") @@ -64,9 +64,9 @@ def runtime_from_type() -> None: runtime_from_type() -def test_reraises_unexpected(): +def test_reraise_unexpected_as_decorator(): - @reraises(RuntimeError, TypeError) + @reraise(RuntimeError, TypeError) def runtime_from_type_but_value() -> None: raise ValueError("haha") @@ -74,9 +74,9 @@ def runtime_from_type_but_value() -> None: runtime_from_type_but_value() -def test_reraises_all_exceptions(): +def test_reraise_all_exceptions_as_decorator(): - @reraises(RuntimeError) + @reraise(RuntimeError) def runtime_from_all() -> None: raise ZeroDivisionError("anything") @@ -84,9 +84,9 @@ def runtime_from_all() -> None: runtime_from_all() -def test_reraise_exception_instance(): +def test_reraise_exception_instance_as_decorator(): - @reraises(RuntimeError("test")) + @reraise(RuntimeError("test")) def runtime_value_from_all() -> None: raise ZeroDivisionError("anything") @@ -96,9 +96,9 @@ def runtime_value_from_all() -> None: assert str(error.value) == "test" -def test_multi_reraise(): +def test_multi_reraise_as_decorator(): - @reraises(RuntimeError, TypeError, ValueError) + @reraise(RuntimeError, TypeError, ValueError) def runtime_from_type_or_value(exception: BaseException) -> None: raise exception @@ -112,8 +112,8 @@ def runtime_from_type_or_value(exception: BaseException) -> None: runtime_from_type_or_value(ZeroDivisionError()) -def test_do_not_reraises_base_exceptions(): - @reraises(RuntimeError) +def test_do_not_reraise_base_exceptions_as_decorator(): + @reraise(RuntimeError) def runtime_from_all_but_interrupt() -> None: raise KeyboardInterrupt