Skip to content

Commit fe7ef1e

Browse files
committed
Simplify the code related to tracebacks.
1 parent c902136 commit fe7ef1e

File tree

5 files changed

+10
-19
lines changed

5 files changed

+10
-19
lines changed

docs/source/changes.md

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ releases are available on [PyPI](https://pypi.org/project/pytask) and
2525
- {pull}`573` removes the `pytask_execute_create_scheduler` hook.
2626
- {pull}`579` fixes an interaction with `--pdb` and `--trace` and task that return. The
2727
debugging modes swallowed the return and `None` was returned. Closes {issue}`574`.
28+
- {pull}`581` simplifies the code for tracebacks and unpublishes some utility functions.
2829

2930
## 0.4.6 - 2024-03-13
3031

src/_pytask/build.py

+4-9
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
from typing import Literal
1414

1515
import click
16-
from rich.traceback import Traceback
1716

1817
from _pytask.capture_utils import CaptureMethod
1918
from _pytask.capture_utils import ShowCapture
@@ -34,7 +33,7 @@
3433
from _pytask.session import Session
3534
from _pytask.shared import parse_paths
3635
from _pytask.shared import to_list
37-
from _pytask.traceback import remove_internal_traceback_frames_from_exc_info
36+
from _pytask.traceback import Traceback
3837

3938
if TYPE_CHECKING:
4039
from typing import NoReturn
@@ -66,7 +65,7 @@ def pytask_unconfigure(session: Session) -> None:
6665
path.write_text(json.dumps(HashPathCache._cache))
6766

6867

69-
def build( # noqa: C901, PLR0912, PLR0913, PLR0915
68+
def build( # noqa: C901, PLR0912, PLR0913
7069
*,
7170
capture: Literal["fd", "no", "sys", "tee-sys"] | CaptureMethod = CaptureMethod.FD,
7271
check_casing_of_paths: bool = True,
@@ -257,9 +256,7 @@ def build( # noqa: C901, PLR0912, PLR0913, PLR0915
257256
session = Session.from_config(config_)
258257

259258
except (ConfigurationError, Exception):
260-
exc_info = remove_internal_traceback_frames_from_exc_info(sys.exc_info())
261-
traceback = Traceback.from_exception(*exc_info)
262-
console.print(traceback)
259+
console.print(Traceback(sys.exc_info()))
263260
session = Session(exit_code=ExitCode.CONFIGURATION_FAILED)
264261

265262
else:
@@ -279,9 +276,7 @@ def build( # noqa: C901, PLR0912, PLR0913, PLR0915
279276
session.exit_code = ExitCode.FAILED
280277

281278
except Exception: # noqa: BLE001
282-
exc_info = remove_internal_traceback_frames_from_exc_info(sys.exc_info())
283-
traceback = Traceback.from_exception(*exc_info)
284-
console.print(traceback)
279+
console.print(Traceback(sys.exc_info()))
285280
session.exit_code = ExitCode.FAILED
286281

287282
session.hook.pytask_unconfigure(session=session)

src/_pytask/dag_command.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import click
1111
import networkx as nx
1212
from rich.text import Text
13-
from rich.traceback import Traceback
1413

1514
from _pytask.click import ColoredCommand
1615
from _pytask.click import EnumChoice
@@ -31,7 +30,7 @@
3130
from _pytask.shared import parse_paths
3231
from _pytask.shared import reduce_names_of_multiple_nodes
3332
from _pytask.shared import to_list
34-
from _pytask.traceback import remove_internal_traceback_frames_from_exc_info
33+
from _pytask.traceback import Traceback
3534

3635

3736
class _RankDirection(enum.Enum):
@@ -114,9 +113,8 @@ def dag(**raw_config: Any) -> int:
114113

115114
except Exception: # noqa: BLE001
116115
session.exit_code = ExitCode.FAILED
117-
exc_info = remove_internal_traceback_frames_from_exc_info(sys.exc_info())
118116
console.print()
119-
console.print(Traceback.from_exception(*exc_info))
117+
console.print(Traceback(sys.exc_info()))
120118
console.rule(style="failed")
121119

122120
session.hook.pytask_unconfigure(session=session)

src/_pytask/traceback.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828

2929
__all__ = [
3030
"Traceback",
31-
"remove_internal_traceback_frames_from_exc_info",
3231
"remove_traceback_from_exc_info",
3332
]
3433

@@ -60,7 +59,7 @@ def __rich_console__(
6059
if self.exc_info and isinstance(self.exc_info[1], Exit):
6160
self.exc_info = remove_traceback_from_exc_info(self.exc_info)
6261

63-
filtered_exc_info = remove_internal_traceback_frames_from_exc_info(
62+
filtered_exc_info = _remove_internal_traceback_frames_from_exc_info(
6463
self.exc_info, suppress=self.suppress
6564
)
6665

@@ -80,7 +79,7 @@ def remove_traceback_from_exc_info(
8079
return (exc_info[0], exc_info[1], None) # type: ignore[return-value]
8180

8281

83-
def remove_internal_traceback_frames_from_exc_info(
82+
def _remove_internal_traceback_frames_from_exc_info(
8483
exc_info: OptionalExceptionInfo,
8584
suppress: tuple[Path, ...] = (
8685
_PLUGGY_DIRECTORY,
@@ -117,7 +116,7 @@ def _remove_internal_traceback_frames_from_exception(
117116
if exc is None:
118117
return exc
119118

120-
_, _, tb = remove_internal_traceback_frames_from_exc_info(
119+
_, _, tb = _remove_internal_traceback_frames_from_exc_info(
121120
(type(exc), exc, exc.__traceback__)
122121
)
123122
exc.__traceback__ = tb

src/pytask/__init__.py

-2
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@
7171
from _pytask.session import Session
7272
from _pytask.task_utils import task
7373
from _pytask.traceback import Traceback
74-
from _pytask.traceback import remove_internal_traceback_frames_from_exc_info
7574
from _pytask.typing import Product
7675
from _pytask.typing import is_task_function
7776
from _pytask.warnings_utils import WarningReport
@@ -152,7 +151,6 @@
152151
"parse_dependencies_from_task_function",
153152
"parse_products_from_task_function",
154153
"parse_warning_filter",
155-
"remove_internal_traceback_frames_from_exc_info",
156154
"remove_marks",
157155
"set_marks",
158156
"storage",

0 commit comments

Comments
 (0)