dex-python-sdk 1.2.0__tar.gz → 1.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/PKG-INFO +1 -1
  2. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/__init__.py +2 -2
  3. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/_grpc_errors.py +2 -2
  4. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/async_client.py +11 -10
  5. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/client.py +11 -10
  6. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/runtime_errors.py +19 -2
  7. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/pyproject.toml +1 -1
  8. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/LEGACY_NOTICES.md +0 -0
  9. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/LICENSE +0 -0
  10. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/README.md +0 -0
  11. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/_async_value_hydrator.py +0 -0
  12. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/_async_worker_dispatcher.py +0 -0
  13. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/_async_worker_service.py +0 -0
  14. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/_invocation_context.py +0 -0
  15. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/_native.pyi +0 -0
  16. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/_server_protocol.py +0 -0
  17. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/_utils.py +0 -0
  18. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/_value_hydrator.py +0 -0
  19. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/_value_mapper.py +0 -0
  20. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/_worker_dispatcher.py +0 -0
  21. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/_worker_service.py +0 -0
  22. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/async_worker.py +0 -0
  23. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/attribute.py +0 -0
  24. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/attribute_match.py +0 -0
  25. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/blob_cache.py +0 -0
  26. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/channel.py +0 -0
  27. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/client_options.py +0 -0
  28. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/codec.py +0 -0
  29. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/condition.py +0 -0
  30. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/context.py +0 -0
  31. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/dexpb/__init__.py +0 -0
  32. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/dexpb/dex_pb2.py +0 -0
  33. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/dexpb/dex_pb2.pyi +0 -0
  34. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/dexpb/dex_pb2_grpc.py +0 -0
  35. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/flow.py +0 -0
  36. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/flow_config.py +0 -0
  37. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/flow_info.py +0 -0
  38. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/flow_options.py +0 -0
  39. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/flow_result.py +0 -0
  40. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/py.typed +0 -0
  41. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/rpc_invoke_options.py +0 -0
  42. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/step.py +0 -0
  43. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/step_execution.py +0 -0
  44. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/stream.py +0 -0
  45. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/subflow.py +0 -0
  46. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/timer.py +0 -0
  47. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/wait.py +0 -0
  48. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/wait_options.py +0 -0
  49. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/worker.py +0 -0
  50. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/dex/worker_options.py +0 -0
  51. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/sdk-rust/Cargo.lock +0 -0
  52. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/sdk-rust/Cargo.toml +0 -0
  53. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/sdk-rust/crates/dex-blob-cache/Cargo.toml +0 -0
  54. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/sdk-rust/crates/dex-blob-cache/LICENSE +0 -0
  55. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/sdk-rust/crates/dex-blob-cache/src/config.rs +0 -0
  56. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/sdk-rust/crates/dex-blob-cache/src/entry.rs +0 -0
  57. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/sdk-rust/crates/dex-blob-cache/src/error.rs +0 -0
  58. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/sdk-rust/crates/dex-blob-cache/src/format.rs +0 -0
  59. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/sdk-rust/crates/dex-blob-cache/src/lib.rs +0 -0
  60. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/sdk-rust/crates/dex-blob-cache/src/policy.rs +0 -0
  61. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/sdk-rust/crates/dex-blob-cache/src/store.rs +0 -0
  62. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/sdk-rust/crates/dex-blob-cache/tests/blob_cache_integration.rs +0 -0
  63. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/sdk-rust/crates/dex-blob-cache-python/Cargo.toml +0 -0
  64. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/sdk-rust/crates/dex-blob-cache-python/LICENSE +0 -0
  65. {dex_python_sdk-1.2.0 → dex_python_sdk-1.2.1}/sdk-rust/crates/dex-blob-cache-python/src/lib.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dex-python-sdk
3
- Version: 1.2.0
3
+ Version: 1.2.1
4
4
  Requires-Dist: grpcio>=1.83.0
5
5
  Requires-Dist: grpcio-status>=1.83.0
6
6
  Requires-Dist: protobuf>=7.35.1
@@ -70,7 +70,7 @@ from dex.runtime_errors import (
70
70
  FlowAlreadyStartedError,
71
71
  FlowDefinitionError,
72
72
  FlowErrorType,
73
- FlowNotActiveError,
73
+ FlowNotActiveOrNotFoundError,
74
74
  FlowNotFoundError,
75
75
  InvalidStepResultError,
76
76
  LongPollTimeoutError,
@@ -156,7 +156,7 @@ __all__ = [
156
156
  "FlowErrorType",
157
157
  "FlowInfo",
158
158
  "FlowResult",
159
- "FlowNotActiveError",
159
+ "FlowNotActiveOrNotFoundError",
160
160
  "FlowNotFoundError",
161
161
  "FlowStatus",
162
162
  "FlowTimeoutHandlerOptions",
@@ -23,7 +23,7 @@ from dex.runtime_errors import (
23
23
  DexServiceError,
24
24
  ErrorSubStatus,
25
25
  FlowAlreadyStartedError,
26
- FlowNotActiveError,
26
+ FlowNotActiveOrNotFoundError,
27
27
  FlowNotFoundError,
28
28
  LongPollTimeoutError,
29
29
  RequestTimeoutError,
@@ -129,7 +129,7 @@ def translate_rpc_error(
129
129
  if requirement == "existing":
130
130
  return FlowNotFoundError(*parameters)
131
131
  if requirement == "active":
132
- return FlowNotActiveError(*parameters)
132
+ return FlowNotActiveOrNotFoundError(*parameters)
133
133
  return DexServiceError(*parameters)
134
134
  if sub_status is ErrorSubStatus.WORKER_API_ERROR:
135
135
  if code is grpc.StatusCode.ABORTED:
@@ -283,8 +283,9 @@ class AsyncClient:
283
283
  RpcLockConflictError: If Attribute locks cannot be acquired.
284
284
  WorkerInvocationError: If the application handler fails.
285
285
  ValueMappingError: If input or output mapping fails.
286
- DexServiceError: If the selected path requires an active execution or the
287
- service call otherwise fails.
286
+ FlowNotActiveOrNotFoundError: If the Flow is missing or the selected path
287
+ cannot use its closed execution.
288
+ DexServiceError: If the service call otherwise fails.
288
289
  """
289
290
  registered_flow, rpc = self.registry._rpc_for_method(rpc_method)
290
291
  (
@@ -566,7 +567,7 @@ class AsyncClient:
566
567
  options: Stop mode and optional recorded reason.
567
568
 
568
569
  Raises:
569
- FlowNotActiveError: If no active run exists.
570
+ FlowNotActiveOrNotFoundError: If no active run exists.
570
571
  DexServiceError: If FlowService rejects or cannot perform the request.
571
572
  """
572
573
  await self._call(
@@ -747,7 +748,7 @@ class AsyncClient:
747
748
  timer_id: Exactly one Timer condition ID or zero-based index.
748
749
 
749
750
  Raises:
750
- FlowNotActiveError: If the Flow is closed.
751
+ FlowNotActiveOrNotFoundError: If the Flow is missing or closed.
751
752
  ValueError: If an identifier is invalid.
752
753
  DexServiceError: If FlowService cannot skip the Timer.
753
754
  """
@@ -787,7 +788,7 @@ class AsyncClient:
787
788
  Raises:
788
789
  ValueError: If the Request ID or request timeout is invalid.
789
790
  RequestTimeoutError: If a positive request timeout expires first.
790
- FlowNotActiveError: If the Flow closes first.
791
+ FlowNotActiveOrNotFoundError: If the Flow is missing or closes first.
791
792
  DexServiceError: If FlowService cannot perform the wait.
792
793
  """
793
794
  request_budget = _ClientRequestBudget(options.request_timeout)
@@ -858,7 +859,7 @@ class AsyncClient:
858
859
  Raises:
859
860
  ValueError: If an identifier, option, or match operand is invalid.
860
861
  RequestTimeoutError: If a positive request timeout expires first.
861
- FlowNotActiveError: If the Flow closes first.
862
+ FlowNotActiveOrNotFoundError: If the Flow is missing or closes first.
862
863
  DexServiceError: If FlowService cannot perform the wait.
863
864
  """
864
865
  ...
@@ -890,7 +891,7 @@ class AsyncClient:
890
891
  Raises:
891
892
  ValueError: If an identifier, option, or match operand is invalid.
892
893
  RequestTimeoutError: If a positive request timeout expires first.
893
- FlowNotActiveError: If the Flow closes first.
894
+ FlowNotActiveOrNotFoundError: If the Flow is missing or closes first.
894
895
  DexServiceError: If FlowService cannot perform the wait.
895
896
  """
896
897
  ...
@@ -920,7 +921,7 @@ class AsyncClient:
920
921
  TypeError: If arguments do not match the Attribute definition.
921
922
  ValueError: If an identifier, option, or expected value is invalid.
922
923
  RequestTimeoutError: If a positive request timeout expires first.
923
- FlowNotActiveError: If the Flow closes first.
924
+ FlowNotActiveOrNotFoundError: If the Flow is missing or closes first.
924
925
  DexServiceError: If FlowService cannot perform the wait.
925
926
  """
926
927
  instance, match, options = self._attribute_wait_arguments(
@@ -1000,7 +1001,7 @@ class AsyncClient:
1000
1001
  config: New optional fields applied to later decisions.
1001
1002
 
1002
1003
  Raises:
1003
- FlowNotActiveError: If the Flow is closed.
1004
+ FlowNotActiveOrNotFoundError: If the Flow is missing or closed.
1004
1005
  ValueError: If a configuration value is invalid.
1005
1006
  DexServiceError: If FlowService cannot apply the update.
1006
1007
  """
@@ -1024,7 +1025,7 @@ class AsyncClient:
1024
1025
  flow_id: The non-empty active Flow ID.
1025
1026
 
1026
1027
  Raises:
1027
- FlowNotActiveError: If the Flow is closed.
1028
+ FlowNotActiveOrNotFoundError: If the Flow is missing or closed.
1028
1029
  DexServiceError: If FlowService cannot accept the request.
1029
1030
  """
1030
1031
  await self._call(
@@ -282,8 +282,9 @@ class Client:
282
282
  RpcLockConflictError: If requested Attribute locks cannot be acquired.
283
283
  WorkerInvocationError: If the application handler fails.
284
284
  ValueMappingError: If input or output mapping fails.
285
- DexServiceError: If the selected path requires an active execution or the
286
- service call otherwise fails.
285
+ FlowNotActiveOrNotFoundError: If the Flow is missing or the selected path
286
+ cannot use its closed execution.
287
+ DexServiceError: If the service call otherwise fails.
287
288
  """
288
289
  registered_flow, rpc = self.registry._rpc_for_method(rpc_method)
289
290
  (
@@ -566,7 +567,7 @@ class Client:
566
567
  options: Stop mode and optional recorded reason.
567
568
 
568
569
  Raises:
569
- FlowNotActiveError: If no active run exists.
570
+ FlowNotActiveOrNotFoundError: If no active run exists.
570
571
  DexServiceError: If FlowService rejects or cannot perform the request.
571
572
  """
572
573
  self._call(
@@ -745,7 +746,7 @@ class Client:
745
746
  timer_id: Exactly one Timer condition ID or zero-based index.
746
747
 
747
748
  Raises:
748
- FlowNotActiveError: If the Flow is closed.
749
+ FlowNotActiveOrNotFoundError: If the Flow is missing or closed.
749
750
  ValueError: If an identifier is invalid.
750
751
  DexServiceError: If FlowService cannot skip the Timer.
751
752
  """
@@ -783,7 +784,7 @@ class Client:
783
784
  Raises:
784
785
  ValueError: If the Request ID or request timeout is invalid.
785
786
  RequestTimeoutError: If a positive request timeout expires first.
786
- FlowNotActiveError: If the Flow closes first.
787
+ FlowNotActiveOrNotFoundError: If the Flow is missing or closes first.
787
788
  DexServiceError: If FlowService cannot perform the wait.
788
789
  """
789
790
  request_budget = _ClientRequestBudget(options.request_timeout)
@@ -854,7 +855,7 @@ class Client:
854
855
  Raises:
855
856
  ValueError: If an identifier, option, or match operand is invalid.
856
857
  RequestTimeoutError: If a positive request timeout expires first.
857
- FlowNotActiveError: If the Flow closes first.
858
+ FlowNotActiveOrNotFoundError: If the Flow is missing or closes first.
858
859
  DexServiceError: If FlowService cannot perform the wait.
859
860
  """
860
861
  ...
@@ -887,7 +888,7 @@ class Client:
887
888
  Raises:
888
889
  ValueError: If an identifier, option, or match operand is invalid.
889
890
  RequestTimeoutError: If a positive request timeout expires first.
890
- FlowNotActiveError: If the Flow closes first.
891
+ FlowNotActiveOrNotFoundError: If the Flow is missing or closes first.
891
892
  DexServiceError: If FlowService cannot perform the wait.
892
893
  """
893
894
  ...
@@ -917,7 +918,7 @@ class Client:
917
918
  TypeError: If arguments do not match the Attribute definition.
918
919
  ValueError: If an identifier, option, or expected value is invalid.
919
920
  RequestTimeoutError: If a positive request timeout expires first.
920
- FlowNotActiveError: If the Flow closes first.
921
+ FlowNotActiveOrNotFoundError: If the Flow is missing or closes first.
921
922
  DexServiceError: If FlowService cannot perform the wait.
922
923
  """
923
924
  instance, match, options = self._attribute_wait_arguments(
@@ -1000,7 +1001,7 @@ class Client:
1000
1001
  config: The new optional configuration fields.
1001
1002
 
1002
1003
  Raises:
1003
- FlowNotActiveError: If the Flow is closed.
1004
+ FlowNotActiveOrNotFoundError: If the Flow is missing or closed.
1004
1005
  ValueError: If a configuration value is invalid.
1005
1006
  DexServiceError: If FlowService cannot apply the update.
1006
1007
  """
@@ -1025,7 +1026,7 @@ class Client:
1025
1026
  flow_id: The non-empty active Flow ID.
1026
1027
 
1027
1028
  Raises:
1028
- FlowNotActiveError: If the Flow is closed.
1029
+ FlowNotActiveOrNotFoundError: If the Flow is missing or closed.
1029
1030
  DexServiceError: If FlowService cannot accept the request.
1030
1031
  """
1031
1032
  self._call(
@@ -104,8 +104,25 @@ class FlowNotFoundError(DexServiceError):
104
104
  pass
105
105
 
106
106
 
107
- class FlowNotActiveError(DexServiceError):
108
- """Indicate that an operation requires an active but already closed Flow."""
107
+ class FlowNotActiveOrNotFoundError(DexServiceError):
108
+ """Report a missing Flow or an operation that cannot use a closed Flow.
109
+
110
+ RPC calls use this error for missing targets, including query-only reads.
111
+ A query-only RPC can read a retained terminal execution when it has no
112
+ locks, transactionality, durable effects, or Server-forced Update routing.
113
+ At that confirmed read boundary, handle this error as not found without
114
+ adding a lifecycle probe. Preserve other service and Worker failures.
115
+
116
+ Mutations and active-only RPCs also use this error for closed targets.
117
+ The error does not distinguish a missing Flow from a closed Flow or prove
118
+ that the requested action succeeded. The inherited service metadata and
119
+ chained transport cause remain available. For example::
120
+
121
+ try:
122
+ client.invoke_rpc(orders.update_order, order_id, update)
123
+ except FlowNotActiveOrNotFoundError:
124
+ raise OrderUnavailableError(order_id)
125
+ """
109
126
 
110
127
  pass
111
128
 
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "dex-python-sdk"
3
3
  # Publish uses tag sdk-python/v*; CI stamps this for release builds.
4
- version = "1.2.0"
4
+ version = "1.2.1"
5
5
  description = "Python SDK for the Dex workflow engine"
6
6
  authors = [{name = "Super Durable"}]
7
7
  readme = "README.md"
File without changes
File without changes