dominus-sdk-python 4.0.6__tar.gz → 4.0.7__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 (58) hide show
  1. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/PKG-INFO +4 -2
  2. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/README.md +3 -1
  3. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/__init__.py +1 -1
  4. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/auth.py +9 -2
  5. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus_sdk_python.egg-info/PKG-INFO +4 -2
  6. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/pyproject.toml +1 -1
  7. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/tests/test_auth.py +47 -1
  8. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/config/__init__.py +0 -0
  9. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/config/endpoints.py +0 -0
  10. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/errors.py +0 -0
  11. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/helpers/__init__.py +0 -0
  12. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/helpers/auth.py +0 -0
  13. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/helpers/cache.py +0 -0
  14. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/helpers/console_capture.py +0 -0
  15. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/helpers/core.py +0 -0
  16. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/helpers/crypto.py +0 -0
  17. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/helpers/sse.py +0 -0
  18. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/helpers/trace.py +0 -0
  19. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/__init__.py +0 -0
  20. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/admin.py +0 -0
  21. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/ai.py +0 -0
  22. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/artifacts.py +0 -0
  23. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/authority.py +0 -0
  24. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/courier.py +0 -0
  25. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/db.py +0 -0
  26. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/ddl.py +0 -0
  27. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/deployer.py +0 -0
  28. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/fastapi.py +0 -0
  29. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/files.py +0 -0
  30. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/health.py +0 -0
  31. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/jobs.py +0 -0
  32. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/logs.py +0 -0
  33. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/portal.py +0 -0
  34. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/processor.py +0 -0
  35. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/redis.py +0 -0
  36. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/secrets.py +0 -0
  37. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/secure.py +0 -0
  38. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/sync.py +0 -0
  39. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/warden.py +0 -0
  40. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/namespaces/workflow.py +0 -0
  41. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/services/__init__.py +0 -0
  42. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus/start.py +0 -0
  43. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus_sdk_python.egg-info/SOURCES.txt +0 -0
  44. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus_sdk_python.egg-info/dependency_links.txt +0 -0
  45. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus_sdk_python.egg-info/requires.txt +0 -0
  46. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/dominus_sdk_python.egg-info/top_level.txt +0 -0
  47. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/setup.cfg +0 -0
  48. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/tests/test_authority_public_vocabulary.py +0 -0
  49. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/tests/test_control_plane_namespaces.py +0 -0
  50. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/tests/test_errors.py +0 -0
  51. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/tests/test_flat_commands.py +0 -0
  52. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/tests/test_health.py +0 -0
  53. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/tests/test_logs.py +0 -0
  54. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/tests/test_provisioning_parity.py +0 -0
  55. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/tests/test_public_exports.py +0 -0
  56. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/tests/test_transport_compat.py +0 -0
  57. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/tests/test_workflow_lifecycle.py +0 -0
  58. {dominus_sdk_python-4.0.6 → dominus_sdk_python-4.0.7}/tests/test_workflow_refs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dominus-sdk-python
3
- Version: 4.0.6
3
+ Version: 4.0.7
4
4
  Summary: Python SDK for the Dominus gateway-first platform
5
5
  Author-email: CareBridge Systems <dev@carebridge.io>
6
6
  License: Proprietary
@@ -42,7 +42,7 @@ Async Python SDK for the Dominus gateway-first service plane.
42
42
  - Gateway-scoped client mode for MCP and other user-JWT sessions
43
43
  - Transport compatibility for wrapped `{success,data}` responses and unwrapped Warden/control-plane success objects
44
44
  - Local helpers for JWT verification, trace propagation, retries, and console capture
45
- - Current package version: `4.0.6`
45
+ - Current package version: `4.0.7`
46
46
 
47
47
  ## Install
48
48
 
@@ -185,6 +185,8 @@ operations:
185
185
 
186
186
  New code should prefer namespace APIs.
187
187
 
188
+ Guardian navigation helpers expose nav-row `path` on `create_nav_item()` and `update_nav_item()`. Use that field when a sidebar item must route to a concrete URL independent of, or more specific than, the linked Guardian page row.
189
+
188
190
  ## Documentation
189
191
 
190
192
  - [Architecture](docs/architecture.md) - request flow, gateway routing, resilience
@@ -9,7 +9,7 @@ Async Python SDK for the Dominus gateway-first service plane.
9
9
  - Gateway-scoped client mode for MCP and other user-JWT sessions
10
10
  - Transport compatibility for wrapped `{success,data}` responses and unwrapped Warden/control-plane success objects
11
11
  - Local helpers for JWT verification, trace propagation, retries, and console capture
12
- - Current package version: `4.0.6`
12
+ - Current package version: `4.0.7`
13
13
 
14
14
  ## Install
15
15
 
@@ -152,6 +152,8 @@ operations:
152
152
 
153
153
  New code should prefer namespace APIs.
154
154
 
155
+ Guardian navigation helpers expose nav-row `path` on `create_nav_item()` and `update_nav_item()`. Use that field when a sidebar item must route to a concrete URL independent of, or more specific than, the linked Guardian page row.
156
+
155
157
  ## Documentation
156
158
 
157
159
  - [Architecture](docs/architecture.md) - request flow, gateway routing, resilience
@@ -163,7 +163,7 @@ from .errors import (
163
163
  TimeoutError as DominusTimeoutError,
164
164
  )
165
165
 
166
- __version__ = "4.0.5"
166
+ __version__ = "4.0.7"
167
167
  __all__ = [
168
168
  # Main SDK instance
169
169
  "dominus",
@@ -1421,7 +1421,8 @@ class AuthNamespace:
1421
1421
  item_type: str = "link",
1422
1422
  is_active: bool = True,
1423
1423
  sort_order: int = 0,
1424
- is_expanded_default: bool = False
1424
+ is_expanded_default: bool = False,
1425
+ path: Optional[str] = None
1425
1426
  ) -> Dict[str, Any]:
1426
1427
  """
1427
1428
  Create a new navigation item.
@@ -1436,6 +1437,7 @@ class AuthNamespace:
1436
1437
  is_active: Whether item is active
1437
1438
  sort_order: Sort position
1438
1439
  is_expanded_default: Whether group is expanded by default
1440
+ path: Direct navigation path. When set, Portal may use it instead of the linked page path.
1439
1441
  """
1440
1442
  body = {
1441
1443
  "title": title,
@@ -1444,6 +1446,8 @@ class AuthNamespace:
1444
1446
  "is_active": is_active,
1445
1447
  "is_expanded_default": is_expanded_default
1446
1448
  }
1449
+ if path:
1450
+ body["path"] = path
1447
1451
  if icon:
1448
1452
  body["icon"] = icon
1449
1453
  if description:
@@ -1515,12 +1519,15 @@ class AuthNamespace:
1515
1519
  item_type: Optional[str] = None,
1516
1520
  is_active: Optional[bool] = None,
1517
1521
  sort_order: Optional[int] = None,
1518
- is_expanded_default: Optional[bool] = None
1522
+ is_expanded_default: Optional[bool] = None,
1523
+ path: Optional[str] = None
1519
1524
  ) -> Dict[str, Any]:
1520
1525
  """Update navigation item."""
1521
1526
  body = {}
1522
1527
  if title is not None:
1523
1528
  body["title"] = title
1529
+ if path is not None:
1530
+ body["path"] = path
1524
1531
  if icon is not None:
1525
1532
  body["icon"] = icon
1526
1533
  if description is not None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dominus-sdk-python
3
- Version: 4.0.6
3
+ Version: 4.0.7
4
4
  Summary: Python SDK for the Dominus gateway-first platform
5
5
  Author-email: CareBridge Systems <dev@carebridge.io>
6
6
  License: Proprietary
@@ -42,7 +42,7 @@ Async Python SDK for the Dominus gateway-first service plane.
42
42
  - Gateway-scoped client mode for MCP and other user-JWT sessions
43
43
  - Transport compatibility for wrapped `{success,data}` responses and unwrapped Warden/control-plane success objects
44
44
  - Local helpers for JWT verification, trace propagation, retries, and console capture
45
- - Current package version: `4.0.6`
45
+ - Current package version: `4.0.7`
46
46
 
47
47
  ## Install
48
48
 
@@ -185,6 +185,8 @@ operations:
185
185
 
186
186
  New code should prefer namespace APIs.
187
187
 
188
+ Guardian navigation helpers expose nav-row `path` on `create_nav_item()` and `update_nav_item()`. Use that field when a sidebar item must route to a concrete URL independent of, or more specific than, the linked Guardian page row.
189
+
188
190
  ## Documentation
189
191
 
190
192
  - [Architecture](docs/architecture.md) - request flow, gateway routing, resilience
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dominus-sdk-python"
7
- version = "4.0.6"
7
+ version = "4.0.7"
8
8
  description = "Python SDK for the Dominus gateway-first platform"
9
9
  readme = "README.md"
10
10
  license = {text = "Proprietary"}
@@ -40,7 +40,12 @@ class FakeAsyncClient:
40
40
 
41
41
 
42
42
  class FakeClient:
43
- pass
43
+ def __init__(self):
44
+ self.calls = []
45
+
46
+ async def _request(self, **kwargs):
47
+ self.calls.append(kwargs)
48
+ return {"ok": True}
44
49
 
45
50
 
46
51
  @pytest.mark.asyncio
@@ -59,3 +64,44 @@ async def test_get_jwks_uses_gateway_jwt_route_and_caches(monkeypatch):
59
64
  assert second == first
60
65
  assert len(FakeAsyncClient.calls) == 1
61
66
  assert FakeAsyncClient.calls[0]["url"] == "https://gateway.example/jwt/jwks"
67
+
68
+
69
+ @pytest.mark.asyncio
70
+ async def test_nav_item_helpers_write_guardian_navigation_path():
71
+ client = FakeClient()
72
+ namespace = AuthNamespace(client)
73
+
74
+ await namespace.create_nav_item(
75
+ title="Structured Reporting",
76
+ path="/dashboard/radiologist/structured-reporting",
77
+ page_id="page-1",
78
+ icon="ListChecks",
79
+ )
80
+ await namespace.update_nav_item(
81
+ "nav-1",
82
+ path="/dashboard/radiologist/procedure-settings",
83
+ page_id="page-2",
84
+ )
85
+
86
+ assert client.calls[0]["endpoint"] == "/api/guardian/nav-items"
87
+ assert client.calls[0]["body"]["path"] == "/dashboard/radiologist/structured-reporting"
88
+ assert client.calls[0]["body"]["page_id"] == "page-1"
89
+ assert client.calls[1]["endpoint"] == "/api/guardian/nav-items/nav-1"
90
+ assert client.calls[1]["method"] == "PUT"
91
+ assert client.calls[1]["body"]["path"] == "/dashboard/radiologist/procedure-settings"
92
+ assert client.calls[1]["body"]["page_id"] == "page-2"
93
+
94
+
95
+ @pytest.mark.asyncio
96
+ async def test_nav_item_helpers_preserve_positional_icon_compatibility():
97
+ client = FakeClient()
98
+ namespace = AuthNamespace(client)
99
+
100
+ await namespace.create_nav_item("Structured Reporting", "ListChecks")
101
+ await namespace.update_nav_item("nav-1", "Procedure Settings", "ClipboardList")
102
+
103
+ assert client.calls[0]["body"]["icon"] == "ListChecks"
104
+ assert "path" not in client.calls[0]["body"]
105
+ assert client.calls[1]["body"]["title"] == "Procedure Settings"
106
+ assert client.calls[1]["body"]["icon"] == "ClipboardList"
107
+ assert "path" not in client.calls[1]["body"]