dominus-sdk-python-dev 2.3.0__py3-none-any.whl → 2.4.0__py3-none-any.whl
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.
- dominus/__init__.py +69 -5
- dominus/helpers/cache.py +12 -4
- dominus/start.py +19 -32
- {dominus_sdk_python_dev-2.3.0.dist-info → dominus_sdk_python_dev-2.4.0.dist-info}/METADATA +10 -6
- {dominus_sdk_python_dev-2.3.0.dist-info → dominus_sdk_python_dev-2.4.0.dist-info}/RECORD +7 -7
- {dominus_sdk_python_dev-2.3.0.dist-info → dominus_sdk_python_dev-2.4.0.dist-info}/WHEEL +0 -0
- {dominus_sdk_python_dev-2.3.0.dist-info → dominus_sdk_python_dev-2.4.0.dist-info}/top_level.txt +0 -0
dominus/__init__.py
CHANGED
|
@@ -8,6 +8,10 @@ Ultra-Flat API:
|
|
|
8
8
|
value = await dominus.get("DB_URL")
|
|
9
9
|
await dominus.upsert("KEY", "value")
|
|
10
10
|
|
|
11
|
+
# Secrets namespace
|
|
12
|
+
value = await dominus.secrets.get("DB_URL")
|
|
13
|
+
await dominus.secrets.upsert("KEY", "value")
|
|
14
|
+
|
|
11
15
|
# Database (namespace-based)
|
|
12
16
|
tables = await dominus.db.tables()
|
|
13
17
|
rows = await dominus.db.query("users", filters={"status": "active"})
|
|
@@ -23,6 +27,16 @@ Ultra-Flat API:
|
|
|
23
27
|
# Files (namespace-based)
|
|
24
28
|
result = await dominus.files.upload(data=file_bytes, filename="report.pdf", category="reports")
|
|
25
29
|
|
|
30
|
+
# Redis caching
|
|
31
|
+
await dominus.redis.set("key", "value", ttl=3600)
|
|
32
|
+
value = await dominus.redis.get("key")
|
|
33
|
+
|
|
34
|
+
# Logging
|
|
35
|
+
await dominus.logs.info("Operation complete", {"user_id": user_id})
|
|
36
|
+
|
|
37
|
+
# Email
|
|
38
|
+
await dominus.courier.send("welcome", to="user@example.com", from_email="hello@app.com", model={})
|
|
39
|
+
|
|
26
40
|
# Secure table access with audit logging
|
|
27
41
|
rows = await dominus.db_secure.query("patients", context=SecureAccessContext(
|
|
28
42
|
reason="Reviewing chart",
|
|
@@ -35,11 +49,14 @@ Ultra-Flat API:
|
|
|
35
49
|
# Portal authentication
|
|
36
50
|
session = await dominus.portal.login("user@example.com", "password", "tenant-id")
|
|
37
51
|
|
|
38
|
-
# Open DSN
|
|
52
|
+
# Open DSN and raw SQL
|
|
39
53
|
dsn = await dominus.open.dsn()
|
|
54
|
+
result = await dominus.open.execute("SELECT * FROM users WHERE id = $1", {"1": user_id})
|
|
40
55
|
|
|
41
56
|
# Health
|
|
42
57
|
status = await dominus.health.check()
|
|
58
|
+
await dominus.health.ping()
|
|
59
|
+
await dominus.health.warmup()
|
|
43
60
|
|
|
44
61
|
Backward Compatible APIs:
|
|
45
62
|
# String-based API
|
|
@@ -76,11 +93,37 @@ from .namespaces.files import FilesNamespace
|
|
|
76
93
|
from .namespaces.portal import PortalNamespace
|
|
77
94
|
from .namespaces.admin import AdminNamespace
|
|
78
95
|
from .namespaces.secure import SecureNamespace, SecureAccessContext
|
|
96
|
+
from .namespaces.secrets import SecretsNamespace
|
|
97
|
+
from .namespaces.redis import RedisNamespace
|
|
98
|
+
from .namespaces.logs import LogsNamespace
|
|
99
|
+
from .namespaces.courier import CourierNamespace
|
|
100
|
+
from .namespaces.health import HealthNamespace
|
|
101
|
+
from .namespaces.open import OpenNamespace
|
|
102
|
+
|
|
103
|
+
# Export cache and resilience utilities
|
|
104
|
+
from .helpers.cache import (
|
|
105
|
+
dominus_cache,
|
|
106
|
+
CircuitBreaker,
|
|
107
|
+
DominusCache,
|
|
108
|
+
orchestrator_circuit_breaker,
|
|
109
|
+
exponential_backoff_with_jitter,
|
|
110
|
+
)
|
|
79
111
|
|
|
80
|
-
# Export
|
|
81
|
-
from .
|
|
112
|
+
# Export error classes
|
|
113
|
+
from .errors import (
|
|
114
|
+
DominusError,
|
|
115
|
+
AuthenticationError,
|
|
116
|
+
AuthorizationError,
|
|
117
|
+
NotFoundError,
|
|
118
|
+
ValidationError,
|
|
119
|
+
ConflictError,
|
|
120
|
+
ServiceError,
|
|
121
|
+
SecureTableError,
|
|
122
|
+
ConnectionError as DominusConnectionError,
|
|
123
|
+
TimeoutError as DominusTimeoutError,
|
|
124
|
+
)
|
|
82
125
|
|
|
83
|
-
__version__ = "2.
|
|
126
|
+
__version__ = "2.4.0"
|
|
84
127
|
__all__ = [
|
|
85
128
|
# Main SDK instance
|
|
86
129
|
"dominus",
|
|
@@ -103,6 +146,27 @@ __all__ = [
|
|
|
103
146
|
"AdminNamespace",
|
|
104
147
|
"SecureNamespace",
|
|
105
148
|
"SecureAccessContext",
|
|
106
|
-
|
|
149
|
+
"SecretsNamespace",
|
|
150
|
+
"RedisNamespace",
|
|
151
|
+
"LogsNamespace",
|
|
152
|
+
"CourierNamespace",
|
|
153
|
+
"HealthNamespace",
|
|
154
|
+
"OpenNamespace",
|
|
155
|
+
# Cache and resilience utilities
|
|
107
156
|
"dominus_cache",
|
|
157
|
+
"CircuitBreaker",
|
|
158
|
+
"DominusCache",
|
|
159
|
+
"orchestrator_circuit_breaker",
|
|
160
|
+
"exponential_backoff_with_jitter",
|
|
161
|
+
# Error classes
|
|
162
|
+
"DominusError",
|
|
163
|
+
"AuthenticationError",
|
|
164
|
+
"AuthorizationError",
|
|
165
|
+
"NotFoundError",
|
|
166
|
+
"ValidationError",
|
|
167
|
+
"ConflictError",
|
|
168
|
+
"ServiceError",
|
|
169
|
+
"SecureTableError",
|
|
170
|
+
"DominusConnectionError",
|
|
171
|
+
"DominusTimeoutError",
|
|
108
172
|
]
|
dominus/helpers/cache.py
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
"""
|
|
2
2
|
Internal cache with automatic encryption and circuit breaker.
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
Exports:
|
|
5
|
+
- CircuitBreaker: Circuit breaker class for resilience
|
|
6
|
+
- DominusCache: Encrypted cache class
|
|
7
|
+
- dominus_cache: Singleton cache instance
|
|
8
|
+
- orchestrator_circuit_breaker: Circuit breaker for orchestrator
|
|
9
|
+
- exponential_backoff_with_jitter: Backoff calculation utility
|
|
5
10
|
"""
|
|
6
11
|
import time
|
|
7
12
|
import json
|
|
@@ -181,12 +186,15 @@ class DominusCache:
|
|
|
181
186
|
return count
|
|
182
187
|
|
|
183
188
|
|
|
184
|
-
#
|
|
189
|
+
# Singleton instances
|
|
185
190
|
dominus_cache = DominusCache(default_ttl=300)
|
|
186
191
|
|
|
187
|
-
# Circuit
|
|
188
|
-
|
|
192
|
+
# Circuit breaker for orchestrator (prevents retry storms)
|
|
193
|
+
orchestrator_circuit_breaker = CircuitBreaker(
|
|
189
194
|
failure_threshold=5, # Open after 5 consecutive failures
|
|
190
195
|
recovery_timeout=30.0, # Try again after 30 seconds
|
|
191
196
|
half_open_max_calls=1 # Allow 1 test call in half-open state
|
|
192
197
|
)
|
|
198
|
+
|
|
199
|
+
# Backward compatibility alias
|
|
200
|
+
sovereign_circuit_breaker = orchestrator_circuit_breaker
|
dominus/start.py
CHANGED
|
@@ -251,31 +251,6 @@ class SecureNamespace:
|
|
|
251
251
|
)
|
|
252
252
|
|
|
253
253
|
|
|
254
|
-
class OpenNamespace:
|
|
255
|
-
"""Open user namespace - Returns DSN string for dominus_open database."""
|
|
256
|
-
|
|
257
|
-
def __init__(self, _execute_command):
|
|
258
|
-
self._execute = _execute_command
|
|
259
|
-
|
|
260
|
-
async def dsn(self) -> str:
|
|
261
|
-
"""
|
|
262
|
-
Get the full DSN connection string for open_user role.
|
|
263
|
-
|
|
264
|
-
Returns the complete PostgreSQL connection URI for the dominus_open
|
|
265
|
-
database that can be used directly by clients to connect.
|
|
266
|
-
"""
|
|
267
|
-
return await self._execute("sql.open.get_dsn")
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
class HealthNamespace:
|
|
271
|
-
"""Health check operations namespace."""
|
|
272
|
-
|
|
273
|
-
def __init__(self, _execute_command):
|
|
274
|
-
self._execute = _execute_command
|
|
275
|
-
|
|
276
|
-
async def check(self) -> Dict[str, Any]:
|
|
277
|
-
"""Check health of all services."""
|
|
278
|
-
return await self._execute("health.check")
|
|
279
254
|
|
|
280
255
|
|
|
281
256
|
class Dominus:
|
|
@@ -324,10 +299,8 @@ class Dominus:
|
|
|
324
299
|
|
|
325
300
|
self._execute = _execute_command
|
|
326
301
|
|
|
327
|
-
# Initialize
|
|
302
|
+
# Initialize legacy flat API namespaces (backward compatibility)
|
|
328
303
|
self.secure = SecureNamespace(_execute_command)
|
|
329
|
-
self.open = OpenNamespace(_execute_command)
|
|
330
|
-
self.health = HealthNamespace(_execute_command)
|
|
331
304
|
|
|
332
305
|
# Initialize portal namespace (needs client reference for _request)
|
|
333
306
|
from .namespaces.portal import PortalNamespace
|
|
@@ -337,22 +310,36 @@ class Dominus:
|
|
|
337
310
|
from .namespaces.fastapi import FastAPINamespace
|
|
338
311
|
self.fastapi = FastAPINamespace(self)
|
|
339
312
|
|
|
340
|
-
# Initialize
|
|
313
|
+
# Initialize all namespaces (matching Node.js SDK pattern)
|
|
341
314
|
from .namespaces.db import DbNamespace
|
|
342
315
|
from .namespaces.auth import AuthNamespace
|
|
343
316
|
from .namespaces.ddl import DdlNamespace
|
|
344
317
|
from .namespaces.files import FilesNamespace
|
|
345
318
|
from .namespaces.admin import AdminNamespace
|
|
346
319
|
from .namespaces.secure import SecureNamespace as SecureNS
|
|
347
|
-
|
|
320
|
+
from .namespaces.secrets import SecretsNamespace
|
|
321
|
+
from .namespaces.redis import RedisNamespace
|
|
322
|
+
from .namespaces.logs import LogsNamespace
|
|
323
|
+
from .namespaces.courier import CourierNamespace
|
|
324
|
+
from .namespaces.health import HealthNamespace
|
|
325
|
+
from .namespaces.open import OpenNamespace
|
|
326
|
+
|
|
327
|
+
# Core namespaces
|
|
348
328
|
self.db = DbNamespace(self)
|
|
349
329
|
self.auth = AuthNamespace(self)
|
|
350
330
|
self.ddl = DdlNamespace(self)
|
|
351
331
|
self.files = FilesNamespace(self)
|
|
352
332
|
self.admin = AdminNamespace(self)
|
|
353
333
|
|
|
354
|
-
#
|
|
355
|
-
|
|
334
|
+
# Additional namespaces (Node.js SDK parity)
|
|
335
|
+
self.secrets = SecretsNamespace(self)
|
|
336
|
+
self.redis = RedisNamespace(self)
|
|
337
|
+
self.logs = LogsNamespace(self)
|
|
338
|
+
self.courier = CourierNamespace(self)
|
|
339
|
+
self.health = HealthNamespace(self)
|
|
340
|
+
self.open = OpenNamespace(self)
|
|
341
|
+
|
|
342
|
+
# Secure namespace with proper audit context support
|
|
356
343
|
self.db_secure = SecureNS(self)
|
|
357
344
|
|
|
358
345
|
# Cache for JWT public key
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dominus-sdk-python-dev
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4.0
|
|
4
4
|
Summary: Python SDK for the Dominus Orchestrator Platform
|
|
5
5
|
Author-email: CareBridge Systems <dev@carebridge.io>
|
|
6
6
|
License: Proprietary
|
|
@@ -417,8 +417,8 @@ from dominus import (
|
|
|
417
417
|
ConflictError,
|
|
418
418
|
ServiceError,
|
|
419
419
|
SecureTableError,
|
|
420
|
-
|
|
421
|
-
|
|
420
|
+
DominusConnectionError, # Renamed to avoid shadowing built-in
|
|
421
|
+
DominusTimeoutError, # Renamed to avoid shadowing built-in
|
|
422
422
|
)
|
|
423
423
|
|
|
424
424
|
try:
|
|
@@ -445,6 +445,7 @@ except DominusError as e:
|
|
|
445
445
|
|
|
446
446
|
| Error | Status | Description |
|
|
447
447
|
|-------|--------|-------------|
|
|
448
|
+
| `DominusError` | - | Base class for all SDK errors |
|
|
448
449
|
| `AuthenticationError` | 401 | Invalid or missing token |
|
|
449
450
|
| `AuthorizationError` | 403 | Insufficient permissions |
|
|
450
451
|
| `NotFoundError` | 404 | Resource not found |
|
|
@@ -452,8 +453,8 @@ except DominusError as e:
|
|
|
452
453
|
| `ConflictError` | 409 | Duplicate or version conflict |
|
|
453
454
|
| `ServiceError` | 5xx | Backend service error |
|
|
454
455
|
| `SecureTableError` | 403 | Missing reason for secure table |
|
|
455
|
-
| `
|
|
456
|
-
| `
|
|
456
|
+
| `DominusConnectionError` | - | Network connection failed |
|
|
457
|
+
| `DominusTimeoutError` | 504 | Request timed out |
|
|
457
458
|
|
|
458
459
|
## Configuration
|
|
459
460
|
|
|
@@ -551,10 +552,13 @@ async def get_all_users(page_size: int = 100):
|
|
|
551
552
|
|
|
552
553
|
## Version
|
|
553
554
|
|
|
554
|
-
**v2.
|
|
555
|
+
**v2.4.0** - Full namespace parity with Node.js SDK
|
|
555
556
|
|
|
556
557
|
### Changelog
|
|
557
558
|
|
|
559
|
+
- **v2.4.0** - Full parity with Node.js SDK: all namespaces properly initialized, error classes exported, cache utilities exposed
|
|
560
|
+
- **v2.3.0** - Add comprehensive auth namespace with 100+ methods
|
|
561
|
+
- **v2.2.0** - Add DDL schema builder and migration methods
|
|
558
562
|
- **v2.1.6** - Fix navigation routes and add page scope methods
|
|
559
563
|
- **v2.1.5** - Add PSK-only client login
|
|
560
564
|
- **v2.1.4** - Make `tenant_id` optional in login methods
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
dominus/__init__.py,sha256
|
|
1
|
+
dominus/__init__.py,sha256=_gX9fwk5BlNvP1YEEmOGG7pftBiJYnY8PRZ9sHAoZL4,4841
|
|
2
2
|
dominus/errors.py,sha256=Sfpg_4zlraE6fprdSu7RDNmSDv0Eg5OZRcPhNUQhNGs,5761
|
|
3
|
-
dominus/start.py,sha256=
|
|
3
|
+
dominus/start.py,sha256=H6QOEYw5_YK-lFZ7AhQpQPACvKPlb8R5sw_MA0rcsmQ,32503
|
|
4
4
|
dominus/config/__init__.py,sha256=nvLLNh4dM_MCqcfF3XFS2NnVn44q0RYHEfAPP-2G5To,434
|
|
5
5
|
dominus/config/endpoints.py,sha256=fsV5c7vaicpJlF735o46FP4Xlu2Ap4rSvnNa4F0TOYg,1574
|
|
6
6
|
dominus/helpers/__init__.py,sha256=cyoBvw1QJugtGt0gYitIz1yxOaMmBa-wMXqbh-fi4PU,61
|
|
7
7
|
dominus/helpers/auth.py,sha256=IVZLelikaGIAZvyc-q7EoPd8fBNVlGffGXQkTP4x5Fk,633
|
|
8
|
-
dominus/helpers/cache.py,sha256=
|
|
8
|
+
dominus/helpers/cache.py,sha256=RgCTPLmHoOXGkxF-pLP9buKPkvZDYHtsLUxbTFjheJI,6028
|
|
9
9
|
dominus/helpers/core.py,sha256=DeCo2sCmXJLnitJSDzRKcQGwYXyQOw1KRvzxDI6DQsA,24174
|
|
10
10
|
dominus/helpers/crypto.py,sha256=XvP9ud5jJ9KPvIQmtAOeXZS4WUyCNb8X-RL_eOB7WNE,2890
|
|
11
11
|
dominus/namespaces/__init__.py,sha256=Kh7tw-5LmY-CpZL2BdqbHc93QLjxTOCGLUVPwAqqDnE,659
|
|
@@ -28,7 +28,7 @@ dominus/namespaces/secure.py,sha256=9idGY5R6k7b-JM1SAF_1Gt-YV5OempyxFBflgLJieLo,
|
|
|
28
28
|
dominus/services/__init__.py,sha256=LQl5sx6DHhX1xCN3MRoUgffxqwm3Mfm525hijyFods8,43
|
|
29
29
|
dominus/services/_deprecated_architect.py,sha256=EAMhUK8C_4DLgYyKGVqcXrroEoAenWeuKWnPMowGMQk,14985
|
|
30
30
|
dominus/services/_deprecated_sovereign.py,sha256=is9SQVCcmcGUEFKULqitHlk67pfpfkQE-ApU-gVjIEE,3511
|
|
31
|
-
dominus_sdk_python_dev-2.
|
|
32
|
-
dominus_sdk_python_dev-2.
|
|
33
|
-
dominus_sdk_python_dev-2.
|
|
34
|
-
dominus_sdk_python_dev-2.
|
|
31
|
+
dominus_sdk_python_dev-2.4.0.dist-info/METADATA,sha256=yKb6wAvg7axw31k6XZ20krPsnoJCknhMo1JQMcoFvbg,16918
|
|
32
|
+
dominus_sdk_python_dev-2.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
33
|
+
dominus_sdk_python_dev-2.4.0.dist-info/top_level.txt,sha256=515zxMIbX0DpheRbjvNqKIt_AFqdFjX41jtyp_SqLf4,8
|
|
34
|
+
dominus_sdk_python_dev-2.4.0.dist-info/RECORD,,
|
|
File without changes
|
{dominus_sdk_python_dev-2.3.0.dist-info → dominus_sdk_python_dev-2.4.0.dist-info}/top_level.txt
RENAMED
|
File without changes
|