dominus-sdk-python 4.2.0__tar.gz → 4.4.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.
Files changed (60) hide show
  1. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/PKG-INFO +1 -1
  2. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/__init__.py +1 -1
  3. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/redis.py +218 -0
  4. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus_sdk_python.egg-info/PKG-INFO +1 -1
  5. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/pyproject.toml +1 -1
  6. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/README.md +0 -0
  7. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/config/__init__.py +0 -0
  8. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/config/endpoints.py +0 -0
  9. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/errors.py +0 -0
  10. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/helpers/__init__.py +0 -0
  11. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/helpers/auth.py +0 -0
  12. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/helpers/cache.py +0 -0
  13. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/helpers/console_capture.py +0 -0
  14. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/helpers/core.py +0 -0
  15. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/helpers/crypto.py +0 -0
  16. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/helpers/sse.py +0 -0
  17. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/helpers/trace.py +0 -0
  18. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/__init__.py +0 -0
  19. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/admin.py +0 -0
  20. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/ai.py +0 -0
  21. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/artifacts.py +0 -0
  22. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/auth.py +0 -0
  23. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/authority.py +0 -0
  24. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/browser.py +0 -0
  25. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/courier.py +0 -0
  26. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/db.py +0 -0
  27. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/ddl.py +0 -0
  28. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/deployer.py +0 -0
  29. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/fastapi.py +0 -0
  30. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/files.py +0 -0
  31. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/health.py +0 -0
  32. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/jobs.py +0 -0
  33. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/logs.py +0 -0
  34. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/portal.py +0 -0
  35. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/processor.py +0 -0
  36. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/secrets.py +0 -0
  37. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/secure.py +0 -0
  38. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/sync.py +0 -0
  39. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/warden.py +0 -0
  40. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/namespaces/workflow.py +0 -0
  41. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/services/__init__.py +0 -0
  42. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus/start.py +0 -0
  43. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus_sdk_python.egg-info/SOURCES.txt +0 -0
  44. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus_sdk_python.egg-info/dependency_links.txt +0 -0
  45. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus_sdk_python.egg-info/requires.txt +0 -0
  46. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/dominus_sdk_python.egg-info/top_level.txt +0 -0
  47. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/setup.cfg +0 -0
  48. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/tests/test_auth.py +0 -0
  49. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/tests/test_authority_public_vocabulary.py +0 -0
  50. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/tests/test_browser_namespace.py +0 -0
  51. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/tests/test_control_plane_namespaces.py +0 -0
  52. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/tests/test_errors.py +0 -0
  53. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/tests/test_flat_commands.py +0 -0
  54. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/tests/test_health.py +0 -0
  55. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/tests/test_logs.py +0 -0
  56. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/tests/test_provisioning_parity.py +0 -0
  57. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/tests/test_public_exports.py +0 -0
  58. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/tests/test_transport_compat.py +0 -0
  59. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/tests/test_workflow_lifecycle.py +0 -0
  60. {dominus_sdk_python-4.2.0 → dominus_sdk_python-4.4.0}/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.2.0
3
+ Version: 4.4.0
4
4
  Summary: Python SDK for the Dominus gateway-first platform
5
5
  Author-email: CareBridge Systems <dev@carebridge.io>
6
6
  License: Proprietary
@@ -164,7 +164,7 @@ from .errors import (
164
164
  TimeoutError as DominusTimeoutError,
165
165
  )
166
166
 
167
- __version__ = "4.2.0"
167
+ __version__ = "4.4.0"
168
168
  __all__ = [
169
169
  # Main SDK instance
170
170
  "dominus",
@@ -442,6 +442,107 @@ class RedisNamespace:
442
442
  use_gateway=True,
443
443
  )
444
444
 
445
+ async def sadd(
446
+ self,
447
+ key: str,
448
+ members: List[Any],
449
+ ttl: int = 3600,
450
+ category: Optional[str] = None,
451
+ ) -> Dict[str, Any]:
452
+ """
453
+ Add one or more members to a Redis set, with TTL refresh.
454
+
455
+ Backed by the native dominus-redis-worker /sadd route added 2026-05-09.
456
+ Each member is independently size-guarded (1 MiB cap per encoded value).
457
+
458
+ Args:
459
+ key: Key name (logical_path)
460
+ members: List of values to add
461
+ ttl: Time-to-live in seconds for the set (default 3600)
462
+ category: Optional namespace category
463
+
464
+ Returns:
465
+ Dict with {"key", "added", "ttl_seconds"}
466
+ """
467
+ body: Dict[str, Any] = {
468
+ "logical_path": key,
469
+ "members": members,
470
+ "ttl_seconds": ttl,
471
+ }
472
+ if category:
473
+ body["category"] = category
474
+ return await self._client._request(
475
+ endpoint="/api/redis/sadd",
476
+ body=body,
477
+ use_gateway=True,
478
+ )
479
+
480
+ async def srem(
481
+ self,
482
+ key: str,
483
+ members: List[Any],
484
+ category: Optional[str] = None,
485
+ ) -> Dict[str, Any]:
486
+ """
487
+ Remove one or more members from a Redis set.
488
+
489
+ Backed by the native dominus-redis-worker /srem route added 2026-05-09.
490
+
491
+ Args:
492
+ key: Key name (logical_path)
493
+ members: List of values to remove
494
+ category: Optional namespace category
495
+
496
+ Returns:
497
+ Dict with {"key", "removed"}
498
+ """
499
+ body: Dict[str, Any] = {
500
+ "logical_path": key,
501
+ "members": members,
502
+ }
503
+ if category:
504
+ body["category"] = category
505
+ return await self._client._request(
506
+ endpoint="/api/redis/srem",
507
+ body=body,
508
+ use_gateway=True,
509
+ )
510
+
511
+ async def mset(
512
+ self,
513
+ entries: List[Dict[str, Any]],
514
+ ) -> Dict[str, Any]:
515
+ """
516
+ Multi-set: write 1..50 keys (potentially different categories and TTLs)
517
+ in one redis-worker invocation. Backed by /mset added 2026-05-08.
518
+
519
+ Use for fixed-batch fan-out (e.g. heartbeat-style multi-write paths)
520
+ to reduce Cloudflare worker invocation counts and gateway hops.
521
+
522
+ Args:
523
+ entries: List of dicts each with {"key": str, "value": Any,
524
+ "ttl"?: int, "category"?: str}
525
+
526
+ Returns:
527
+ Dict with {"stored": [{"key", "stored", "ttl_seconds"}, ...]}
528
+ """
529
+ wire_entries: List[Dict[str, Any]] = []
530
+ for entry in entries:
531
+ wire: Dict[str, Any] = {
532
+ "logical_path": entry["key"],
533
+ "value": entry["value"],
534
+ }
535
+ if "ttl" in entry and entry["ttl"] is not None:
536
+ wire["ttl_seconds"] = entry["ttl"]
537
+ if entry.get("category"):
538
+ wire["category"] = entry["category"]
539
+ wire_entries.append(wire)
540
+ return await self._client._request(
541
+ endpoint="/api/redis/mset",
542
+ body={"entries": wire_entries},
543
+ use_gateway=True,
544
+ )
545
+
445
546
  async def lrange(
446
547
  self,
447
548
  key: str,
@@ -474,3 +575,120 @@ class RedisNamespace:
474
575
  body=body,
475
576
  use_gateway=True,
476
577
  )
578
+
579
+ async def xadd(
580
+ self,
581
+ key: str,
582
+ fields: Dict[str, Any],
583
+ id: Optional[str] = None,
584
+ maxlen: Optional[int] = None,
585
+ ttl: Optional[int] = None,
586
+ category: Optional[str] = None,
587
+ ) -> Dict[str, Any]:
588
+ """
589
+ Append an entry to a Redis stream.
590
+
591
+ Backed by the native dominus-redis-worker /xadd route added 2026-05-09.
592
+ Each field value is independently size-guarded (1 MiB cap per encoded
593
+ value). Use streams for log-style state that scales with iteration
594
+ count (agent step events, audit trails). Replaces RedisWorkerProjectCompat
595
+ shim emulation that did SET/GET whole-collection rewrites.
596
+
597
+ Args:
598
+ key: Stream key (logical_path)
599
+ fields: Field/value dict for the new entry
600
+ id: Optional explicit ID. Defaults to ``*`` (server-generated
601
+ ``<ms>-<seq>``). Returned in the response so callers can use
602
+ it for downstream xrange resume-after pagination.
603
+ maxlen: Optional MAXLEN cap. When set, redis-worker calls XADD
604
+ with MAXLEN ~ N (approximate trim).
605
+ ttl: Optional TTL in seconds (default uses worker default 3600).
606
+ category: Optional namespace category (default ``streams``).
607
+
608
+ Returns:
609
+ Dict with {"key", "id", "ttl_seconds"}
610
+ """
611
+ body: Dict[str, Any] = {
612
+ "logical_path": key,
613
+ "fields": fields,
614
+ }
615
+ if id:
616
+ body["id"] = id
617
+ if maxlen is not None:
618
+ body["maxlen"] = maxlen
619
+ if ttl is not None:
620
+ body["ttl_seconds"] = ttl
621
+ if category:
622
+ body["category"] = category
623
+ return await self._client._request(
624
+ endpoint="/api/redis/xadd",
625
+ body=body,
626
+ use_gateway=True,
627
+ )
628
+
629
+ async def xrange(
630
+ self,
631
+ key: str,
632
+ min: str = "-",
633
+ max: str = "+",
634
+ count: Optional[int] = None,
635
+ category: Optional[str] = None,
636
+ ) -> Dict[str, Any]:
637
+ """
638
+ Read entries from a Redis stream in id order.
639
+
640
+ Backed by /xrange added 2026-05-09. Pass ``-``/``+`` (default) for
641
+ the full range or explicit ``<ms>-<seq>`` ids for resume-after
642
+ pagination.
643
+
644
+ Args:
645
+ key: Stream key (logical_path)
646
+ min: Inclusive lower bound id, ``-`` for oldest.
647
+ max: Inclusive upper bound id, ``+`` for newest.
648
+ count: Optional COUNT cap.
649
+ category: Optional namespace category (default ``streams``).
650
+
651
+ Returns:
652
+ Dict with {"found", "entries": [{"id", "fields"}, ...], "count"}
653
+ """
654
+ body: Dict[str, Any] = {
655
+ "logical_path": key,
656
+ "min": min,
657
+ "max": max,
658
+ }
659
+ if count is not None:
660
+ body["count"] = count
661
+ if category:
662
+ body["category"] = category
663
+ return await self._client._request(
664
+ endpoint="/api/redis/xrange",
665
+ body=body,
666
+ use_gateway=True,
667
+ )
668
+
669
+ async def xlen(
670
+ self,
671
+ key: str,
672
+ category: Optional[str] = None,
673
+ ) -> Dict[str, Any]:
674
+ """
675
+ Stream entry count.
676
+
677
+ Backed by /xlen added 2026-05-09. Approximate on streams with
678
+ deletions; exact otherwise.
679
+
680
+ Args:
681
+ key: Stream key (logical_path)
682
+ category: Optional namespace category (default ``streams``).
683
+
684
+ Returns:
685
+ Dict with {"length"}
686
+ """
687
+ body: Dict[str, Any] = {"logical_path": key}
688
+ if category:
689
+ body["category"] = category
690
+ return await self._client._request(
691
+ endpoint="/api/redis/xlen",
692
+ body=body,
693
+ use_gateway=True,
694
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dominus-sdk-python
3
- Version: 4.2.0
3
+ Version: 4.4.0
4
4
  Summary: Python SDK for the Dominus gateway-first platform
5
5
  Author-email: CareBridge Systems <dev@carebridge.io>
6
6
  License: Proprietary
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dominus-sdk-python"
7
- version = "4.2.0"
7
+ version = "4.4.0"
8
8
  description = "Python SDK for the Dominus gateway-first platform"
9
9
  readme = "README.md"
10
10
  license = {text = "Proprietary"}