dominus-sdk-python 2.10.0__tar.gz → 2.11.0__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.
- dominus_sdk_python-2.11.0/PKG-INFO +92 -0
- dominus_sdk_python-2.11.0/README.md +50 -0
- dominus_sdk_python-2.11.0/dominus/helpers/console_capture.py +164 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/auth.py +12 -1
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/start.py +22 -0
- dominus_sdk_python-2.11.0/dominus_sdk_python.egg-info/PKG-INFO +92 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus_sdk_python.egg-info/SOURCES.txt +1 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/pyproject.toml +1 -1
- dominus_sdk_python-2.10.0/PKG-INFO +0 -583
- dominus_sdk_python-2.10.0/README.md +0 -541
- dominus_sdk_python-2.10.0/dominus_sdk_python.egg-info/PKG-INFO +0 -583
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/__init__.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/config/__init__.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/config/endpoints.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/errors.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/helpers/__init__.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/helpers/auth.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/helpers/cache.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/helpers/core.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/helpers/crypto.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/helpers/sse.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/__init__.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/admin.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/ai.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/courier.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/db.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/ddl.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/fastapi.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/files.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/health.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/logs.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/open.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/oracle/__init__.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/oracle/audio_capture.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/oracle/oracle_websocket.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/oracle/session.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/oracle/types.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/oracle/vad_gate.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/portal.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/redis.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/secrets.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/secure.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/namespaces/workflow.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus/services/__init__.py +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus_sdk_python.egg-info/dependency_links.txt +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus_sdk_python.egg-info/requires.txt +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/dominus_sdk_python.egg-info/top_level.txt +0 -0
- {dominus_sdk_python-2.10.0 → dominus_sdk_python-2.11.0}/setup.cfg +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dominus-sdk-python
|
|
3
|
+
Version: 2.11.0
|
|
4
|
+
Summary: Python SDK for the Dominus Orchestrator Platform
|
|
5
|
+
Author-email: CareBridge Systems <dev@carebridge.io>
|
|
6
|
+
License: Proprietary
|
|
7
|
+
Project-URL: Homepage, https://github.com/carebridgesystems/dominus-sdk-python
|
|
8
|
+
Project-URL: Repository, https://github.com/carebridgesystems/dominus-sdk-python
|
|
9
|
+
Keywords: dominus,carebridge,sdk,orchestrator,api,async
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: Other/Proprietary License
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
20
|
+
Classifier: Framework :: AsyncIO
|
|
21
|
+
Requires-Python: >=3.9
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
Requires-Dist: httpx>=0.24.0
|
|
24
|
+
Requires-Dist: bcrypt>=4.0.0
|
|
25
|
+
Requires-Dist: cryptography>=41.0.0
|
|
26
|
+
Provides-Extra: jwt
|
|
27
|
+
Requires-Dist: PyJWT>=2.8.0; extra == "jwt"
|
|
28
|
+
Provides-Extra: oracle
|
|
29
|
+
Requires-Dist: websockets>=12.0; extra == "oracle"
|
|
30
|
+
Requires-Dist: sounddevice>=0.4.6; extra == "oracle"
|
|
31
|
+
Requires-Dist: numpy>=1.24.0; extra == "oracle"
|
|
32
|
+
Requires-Dist: webrtcvad>=2.0.10; extra == "oracle"
|
|
33
|
+
Provides-Extra: dev
|
|
34
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
36
|
+
Provides-Extra: all
|
|
37
|
+
Requires-Dist: PyJWT>=2.8.0; extra == "all"
|
|
38
|
+
Requires-Dist: websockets>=12.0; extra == "all"
|
|
39
|
+
Requires-Dist: sounddevice>=0.4.6; extra == "all"
|
|
40
|
+
Requires-Dist: numpy>=1.24.0; extra == "all"
|
|
41
|
+
Requires-Dist: webrtcvad>=2.0.10; extra == "all"
|
|
42
|
+
|
|
43
|
+
# Dominus SDK for Python
|
|
44
|
+
|
|
45
|
+
Async Python SDK for CareBridge Dominus services. It routes service calls to the Dominus Orchestrator and handles gateway-based JWT minting, base64 encoding, retries, and circuit breaking.
|
|
46
|
+
|
|
47
|
+
## What This Is
|
|
48
|
+
- Server-side, asyncio-first Python SDK (3.9+)
|
|
49
|
+
- Namespace API plus ultra-flat root shortcuts for common operations
|
|
50
|
+
- Defaults to production orchestrator + gateway endpoints (configurable)
|
|
51
|
+
|
|
52
|
+
## Quick Start
|
|
53
|
+
```python
|
|
54
|
+
import os
|
|
55
|
+
from dominus import dominus
|
|
56
|
+
|
|
57
|
+
os.environ["DOMINUS_TOKEN"] = "your-psk-token"
|
|
58
|
+
|
|
59
|
+
users = await dominus.db.query("users", filters={"status": "active"})
|
|
60
|
+
await dominus.redis.set("session:123", {"user": "john"}, ttl=3600)
|
|
61
|
+
file = await dominus.files.upload(data=buf, filename="report.pdf", category="reports")
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Architecture (SDK View)
|
|
65
|
+
- DOMINUS_TOKEN (PSK) -> Gateway `/jwt/mint` -> JWT cached in `dominus_cache`
|
|
66
|
+
- JSON requests/responses are base64-encoded for auth-required routes
|
|
67
|
+
- GET requests send no body; parameters are in path or POST body
|
|
68
|
+
- Gateway routing is optional per-request; AI namespace always uses gateway
|
|
69
|
+
|
|
70
|
+
## Namespaces
|
|
71
|
+
- `secrets`, `db`, `secure`, `redis`, `files`, `auth`, `ddl`, `logs`, `portal`, `courier`, `open`, `health`
|
|
72
|
+
- `admin` (reseed/reset admin category)
|
|
73
|
+
- `ai` (agent-runtime: LLM, RAG, artifacts, results, orchestration, speech)
|
|
74
|
+
- `workflow` (workflow-manager CRUD and execution)
|
|
75
|
+
- `oracle` / `stt` (streaming speech-to-text sessions)
|
|
76
|
+
|
|
77
|
+
## Configuration
|
|
78
|
+
Required:
|
|
79
|
+
- `DOMINUS_TOKEN`
|
|
80
|
+
|
|
81
|
+
Optional:
|
|
82
|
+
- `DOMINUS_GATEWAY_URL` (default production gateway)
|
|
83
|
+
- `DOMINUS_BASE_URL` (default production orchestrator)
|
|
84
|
+
- `DOMINUS_HTTP_PROXY` / `DOMINUS_HTTPS_PROXY` (httpx proxies)
|
|
85
|
+
|
|
86
|
+
## Documentation
|
|
87
|
+
- `docs/architecture.md`
|
|
88
|
+
- `docs/namespaces.md`
|
|
89
|
+
- `docs/development.md`
|
|
90
|
+
|
|
91
|
+
## License
|
|
92
|
+
Proprietary - CareBridge Systems
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Dominus SDK for Python
|
|
2
|
+
|
|
3
|
+
Async Python SDK for CareBridge Dominus services. It routes service calls to the Dominus Orchestrator and handles gateway-based JWT minting, base64 encoding, retries, and circuit breaking.
|
|
4
|
+
|
|
5
|
+
## What This Is
|
|
6
|
+
- Server-side, asyncio-first Python SDK (3.9+)
|
|
7
|
+
- Namespace API plus ultra-flat root shortcuts for common operations
|
|
8
|
+
- Defaults to production orchestrator + gateway endpoints (configurable)
|
|
9
|
+
|
|
10
|
+
## Quick Start
|
|
11
|
+
```python
|
|
12
|
+
import os
|
|
13
|
+
from dominus import dominus
|
|
14
|
+
|
|
15
|
+
os.environ["DOMINUS_TOKEN"] = "your-psk-token"
|
|
16
|
+
|
|
17
|
+
users = await dominus.db.query("users", filters={"status": "active"})
|
|
18
|
+
await dominus.redis.set("session:123", {"user": "john"}, ttl=3600)
|
|
19
|
+
file = await dominus.files.upload(data=buf, filename="report.pdf", category="reports")
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Architecture (SDK View)
|
|
23
|
+
- DOMINUS_TOKEN (PSK) -> Gateway `/jwt/mint` -> JWT cached in `dominus_cache`
|
|
24
|
+
- JSON requests/responses are base64-encoded for auth-required routes
|
|
25
|
+
- GET requests send no body; parameters are in path or POST body
|
|
26
|
+
- Gateway routing is optional per-request; AI namespace always uses gateway
|
|
27
|
+
|
|
28
|
+
## Namespaces
|
|
29
|
+
- `secrets`, `db`, `secure`, `redis`, `files`, `auth`, `ddl`, `logs`, `portal`, `courier`, `open`, `health`
|
|
30
|
+
- `admin` (reseed/reset admin category)
|
|
31
|
+
- `ai` (agent-runtime: LLM, RAG, artifacts, results, orchestration, speech)
|
|
32
|
+
- `workflow` (workflow-manager CRUD and execution)
|
|
33
|
+
- `oracle` / `stt` (streaming speech-to-text sessions)
|
|
34
|
+
|
|
35
|
+
## Configuration
|
|
36
|
+
Required:
|
|
37
|
+
- `DOMINUS_TOKEN`
|
|
38
|
+
|
|
39
|
+
Optional:
|
|
40
|
+
- `DOMINUS_GATEWAY_URL` (default production gateway)
|
|
41
|
+
- `DOMINUS_BASE_URL` (default production orchestrator)
|
|
42
|
+
- `DOMINUS_HTTP_PROXY` / `DOMINUS_HTTPS_PROXY` (httpx proxies)
|
|
43
|
+
|
|
44
|
+
## Documentation
|
|
45
|
+
- `docs/architecture.md`
|
|
46
|
+
- `docs/namespaces.md`
|
|
47
|
+
- `docs/development.md`
|
|
48
|
+
|
|
49
|
+
## License
|
|
50
|
+
Proprietary - CareBridge Systems
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Console Capture - Auto-forwards print() and logging.* to Dominus Logs Worker.
|
|
3
|
+
|
|
4
|
+
Activated by DOMINUS_CAPTURE_CONSOLE=true environment variable.
|
|
5
|
+
Preserves original output and never throws errors.
|
|
6
|
+
|
|
7
|
+
Usage:
|
|
8
|
+
# Automatic (via env var):
|
|
9
|
+
# Set DOMINUS_CAPTURE_CONSOLE=true before importing SDK
|
|
10
|
+
|
|
11
|
+
# Manual:
|
|
12
|
+
from dominus import dominus
|
|
13
|
+
dominus.capture_console() # start capturing
|
|
14
|
+
dominus.release_console() # stop capturing
|
|
15
|
+
"""
|
|
16
|
+
import asyncio
|
|
17
|
+
import builtins
|
|
18
|
+
import logging
|
|
19
|
+
import sys
|
|
20
|
+
from typing import Optional, TYPE_CHECKING
|
|
21
|
+
|
|
22
|
+
if TYPE_CHECKING:
|
|
23
|
+
from ..namespaces.logs import LogsNamespace
|
|
24
|
+
|
|
25
|
+
_installed = False
|
|
26
|
+
_logs_ref: Optional["LogsNamespace"] = None
|
|
27
|
+
_original_print = builtins.print
|
|
28
|
+
_log_handler: Optional["DominusLogHandler"] = None
|
|
29
|
+
|
|
30
|
+
# Guard against re-entrant calls (fallback_log uses print to stderr)
|
|
31
|
+
_sending = False
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _format_args(args: tuple, kwargs: dict) -> str:
|
|
35
|
+
"""Format print-style arguments into a single string."""
|
|
36
|
+
sep = kwargs.get("sep", " ")
|
|
37
|
+
parts = []
|
|
38
|
+
for arg in args:
|
|
39
|
+
if arg is None:
|
|
40
|
+
parts.append("None")
|
|
41
|
+
elif isinstance(arg, Exception):
|
|
42
|
+
parts.append(f"{type(arg).__name__}: {arg}")
|
|
43
|
+
elif isinstance(arg, (dict, list)):
|
|
44
|
+
try:
|
|
45
|
+
import json
|
|
46
|
+
parts.append(json.dumps(arg, default=str))
|
|
47
|
+
except Exception:
|
|
48
|
+
parts.append(str(arg))
|
|
49
|
+
else:
|
|
50
|
+
parts.append(str(arg))
|
|
51
|
+
return sep.join(parts)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _fire_log(level: str, message: str) -> None:
|
|
55
|
+
"""Fire-and-forget log to Dominus Logs Worker. Never blocks, never throws."""
|
|
56
|
+
global _sending
|
|
57
|
+
if _sending or not _logs_ref:
|
|
58
|
+
return
|
|
59
|
+
_sending = True
|
|
60
|
+
|
|
61
|
+
async def _send():
|
|
62
|
+
global _sending
|
|
63
|
+
try:
|
|
64
|
+
if level == "debug":
|
|
65
|
+
await _logs_ref.debug(message, {"source": "console"}, "console")
|
|
66
|
+
elif level == "info":
|
|
67
|
+
await _logs_ref.info(message, {"source": "console"}, "console")
|
|
68
|
+
elif level == "warn":
|
|
69
|
+
await _logs_ref.warn(message, {"source": "console"}, "console")
|
|
70
|
+
elif level == "error":
|
|
71
|
+
await _logs_ref.error(message, {"source": "console"}, "console")
|
|
72
|
+
except Exception:
|
|
73
|
+
pass
|
|
74
|
+
finally:
|
|
75
|
+
_sending = False
|
|
76
|
+
|
|
77
|
+
# Try to schedule in the running event loop, fall back silently
|
|
78
|
+
try:
|
|
79
|
+
loop = asyncio.get_running_loop()
|
|
80
|
+
loop.create_task(_send())
|
|
81
|
+
except RuntimeError:
|
|
82
|
+
# No running event loop - skip (can't do async without one)
|
|
83
|
+
_sending = False
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _patched_print(*args, **kwargs):
|
|
87
|
+
"""Replacement print() that also sends to Logs Worker."""
|
|
88
|
+
# Always call original print first
|
|
89
|
+
_original_print(*args, **kwargs)
|
|
90
|
+
|
|
91
|
+
# Determine if this is stderr output (which may be fallback logging)
|
|
92
|
+
file = kwargs.get("file")
|
|
93
|
+
if file is sys.stderr:
|
|
94
|
+
# Don't capture stderr prints (likely fallback logs - avoid loop)
|
|
95
|
+
return
|
|
96
|
+
|
|
97
|
+
message = _format_args(args, kwargs)
|
|
98
|
+
_fire_log("info", message)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
class DominusLogHandler(logging.Handler):
|
|
102
|
+
"""Logging handler that forwards records to Dominus Logs Worker."""
|
|
103
|
+
|
|
104
|
+
def emit(self, record: logging.LogRecord) -> None:
|
|
105
|
+
# Map Python log levels to Dominus levels
|
|
106
|
+
level_map = {
|
|
107
|
+
"DEBUG": "debug",
|
|
108
|
+
"INFO": "info",
|
|
109
|
+
"WARNING": "warn",
|
|
110
|
+
"ERROR": "error",
|
|
111
|
+
"CRITICAL": "error",
|
|
112
|
+
}
|
|
113
|
+
level = level_map.get(record.levelname, "info")
|
|
114
|
+
message = self.format(record)
|
|
115
|
+
_fire_log(level, message)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def install_console_capture(logs: "LogsNamespace") -> None:
|
|
119
|
+
"""
|
|
120
|
+
Install console capture wrappers.
|
|
121
|
+
Call this after LogsNamespace is initialized.
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
logs: The LogsNamespace instance to forward logs to
|
|
125
|
+
"""
|
|
126
|
+
global _installed, _logs_ref, _log_handler
|
|
127
|
+
|
|
128
|
+
if _installed:
|
|
129
|
+
return
|
|
130
|
+
|
|
131
|
+
_logs_ref = logs
|
|
132
|
+
_installed = True
|
|
133
|
+
|
|
134
|
+
# Patch builtins.print
|
|
135
|
+
builtins.print = _patched_print
|
|
136
|
+
|
|
137
|
+
# Install logging handler on root logger
|
|
138
|
+
_log_handler = DominusLogHandler()
|
|
139
|
+
_log_handler.setLevel(logging.DEBUG)
|
|
140
|
+
logging.getLogger().addHandler(_log_handler)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def uninstall_console_capture() -> None:
|
|
144
|
+
"""Remove console capture wrappers, restoring original behavior."""
|
|
145
|
+
global _installed, _logs_ref, _log_handler
|
|
146
|
+
|
|
147
|
+
if not _installed:
|
|
148
|
+
return
|
|
149
|
+
|
|
150
|
+
_installed = False
|
|
151
|
+
_logs_ref = None
|
|
152
|
+
|
|
153
|
+
# Restore original print
|
|
154
|
+
builtins.print = _original_print
|
|
155
|
+
|
|
156
|
+
# Remove logging handler
|
|
157
|
+
if _log_handler is not None:
|
|
158
|
+
logging.getLogger().removeHandler(_log_handler)
|
|
159
|
+
_log_handler = None
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def is_console_capture_active() -> bool:
|
|
163
|
+
"""Check if console capture is currently active."""
|
|
164
|
+
return _installed
|
|
@@ -81,17 +81,28 @@ class AuthNamespace:
|
|
|
81
81
|
limit: int = 100,
|
|
82
82
|
offset: int = 0,
|
|
83
83
|
order_by: str = "created_at",
|
|
84
|
-
order_desc: bool = True
|
|
84
|
+
order_desc: bool = True,
|
|
85
|
+
include_system: bool = False
|
|
85
86
|
) -> Dict[str, Any]:
|
|
86
87
|
"""
|
|
87
88
|
List users with optional filters.
|
|
88
89
|
|
|
90
|
+
Args:
|
|
91
|
+
status: Filter by user status (e.g. 'active')
|
|
92
|
+
limit: Maximum rows to return
|
|
93
|
+
offset: Rows to skip
|
|
94
|
+
order_by: Column to order by
|
|
95
|
+
order_desc: Sort descending
|
|
96
|
+
include_system: Include system (super admin) users in results
|
|
97
|
+
|
|
89
98
|
Returns:
|
|
90
99
|
Dict with "items" list and "total" count
|
|
91
100
|
"""
|
|
92
101
|
params = f"?limit={limit}&offset={offset}&order_by={order_by}&order_desc={str(order_desc).lower()}"
|
|
93
102
|
if status:
|
|
94
103
|
params += f"&status={status}"
|
|
104
|
+
if include_system:
|
|
105
|
+
params += "&include_system=true"
|
|
95
106
|
|
|
96
107
|
return await self._client._request(
|
|
97
108
|
endpoint=f"/api/guardian/users{params}",
|
|
@@ -362,6 +362,28 @@ class Dominus:
|
|
|
362
362
|
# Cache for JWT public key
|
|
363
363
|
self._public_key_cache = None
|
|
364
364
|
|
|
365
|
+
# Auto-activate console capture if env var is set
|
|
366
|
+
if os.environ.get("DOMINUS_CAPTURE_CONSOLE") == "true":
|
|
367
|
+
from .helpers.console_capture import install_console_capture
|
|
368
|
+
install_console_capture(self.logs)
|
|
369
|
+
|
|
370
|
+
def capture_console(self) -> None:
|
|
371
|
+
"""Start capturing print() and logging.* and forwarding to Dominus Logs Worker.
|
|
372
|
+
Original output is preserved (original functions still called)."""
|
|
373
|
+
from .helpers.console_capture import install_console_capture
|
|
374
|
+
install_console_capture(self.logs)
|
|
375
|
+
|
|
376
|
+
def release_console(self) -> None:
|
|
377
|
+
"""Stop capturing console output. Restores original print() and removes log handler."""
|
|
378
|
+
from .helpers.console_capture import uninstall_console_capture
|
|
379
|
+
uninstall_console_capture()
|
|
380
|
+
|
|
381
|
+
@property
|
|
382
|
+
def is_capturing_console(self) -> bool:
|
|
383
|
+
"""Check if console capture is currently active."""
|
|
384
|
+
from .helpers.console_capture import is_console_capture_active
|
|
385
|
+
return is_console_capture_active()
|
|
386
|
+
|
|
365
387
|
# ========================================
|
|
366
388
|
# INTERNAL REQUEST METHOD (for user JWT)
|
|
367
389
|
# ========================================
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dominus-sdk-python
|
|
3
|
+
Version: 2.11.0
|
|
4
|
+
Summary: Python SDK for the Dominus Orchestrator Platform
|
|
5
|
+
Author-email: CareBridge Systems <dev@carebridge.io>
|
|
6
|
+
License: Proprietary
|
|
7
|
+
Project-URL: Homepage, https://github.com/carebridgesystems/dominus-sdk-python
|
|
8
|
+
Project-URL: Repository, https://github.com/carebridgesystems/dominus-sdk-python
|
|
9
|
+
Keywords: dominus,carebridge,sdk,orchestrator,api,async
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: Other/Proprietary License
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
20
|
+
Classifier: Framework :: AsyncIO
|
|
21
|
+
Requires-Python: >=3.9
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
Requires-Dist: httpx>=0.24.0
|
|
24
|
+
Requires-Dist: bcrypt>=4.0.0
|
|
25
|
+
Requires-Dist: cryptography>=41.0.0
|
|
26
|
+
Provides-Extra: jwt
|
|
27
|
+
Requires-Dist: PyJWT>=2.8.0; extra == "jwt"
|
|
28
|
+
Provides-Extra: oracle
|
|
29
|
+
Requires-Dist: websockets>=12.0; extra == "oracle"
|
|
30
|
+
Requires-Dist: sounddevice>=0.4.6; extra == "oracle"
|
|
31
|
+
Requires-Dist: numpy>=1.24.0; extra == "oracle"
|
|
32
|
+
Requires-Dist: webrtcvad>=2.0.10; extra == "oracle"
|
|
33
|
+
Provides-Extra: dev
|
|
34
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
36
|
+
Provides-Extra: all
|
|
37
|
+
Requires-Dist: PyJWT>=2.8.0; extra == "all"
|
|
38
|
+
Requires-Dist: websockets>=12.0; extra == "all"
|
|
39
|
+
Requires-Dist: sounddevice>=0.4.6; extra == "all"
|
|
40
|
+
Requires-Dist: numpy>=1.24.0; extra == "all"
|
|
41
|
+
Requires-Dist: webrtcvad>=2.0.10; extra == "all"
|
|
42
|
+
|
|
43
|
+
# Dominus SDK for Python
|
|
44
|
+
|
|
45
|
+
Async Python SDK for CareBridge Dominus services. It routes service calls to the Dominus Orchestrator and handles gateway-based JWT minting, base64 encoding, retries, and circuit breaking.
|
|
46
|
+
|
|
47
|
+
## What This Is
|
|
48
|
+
- Server-side, asyncio-first Python SDK (3.9+)
|
|
49
|
+
- Namespace API plus ultra-flat root shortcuts for common operations
|
|
50
|
+
- Defaults to production orchestrator + gateway endpoints (configurable)
|
|
51
|
+
|
|
52
|
+
## Quick Start
|
|
53
|
+
```python
|
|
54
|
+
import os
|
|
55
|
+
from dominus import dominus
|
|
56
|
+
|
|
57
|
+
os.environ["DOMINUS_TOKEN"] = "your-psk-token"
|
|
58
|
+
|
|
59
|
+
users = await dominus.db.query("users", filters={"status": "active"})
|
|
60
|
+
await dominus.redis.set("session:123", {"user": "john"}, ttl=3600)
|
|
61
|
+
file = await dominus.files.upload(data=buf, filename="report.pdf", category="reports")
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Architecture (SDK View)
|
|
65
|
+
- DOMINUS_TOKEN (PSK) -> Gateway `/jwt/mint` -> JWT cached in `dominus_cache`
|
|
66
|
+
- JSON requests/responses are base64-encoded for auth-required routes
|
|
67
|
+
- GET requests send no body; parameters are in path or POST body
|
|
68
|
+
- Gateway routing is optional per-request; AI namespace always uses gateway
|
|
69
|
+
|
|
70
|
+
## Namespaces
|
|
71
|
+
- `secrets`, `db`, `secure`, `redis`, `files`, `auth`, `ddl`, `logs`, `portal`, `courier`, `open`, `health`
|
|
72
|
+
- `admin` (reseed/reset admin category)
|
|
73
|
+
- `ai` (agent-runtime: LLM, RAG, artifacts, results, orchestration, speech)
|
|
74
|
+
- `workflow` (workflow-manager CRUD and execution)
|
|
75
|
+
- `oracle` / `stt` (streaming speech-to-text sessions)
|
|
76
|
+
|
|
77
|
+
## Configuration
|
|
78
|
+
Required:
|
|
79
|
+
- `DOMINUS_TOKEN`
|
|
80
|
+
|
|
81
|
+
Optional:
|
|
82
|
+
- `DOMINUS_GATEWAY_URL` (default production gateway)
|
|
83
|
+
- `DOMINUS_BASE_URL` (default production orchestrator)
|
|
84
|
+
- `DOMINUS_HTTP_PROXY` / `DOMINUS_HTTPS_PROXY` (httpx proxies)
|
|
85
|
+
|
|
86
|
+
## Documentation
|
|
87
|
+
- `docs/architecture.md`
|
|
88
|
+
- `docs/namespaces.md`
|
|
89
|
+
- `docs/development.md`
|
|
90
|
+
|
|
91
|
+
## License
|
|
92
|
+
Proprietary - CareBridge Systems
|