python-saga-orchestrator 0.1.0__tar.gz → 0.1.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 (30) hide show
  1. {python_saga_orchestrator-0.1.0/python_saga_orchestrator.egg-info → python_saga_orchestrator-0.1.1}/PKG-INFO +22 -6
  2. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/README.md +21 -5
  3. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/pyproject.toml +1 -1
  4. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1/python_saga_orchestrator.egg-info}/PKG-INFO +22 -6
  5. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/__init__.py +0 -3
  6. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/core/engine.py +5 -1
  7. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/LICENSE +0 -0
  8. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/python_saga_orchestrator.egg-info/SOURCES.txt +0 -0
  9. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/python_saga_orchestrator.egg-info/dependency_links.txt +0 -0
  10. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/python_saga_orchestrator.egg-info/requires.txt +0 -0
  11. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/python_saga_orchestrator.egg-info/top_level.txt +0 -0
  12. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/admin/__init__.py +0 -0
  13. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/admin/api.py +0 -0
  14. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/core/__init__.py +0 -0
  15. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/core/builder.py +0 -0
  16. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/core/orchestrator.py +0 -0
  17. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/core/repository.py +0 -0
  18. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/domain/__init__.py +0 -0
  19. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/domain/exceptions/__init__.py +0 -0
  20. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/domain/exceptions/saga.py +0 -0
  21. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/domain/mixins/__init__.py +0 -0
  22. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/domain/mixins/saga_state.py +0 -0
  23. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/domain/models/__init__.py +0 -0
  24. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/domain/models/builder.py +0 -0
  25. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/domain/models/enums/__init__.py +0 -0
  26. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/domain/models/enums/saga_status.py +0 -0
  27. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/domain/models/retry.py +0 -0
  28. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/domain/models/saga_snapshot.py +0 -0
  29. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/saga_orchestrator/domain/models/step.py +0 -0
  30. {python_saga_orchestrator-0.1.0 → python_saga_orchestrator-0.1.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-saga-orchestrator
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: Lightweight embedded saga orchestrator for asyncio Python services
5
5
  Author-email: Maxim Vasilyev <mayxis@inbox.ru>
6
6
  License-Expression: MIT
@@ -60,16 +60,28 @@ Requirements:
60
60
  - Python 3.12+
61
61
  - PostgreSQL for production-grade execution semantics
62
62
 
63
- Install from source:
63
+ Install from PyPI:
64
+
65
+ ```bash
66
+ pip install python-saga-orchestrator
67
+ ```
68
+
69
+ Or with `uv`:
70
+
71
+ ```bash
72
+ uv pip install python-saga-orchestrator
73
+ ```
74
+
75
+ Install from the repository source:
64
76
 
65
77
  ```bash
66
78
  pip install .
67
79
  ```
68
80
 
69
- Or install development dependencies:
81
+ For local development:
70
82
 
71
83
  ```bash
72
- pip install .[dev]
84
+ pip install '.[dev]'
73
85
  ```
74
86
 
75
87
  ## Core concepts
@@ -306,9 +318,13 @@ SQLite may be sufficient for local experiments, but PostgreSQL should be used fo
306
318
 
307
319
  A runnable end-to-end example is available in:
308
320
 
309
- - [`test.py`](./test.py)
321
+ - [`examples/llm_deploy.py`](./examples/llm_deploy.py)
322
+ - [`examples/retry_recovery.py`](./examples/retry_recovery.py)
323
+ - [`examples/compensation_flow.py`](./examples/compensation_flow.py)
324
+ - [`examples/admin_skip.py`](./examples/admin_skip.py)
310
325
 
311
- It demonstrates:
326
+ These examples demonstrate:
327
+ - basic model deployment
312
328
  - retry and recovery through `run_due()`
313
329
  - compensation after failure
314
330
  - admin-driven step skipping
@@ -26,16 +26,28 @@ Requirements:
26
26
  - Python 3.12+
27
27
  - PostgreSQL for production-grade execution semantics
28
28
 
29
- Install from source:
29
+ Install from PyPI:
30
+
31
+ ```bash
32
+ pip install python-saga-orchestrator
33
+ ```
34
+
35
+ Or with `uv`:
36
+
37
+ ```bash
38
+ uv pip install python-saga-orchestrator
39
+ ```
40
+
41
+ Install from the repository source:
30
42
 
31
43
  ```bash
32
44
  pip install .
33
45
  ```
34
46
 
35
- Or install development dependencies:
47
+ For local development:
36
48
 
37
49
  ```bash
38
- pip install .[dev]
50
+ pip install '.[dev]'
39
51
  ```
40
52
 
41
53
  ## Core concepts
@@ -272,9 +284,13 @@ SQLite may be sufficient for local experiments, but PostgreSQL should be used fo
272
284
 
273
285
  A runnable end-to-end example is available in:
274
286
 
275
- - [`test.py`](./test.py)
287
+ - [`examples/llm_deploy.py`](./examples/llm_deploy.py)
288
+ - [`examples/retry_recovery.py`](./examples/retry_recovery.py)
289
+ - [`examples/compensation_flow.py`](./examples/compensation_flow.py)
290
+ - [`examples/admin_skip.py`](./examples/admin_skip.py)
276
291
 
277
- It demonstrates:
292
+ These examples demonstrate:
293
+ - basic model deployment
278
294
  - retry and recovery through `run_due()`
279
295
  - compensation after failure
280
296
  - admin-driven step skipping
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "python-saga-orchestrator"
7
- version = "0.1.0"
7
+ version = "0.1.1"
8
8
  description = "Lightweight embedded saga orchestrator for asyncio Python services"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-saga-orchestrator
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: Lightweight embedded saga orchestrator for asyncio Python services
5
5
  Author-email: Maxim Vasilyev <mayxis@inbox.ru>
6
6
  License-Expression: MIT
@@ -60,16 +60,28 @@ Requirements:
60
60
  - Python 3.12+
61
61
  - PostgreSQL for production-grade execution semantics
62
62
 
63
- Install from source:
63
+ Install from PyPI:
64
+
65
+ ```bash
66
+ pip install python-saga-orchestrator
67
+ ```
68
+
69
+ Or with `uv`:
70
+
71
+ ```bash
72
+ uv pip install python-saga-orchestrator
73
+ ```
74
+
75
+ Install from the repository source:
64
76
 
65
77
  ```bash
66
78
  pip install .
67
79
  ```
68
80
 
69
- Or install development dependencies:
81
+ For local development:
70
82
 
71
83
  ```bash
72
- pip install .[dev]
84
+ pip install '.[dev]'
73
85
  ```
74
86
 
75
87
  ## Core concepts
@@ -306,9 +318,13 @@ SQLite may be sufficient for local experiments, but PostgreSQL should be used fo
306
318
 
307
319
  A runnable end-to-end example is available in:
308
320
 
309
- - [`test.py`](./test.py)
321
+ - [`examples/llm_deploy.py`](./examples/llm_deploy.py)
322
+ - [`examples/retry_recovery.py`](./examples/retry_recovery.py)
323
+ - [`examples/compensation_flow.py`](./examples/compensation_flow.py)
324
+ - [`examples/admin_skip.py`](./examples/admin_skip.py)
310
325
 
311
- It demonstrates:
326
+ These examples demonstrate:
327
+ - basic model deployment
312
328
  - retry and recovery through `run_due()`
313
329
  - compensation after failure
314
330
  - admin-driven step skipping
@@ -26,8 +26,6 @@ from .domain.models import (
26
26
  )
27
27
  from .domain.models.enums import SagaStatus
28
28
 
29
- __version__ = "0.1.0"
30
-
31
29
  __all__ = [
32
30
  "ActiveSagaAlreadyExistsError",
33
31
  "BaseStep",
@@ -53,5 +51,4 @@ __all__ = [
53
51
  "StepInputMap",
54
52
  "StepRef",
55
53
  "TypeValidationError",
56
- "__version__",
57
54
  ]
@@ -471,7 +471,11 @@ class SagaEngine(Generic[ModelT]):
471
471
  saga.status = SagaStatus.COMPLETED
472
472
  return saga.status == SagaStatus.RUNNING
473
473
 
474
- assert error is not None
474
+ if error is None:
475
+ raise SagaStateError(
476
+ "Step finalization expected either a successful output "
477
+ "or an execution error"
478
+ )
475
479
  saga.step_history.append(
476
480
  self._history_entry(
477
481
  phase="execute",