1
- """Common Temporal exceptions."""
1
+ """
2
+ Common Temporal exceptions.
3
+
4
+ # Temporal Failure
5
+
6
+ Most Temporal SDKs have a base class that the other Failures extend.
7
+ In python, it is the ``FailureError``.
8
+
9
+ # Application Failure
10
+
11
+ Workflow, and Activity, and Nexus Operation code use Application Failures to
12
+ communicate application-specific failures that happen.
13
+ This is the only type of Temporal Failure created and thrown by user code.
14
+ In the Python SDK, it is the ``ApplicationError``.
15
+
16
+ # References
17
+
18
+ More information can be found in the docs at
19
+ https://docs.temporal.io/references/failures#workflow-execution-failures.
20
+ """
2
21
3
22
import asyncio
4
23
from datetime import timedelta
@@ -23,7 +42,16 @@ def cause(self) -> Optional[BaseException]:
23
42
24
43
25
44
class FailureError (TemporalError ):
26
- """Base for runtime failures during workflow/activity execution."""
45
+ """
46
+ Base for runtime failures during workflow/activity execution.
47
+
48
+ This is extended by ``ApplicationError``, which can be raised in a Workflow to fail the Workflow Execution.
49
+ Workflow Execution Failures put the Workflow Execution into the "Failed" state and no more attempts will
50
+ be made in progressing this execution.
51
+
52
+ Any exception that does not extend this exception
53
+ is considered a Workflow Task Failure. These types of failures will cause the Workflow Task to be retried.
54
+ """
27
55
28
56
def __init__ (
29
57
self ,
@@ -71,7 +99,27 @@ def __init__(
71
99
72
100
73
101
class ApplicationError (FailureError ):
74
- """Error raised during workflow/activity execution."""
102
+ """
103
+ Error raised during workflow/activity execution.
104
+
105
+ Can be raised in a Workflow to fail the Workflow Execution.
106
+ Workflow Execution Failures put the Workflow Execution into the "Failed" state and no more attempts will
107
+ be made in progressing their execution.
108
+
109
+ If you are creating custom exceptions or raising typical Python-based
110
+ exceptions you would either need to extend this class or
111
+ explicitly state that the exception is a Workflow Execution Failure by raising a new ``ApplicationError``.
112
+
113
+ Any exception that does not extend this exception
114
+ is considered a Workflow Task Failure. These types of failures will cause the Workflow Task to be retried.
115
+
116
+ # Example
117
+
118
+ >>> from temporalio.exceptions import ApplicationError
119
+ ... # ...
120
+ ... if isDelivery and distance.get_kilometers() > 25:
121
+ ... raise ApplicationError("Customer lives outside the service area")
122
+ """
75
123
76
124
def __init__ (
77
125
self ,
0 commit comments