kailash 0.3.2__py3-none-any.whl → 0.4.1__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.
- kailash/__init__.py +33 -1
- kailash/access_control/__init__.py +129 -0
- kailash/access_control/managers.py +461 -0
- kailash/access_control/rule_evaluators.py +467 -0
- kailash/access_control_abac.py +825 -0
- kailash/config/__init__.py +27 -0
- kailash/config/database_config.py +359 -0
- kailash/database/__init__.py +28 -0
- kailash/database/execution_pipeline.py +499 -0
- kailash/middleware/__init__.py +306 -0
- kailash/middleware/auth/__init__.py +33 -0
- kailash/middleware/auth/access_control.py +436 -0
- kailash/middleware/auth/auth_manager.py +422 -0
- kailash/middleware/auth/jwt_auth.py +477 -0
- kailash/middleware/auth/kailash_jwt_auth.py +616 -0
- kailash/middleware/communication/__init__.py +37 -0
- kailash/middleware/communication/ai_chat.py +989 -0
- kailash/middleware/communication/api_gateway.py +802 -0
- kailash/middleware/communication/events.py +470 -0
- kailash/middleware/communication/realtime.py +710 -0
- kailash/middleware/core/__init__.py +21 -0
- kailash/middleware/core/agent_ui.py +890 -0
- kailash/middleware/core/schema.py +643 -0
- kailash/middleware/core/workflows.py +396 -0
- kailash/middleware/database/__init__.py +63 -0
- kailash/middleware/database/base.py +113 -0
- kailash/middleware/database/base_models.py +525 -0
- kailash/middleware/database/enums.py +106 -0
- kailash/middleware/database/migrations.py +12 -0
- kailash/{api/database.py → middleware/database/models.py} +183 -291
- kailash/middleware/database/repositories.py +685 -0
- kailash/middleware/database/session_manager.py +19 -0
- kailash/middleware/mcp/__init__.py +38 -0
- kailash/middleware/mcp/client_integration.py +585 -0
- kailash/middleware/mcp/enhanced_server.py +576 -0
- kailash/nodes/__init__.py +27 -3
- kailash/nodes/admin/__init__.py +42 -0
- kailash/nodes/admin/audit_log.py +794 -0
- kailash/nodes/admin/permission_check.py +864 -0
- kailash/nodes/admin/role_management.py +823 -0
- kailash/nodes/admin/security_event.py +1523 -0
- kailash/nodes/admin/user_management.py +944 -0
- kailash/nodes/ai/a2a.py +24 -7
- kailash/nodes/ai/ai_providers.py +248 -40
- kailash/nodes/ai/embedding_generator.py +11 -11
- kailash/nodes/ai/intelligent_agent_orchestrator.py +99 -11
- kailash/nodes/ai/llm_agent.py +436 -5
- kailash/nodes/ai/self_organizing.py +85 -10
- kailash/nodes/ai/vision_utils.py +148 -0
- kailash/nodes/alerts/__init__.py +26 -0
- kailash/nodes/alerts/base.py +234 -0
- kailash/nodes/alerts/discord.py +499 -0
- kailash/nodes/api/auth.py +287 -6
- kailash/nodes/api/rest.py +151 -0
- kailash/nodes/auth/__init__.py +17 -0
- kailash/nodes/auth/directory_integration.py +1228 -0
- kailash/nodes/auth/enterprise_auth_provider.py +1328 -0
- kailash/nodes/auth/mfa.py +2338 -0
- kailash/nodes/auth/risk_assessment.py +872 -0
- kailash/nodes/auth/session_management.py +1093 -0
- kailash/nodes/auth/sso.py +1040 -0
- kailash/nodes/base.py +344 -13
- kailash/nodes/base_cycle_aware.py +4 -2
- kailash/nodes/base_with_acl.py +1 -1
- kailash/nodes/code/python.py +283 -10
- kailash/nodes/compliance/__init__.py +9 -0
- kailash/nodes/compliance/data_retention.py +1888 -0
- kailash/nodes/compliance/gdpr.py +2004 -0
- kailash/nodes/data/__init__.py +22 -2
- kailash/nodes/data/async_connection.py +469 -0
- kailash/nodes/data/async_sql.py +757 -0
- kailash/nodes/data/async_vector.py +598 -0
- kailash/nodes/data/readers.py +767 -0
- kailash/nodes/data/retrieval.py +360 -1
- kailash/nodes/data/sharepoint_graph.py +397 -21
- kailash/nodes/data/sql.py +94 -5
- kailash/nodes/data/streaming.py +68 -8
- kailash/nodes/data/vector_db.py +54 -4
- kailash/nodes/enterprise/__init__.py +13 -0
- kailash/nodes/enterprise/batch_processor.py +741 -0
- kailash/nodes/enterprise/data_lineage.py +497 -0
- kailash/nodes/logic/convergence.py +31 -9
- kailash/nodes/logic/operations.py +14 -3
- kailash/nodes/mixins/__init__.py +8 -0
- kailash/nodes/mixins/event_emitter.py +201 -0
- kailash/nodes/mixins/mcp.py +9 -4
- kailash/nodes/mixins/security.py +165 -0
- kailash/nodes/monitoring/__init__.py +7 -0
- kailash/nodes/monitoring/performance_benchmark.py +2497 -0
- kailash/nodes/rag/__init__.py +284 -0
- kailash/nodes/rag/advanced.py +1615 -0
- kailash/nodes/rag/agentic.py +773 -0
- kailash/nodes/rag/conversational.py +999 -0
- kailash/nodes/rag/evaluation.py +875 -0
- kailash/nodes/rag/federated.py +1188 -0
- kailash/nodes/rag/graph.py +721 -0
- kailash/nodes/rag/multimodal.py +671 -0
- kailash/nodes/rag/optimized.py +933 -0
- kailash/nodes/rag/privacy.py +1059 -0
- kailash/nodes/rag/query_processing.py +1335 -0
- kailash/nodes/rag/realtime.py +764 -0
- kailash/nodes/rag/registry.py +547 -0
- kailash/nodes/rag/router.py +837 -0
- kailash/nodes/rag/similarity.py +1854 -0
- kailash/nodes/rag/strategies.py +566 -0
- kailash/nodes/rag/workflows.py +575 -0
- kailash/nodes/security/__init__.py +19 -0
- kailash/nodes/security/abac_evaluator.py +1411 -0
- kailash/nodes/security/audit_log.py +103 -0
- kailash/nodes/security/behavior_analysis.py +1893 -0
- kailash/nodes/security/credential_manager.py +401 -0
- kailash/nodes/security/rotating_credentials.py +760 -0
- kailash/nodes/security/security_event.py +133 -0
- kailash/nodes/security/threat_detection.py +1103 -0
- kailash/nodes/testing/__init__.py +9 -0
- kailash/nodes/testing/credential_testing.py +499 -0
- kailash/nodes/transform/__init__.py +10 -2
- kailash/nodes/transform/chunkers.py +592 -1
- kailash/nodes/transform/processors.py +484 -14
- kailash/nodes/validation.py +321 -0
- kailash/runtime/access_controlled.py +1 -1
- kailash/runtime/async_local.py +41 -7
- kailash/runtime/docker.py +1 -1
- kailash/runtime/local.py +474 -55
- kailash/runtime/parallel.py +1 -1
- kailash/runtime/parallel_cyclic.py +1 -1
- kailash/runtime/testing.py +210 -2
- kailash/security.py +1 -1
- kailash/utils/migrations/__init__.py +25 -0
- kailash/utils/migrations/generator.py +433 -0
- kailash/utils/migrations/models.py +231 -0
- kailash/utils/migrations/runner.py +489 -0
- kailash/utils/secure_logging.py +342 -0
- kailash/workflow/__init__.py +16 -0
- kailash/workflow/cyclic_runner.py +3 -4
- kailash/workflow/graph.py +70 -2
- kailash/workflow/resilience.py +249 -0
- kailash/workflow/templates.py +726 -0
- {kailash-0.3.2.dist-info → kailash-0.4.1.dist-info}/METADATA +256 -20
- kailash-0.4.1.dist-info/RECORD +227 -0
- kailash/api/__init__.py +0 -17
- kailash/api/__main__.py +0 -6
- kailash/api/studio_secure.py +0 -893
- kailash/mcp/__main__.py +0 -13
- kailash/mcp/server_new.py +0 -336
- kailash/mcp/servers/__init__.py +0 -12
- kailash-0.3.2.dist-info/RECORD +0 -136
- {kailash-0.3.2.dist-info → kailash-0.4.1.dist-info}/WHEEL +0 -0
- {kailash-0.3.2.dist-info → kailash-0.4.1.dist-info}/entry_points.txt +0 -0
- {kailash-0.3.2.dist-info → kailash-0.4.1.dist-info}/licenses/LICENSE +0 -0
- {kailash-0.3.2.dist-info → kailash-0.4.1.dist-info}/top_level.txt +0 -0
kailash/nodes/data/streaming.py
CHANGED
@@ -138,16 +138,31 @@ class KafkaConsumerNode(Node):
|
|
138
138
|
tags={"streaming", "kafka", "consumer"},
|
139
139
|
)
|
140
140
|
|
141
|
-
def __init__(self):
|
141
|
+
def __init__(self, name: str = None, id: str = None, **kwargs):
|
142
142
|
"""Initialize the Kafka consumer node.
|
143
143
|
|
144
144
|
Sets up the node and prepares for consumer initialization.
|
145
145
|
The actual consumer is created during configuration.
|
146
146
|
"""
|
147
|
-
|
147
|
+
# Set name from parameters
|
148
|
+
if name:
|
149
|
+
self.name = name
|
150
|
+
elif id:
|
151
|
+
self.name = id
|
152
|
+
elif "name" in kwargs:
|
153
|
+
self.name = kwargs.pop("name")
|
154
|
+
elif "id" in kwargs:
|
155
|
+
self.name = kwargs.pop("id")
|
156
|
+
else:
|
157
|
+
self.name = self.__class__.__name__
|
158
|
+
|
159
|
+
# Initialize node attributes
|
148
160
|
self._consumer = None
|
149
161
|
self._topic = None
|
150
162
|
|
163
|
+
# Call parent constructor with all kwargs
|
164
|
+
super().__init__(name=self.name, **kwargs)
|
165
|
+
|
151
166
|
def get_parameters(self) -> dict[str, NodeParameter]:
|
152
167
|
"""Define parameters for the Kafka consumer node."""
|
153
168
|
return {
|
@@ -411,15 +426,30 @@ class StreamPublisherNode(Node):
|
|
411
426
|
tags={"streaming", "publisher", "messaging"},
|
412
427
|
)
|
413
428
|
|
414
|
-
def __init__(self):
|
429
|
+
def __init__(self, name: str = None, id: str = None, **kwargs):
|
415
430
|
"""Initialize the stream publisher node.
|
416
431
|
|
417
432
|
Sets up the node and prepares for publisher initialization.
|
418
433
|
"""
|
419
|
-
|
434
|
+
# Set name from parameters
|
435
|
+
if name:
|
436
|
+
self.name = name
|
437
|
+
elif id:
|
438
|
+
self.name = id
|
439
|
+
elif "name" in kwargs:
|
440
|
+
self.name = kwargs.pop("name")
|
441
|
+
elif "id" in kwargs:
|
442
|
+
self.name = kwargs.pop("id")
|
443
|
+
else:
|
444
|
+
self.name = self.__class__.__name__
|
445
|
+
|
446
|
+
# Initialize node attributes
|
420
447
|
self._publisher = None
|
421
448
|
self._protocol = None
|
422
449
|
|
450
|
+
# Call parent constructor with all kwargs
|
451
|
+
super().__init__(name=self.name, **kwargs)
|
452
|
+
|
423
453
|
def get_parameters(self) -> dict[str, NodeParameter]:
|
424
454
|
"""Define parameters for the stream publisher node."""
|
425
455
|
return {
|
@@ -673,16 +703,31 @@ class WebSocketNode(Node):
|
|
673
703
|
tags={"streaming", "websocket", "data"},
|
674
704
|
)
|
675
705
|
|
676
|
-
def __init__(self):
|
706
|
+
def __init__(self, name: str = None, id: str = None, **kwargs):
|
677
707
|
"""Initialize the WebSocket node.
|
678
708
|
|
679
709
|
Sets up the node and prepares for WebSocket connection.
|
680
710
|
"""
|
681
|
-
|
711
|
+
# Set name from parameters
|
712
|
+
if name:
|
713
|
+
self.name = name
|
714
|
+
elif id:
|
715
|
+
self.name = id
|
716
|
+
elif "name" in kwargs:
|
717
|
+
self.name = kwargs.pop("name")
|
718
|
+
elif "id" in kwargs:
|
719
|
+
self.name = kwargs.pop("id")
|
720
|
+
else:
|
721
|
+
self.name = self.__class__.__name__
|
722
|
+
|
723
|
+
# Initialize node attributes
|
682
724
|
self._ws = None
|
683
725
|
self._connected = False
|
684
726
|
self._message_queue = []
|
685
727
|
|
728
|
+
# Call parent constructor with all kwargs
|
729
|
+
super().__init__(name=self.name, **kwargs)
|
730
|
+
|
686
731
|
def get_parameters(self) -> dict[str, NodeParameter]:
|
687
732
|
"""Get the parameters for this node.
|
688
733
|
|
@@ -984,16 +1029,31 @@ class EventStreamNode(Node):
|
|
984
1029
|
tags={"streaming", "sse", "data"},
|
985
1030
|
)
|
986
1031
|
|
987
|
-
def __init__(self):
|
1032
|
+
def __init__(self, name: str = None, id: str = None, **kwargs):
|
988
1033
|
"""Initialize the EventStream node.
|
989
1034
|
|
990
1035
|
Sets up the node and prepares for SSE connection.
|
991
1036
|
"""
|
992
|
-
|
1037
|
+
# Set name from parameters
|
1038
|
+
if name:
|
1039
|
+
self.name = name
|
1040
|
+
elif id:
|
1041
|
+
self.name = id
|
1042
|
+
elif "name" in kwargs:
|
1043
|
+
self.name = kwargs.pop("name")
|
1044
|
+
elif "id" in kwargs:
|
1045
|
+
self.name = kwargs.pop("id")
|
1046
|
+
else:
|
1047
|
+
self.name = self.__class__.__name__
|
1048
|
+
|
1049
|
+
# Initialize node attributes
|
993
1050
|
self._stream = None
|
994
1051
|
self._connected = False
|
995
1052
|
self._last_event_id = None
|
996
1053
|
|
1054
|
+
# Call parent constructor with all kwargs
|
1055
|
+
super().__init__(name=self.name, **kwargs)
|
1056
|
+
|
997
1057
|
def get_parameters(self) -> dict[str, NodeParameter]:
|
998
1058
|
"""Get the parameters for this node.
|
999
1059
|
|
kailash/nodes/data/vector_db.py
CHANGED
@@ -132,16 +132,31 @@ class EmbeddingNode(Node):
|
|
132
132
|
tags={"embedding", "nlp", "vector"},
|
133
133
|
)
|
134
134
|
|
135
|
-
def __init__(self):
|
135
|
+
def __init__(self, name: str = None, id: str = None, **kwargs):
|
136
136
|
"""Initialize the embedding node.
|
137
137
|
|
138
138
|
Sets up the node with default configuration and prepares for
|
139
139
|
model initialization. The actual model is loaded during configuration.
|
140
140
|
"""
|
141
|
-
|
141
|
+
# Set name from parameters
|
142
|
+
if name:
|
143
|
+
self.name = name
|
144
|
+
elif id:
|
145
|
+
self.name = id
|
146
|
+
elif "name" in kwargs:
|
147
|
+
self.name = kwargs.pop("name")
|
148
|
+
elif "id" in kwargs:
|
149
|
+
self.name = kwargs.pop("id")
|
150
|
+
else:
|
151
|
+
self.name = self.__class__.__name__
|
152
|
+
|
153
|
+
# Initialize node attributes
|
142
154
|
self._model = None
|
143
155
|
self._model_info = {}
|
144
156
|
|
157
|
+
# Call parent constructor
|
158
|
+
super().__init__(name=self.name)
|
159
|
+
|
145
160
|
def get_parameters(self) -> dict[str, NodeParameter]:
|
146
161
|
"""Define parameters for the embedding node."""
|
147
162
|
return {
|
@@ -432,16 +447,31 @@ class VectorDatabaseNode(Node):
|
|
432
447
|
tags={"vector", "database", "storage"},
|
433
448
|
)
|
434
449
|
|
435
|
-
def __init__(self):
|
450
|
+
def __init__(self, name: str = None, id: str = None, **kwargs):
|
436
451
|
"""Initialize the vector database node.
|
437
452
|
|
438
453
|
Sets up the node and prepares for database connection.
|
439
454
|
The actual connection is established during configuration.
|
440
455
|
"""
|
441
|
-
|
456
|
+
# Set name from parameters
|
457
|
+
if name:
|
458
|
+
self.name = name
|
459
|
+
elif id:
|
460
|
+
self.name = id
|
461
|
+
elif "name" in kwargs:
|
462
|
+
self.name = kwargs.pop("name")
|
463
|
+
elif "id" in kwargs:
|
464
|
+
self.name = kwargs.pop("id")
|
465
|
+
else:
|
466
|
+
self.name = self.__class__.__name__
|
467
|
+
|
468
|
+
# Initialize node attributes
|
442
469
|
self._client = None
|
443
470
|
self._index = None
|
444
471
|
|
472
|
+
# Call parent constructor
|
473
|
+
super().__init__(name=self.name)
|
474
|
+
|
445
475
|
def get_parameters(self) -> dict[str, NodeParameter]:
|
446
476
|
"""Define parameters for the vector database node."""
|
447
477
|
return {
|
@@ -748,6 +778,26 @@ class TextSplitterNode(Node):
|
|
748
778
|
tags={"text", "processing", "nlp"},
|
749
779
|
)
|
750
780
|
|
781
|
+
def __init__(self, name: str = None, id: str = None, **kwargs):
|
782
|
+
"""Initialize the text splitter node.
|
783
|
+
|
784
|
+
Sets up the node with default configuration.
|
785
|
+
"""
|
786
|
+
# Set name from parameters
|
787
|
+
if name:
|
788
|
+
self.name = name
|
789
|
+
elif id:
|
790
|
+
self.name = id
|
791
|
+
elif "name" in kwargs:
|
792
|
+
self.name = kwargs.pop("name")
|
793
|
+
elif "id" in kwargs:
|
794
|
+
self.name = kwargs.pop("id")
|
795
|
+
else:
|
796
|
+
self.name = self.__class__.__name__
|
797
|
+
|
798
|
+
# Call parent constructor
|
799
|
+
super().__init__(name=self.name)
|
800
|
+
|
751
801
|
def get_parameters(self) -> dict[str, NodeParameter]:
|
752
802
|
"""Define parameters for the text splitter node."""
|
753
803
|
return {
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"""Enterprise integration nodes for the Kailash SDK.
|
2
|
+
|
3
|
+
This module provides enterprise-grade nodes for complex business integration
|
4
|
+
patterns, data lineage tracking, and batch processing optimizations.
|
5
|
+
"""
|
6
|
+
|
7
|
+
from kailash.nodes.enterprise.batch_processor import BatchProcessorNode
|
8
|
+
from kailash.nodes.enterprise.data_lineage import DataLineageNode
|
9
|
+
|
10
|
+
__all__ = [
|
11
|
+
"DataLineageNode",
|
12
|
+
"BatchProcessorNode",
|
13
|
+
]
|