kailash 0.3.2__py3-none-any.whl → 0.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.
Files changed (146) hide show
  1. kailash/__init__.py +33 -1
  2. kailash/access_control/__init__.py +129 -0
  3. kailash/access_control/managers.py +461 -0
  4. kailash/access_control/rule_evaluators.py +467 -0
  5. kailash/access_control_abac.py +825 -0
  6. kailash/config/__init__.py +27 -0
  7. kailash/config/database_config.py +359 -0
  8. kailash/database/__init__.py +28 -0
  9. kailash/database/execution_pipeline.py +499 -0
  10. kailash/middleware/__init__.py +306 -0
  11. kailash/middleware/auth/__init__.py +33 -0
  12. kailash/middleware/auth/access_control.py +436 -0
  13. kailash/middleware/auth/auth_manager.py +422 -0
  14. kailash/middleware/auth/jwt_auth.py +477 -0
  15. kailash/middleware/auth/kailash_jwt_auth.py +616 -0
  16. kailash/middleware/communication/__init__.py +37 -0
  17. kailash/middleware/communication/ai_chat.py +989 -0
  18. kailash/middleware/communication/api_gateway.py +802 -0
  19. kailash/middleware/communication/events.py +470 -0
  20. kailash/middleware/communication/realtime.py +710 -0
  21. kailash/middleware/core/__init__.py +21 -0
  22. kailash/middleware/core/agent_ui.py +890 -0
  23. kailash/middleware/core/schema.py +643 -0
  24. kailash/middleware/core/workflows.py +396 -0
  25. kailash/middleware/database/__init__.py +63 -0
  26. kailash/middleware/database/base.py +113 -0
  27. kailash/middleware/database/base_models.py +525 -0
  28. kailash/middleware/database/enums.py +106 -0
  29. kailash/middleware/database/migrations.py +12 -0
  30. kailash/{api/database.py → middleware/database/models.py} +183 -291
  31. kailash/middleware/database/repositories.py +685 -0
  32. kailash/middleware/database/session_manager.py +19 -0
  33. kailash/middleware/mcp/__init__.py +38 -0
  34. kailash/middleware/mcp/client_integration.py +585 -0
  35. kailash/middleware/mcp/enhanced_server.py +576 -0
  36. kailash/nodes/__init__.py +25 -3
  37. kailash/nodes/admin/__init__.py +35 -0
  38. kailash/nodes/admin/audit_log.py +794 -0
  39. kailash/nodes/admin/permission_check.py +864 -0
  40. kailash/nodes/admin/role_management.py +823 -0
  41. kailash/nodes/admin/security_event.py +1519 -0
  42. kailash/nodes/admin/user_management.py +944 -0
  43. kailash/nodes/ai/a2a.py +24 -7
  44. kailash/nodes/ai/ai_providers.py +1 -0
  45. kailash/nodes/ai/embedding_generator.py +11 -11
  46. kailash/nodes/ai/intelligent_agent_orchestrator.py +99 -11
  47. kailash/nodes/ai/llm_agent.py +407 -2
  48. kailash/nodes/ai/self_organizing.py +85 -10
  49. kailash/nodes/api/auth.py +287 -6
  50. kailash/nodes/api/rest.py +151 -0
  51. kailash/nodes/auth/__init__.py +17 -0
  52. kailash/nodes/auth/directory_integration.py +1228 -0
  53. kailash/nodes/auth/enterprise_auth_provider.py +1328 -0
  54. kailash/nodes/auth/mfa.py +2338 -0
  55. kailash/nodes/auth/risk_assessment.py +872 -0
  56. kailash/nodes/auth/session_management.py +1093 -0
  57. kailash/nodes/auth/sso.py +1040 -0
  58. kailash/nodes/base.py +344 -13
  59. kailash/nodes/base_cycle_aware.py +4 -2
  60. kailash/nodes/base_with_acl.py +1 -1
  61. kailash/nodes/code/python.py +283 -10
  62. kailash/nodes/compliance/__init__.py +9 -0
  63. kailash/nodes/compliance/data_retention.py +1888 -0
  64. kailash/nodes/compliance/gdpr.py +2004 -0
  65. kailash/nodes/data/__init__.py +22 -2
  66. kailash/nodes/data/async_connection.py +469 -0
  67. kailash/nodes/data/async_sql.py +757 -0
  68. kailash/nodes/data/async_vector.py +598 -0
  69. kailash/nodes/data/readers.py +767 -0
  70. kailash/nodes/data/retrieval.py +360 -1
  71. kailash/nodes/data/sharepoint_graph.py +397 -21
  72. kailash/nodes/data/sql.py +94 -5
  73. kailash/nodes/data/streaming.py +68 -8
  74. kailash/nodes/data/vector_db.py +54 -4
  75. kailash/nodes/enterprise/__init__.py +13 -0
  76. kailash/nodes/enterprise/batch_processor.py +741 -0
  77. kailash/nodes/enterprise/data_lineage.py +497 -0
  78. kailash/nodes/logic/convergence.py +31 -9
  79. kailash/nodes/logic/operations.py +14 -3
  80. kailash/nodes/mixins/__init__.py +8 -0
  81. kailash/nodes/mixins/event_emitter.py +201 -0
  82. kailash/nodes/mixins/mcp.py +9 -4
  83. kailash/nodes/mixins/security.py +165 -0
  84. kailash/nodes/monitoring/__init__.py +7 -0
  85. kailash/nodes/monitoring/performance_benchmark.py +2497 -0
  86. kailash/nodes/rag/__init__.py +284 -0
  87. kailash/nodes/rag/advanced.py +1615 -0
  88. kailash/nodes/rag/agentic.py +773 -0
  89. kailash/nodes/rag/conversational.py +999 -0
  90. kailash/nodes/rag/evaluation.py +875 -0
  91. kailash/nodes/rag/federated.py +1188 -0
  92. kailash/nodes/rag/graph.py +721 -0
  93. kailash/nodes/rag/multimodal.py +671 -0
  94. kailash/nodes/rag/optimized.py +933 -0
  95. kailash/nodes/rag/privacy.py +1059 -0
  96. kailash/nodes/rag/query_processing.py +1335 -0
  97. kailash/nodes/rag/realtime.py +764 -0
  98. kailash/nodes/rag/registry.py +547 -0
  99. kailash/nodes/rag/router.py +837 -0
  100. kailash/nodes/rag/similarity.py +1854 -0
  101. kailash/nodes/rag/strategies.py +566 -0
  102. kailash/nodes/rag/workflows.py +575 -0
  103. kailash/nodes/security/__init__.py +19 -0
  104. kailash/nodes/security/abac_evaluator.py +1411 -0
  105. kailash/nodes/security/audit_log.py +91 -0
  106. kailash/nodes/security/behavior_analysis.py +1893 -0
  107. kailash/nodes/security/credential_manager.py +401 -0
  108. kailash/nodes/security/rotating_credentials.py +760 -0
  109. kailash/nodes/security/security_event.py +132 -0
  110. kailash/nodes/security/threat_detection.py +1103 -0
  111. kailash/nodes/testing/__init__.py +9 -0
  112. kailash/nodes/testing/credential_testing.py +499 -0
  113. kailash/nodes/transform/__init__.py +10 -2
  114. kailash/nodes/transform/chunkers.py +592 -1
  115. kailash/nodes/transform/processors.py +484 -14
  116. kailash/nodes/validation.py +321 -0
  117. kailash/runtime/access_controlled.py +1 -1
  118. kailash/runtime/async_local.py +41 -7
  119. kailash/runtime/docker.py +1 -1
  120. kailash/runtime/local.py +474 -55
  121. kailash/runtime/parallel.py +1 -1
  122. kailash/runtime/parallel_cyclic.py +1 -1
  123. kailash/runtime/testing.py +210 -2
  124. kailash/utils/migrations/__init__.py +25 -0
  125. kailash/utils/migrations/generator.py +433 -0
  126. kailash/utils/migrations/models.py +231 -0
  127. kailash/utils/migrations/runner.py +489 -0
  128. kailash/utils/secure_logging.py +342 -0
  129. kailash/workflow/__init__.py +16 -0
  130. kailash/workflow/cyclic_runner.py +3 -4
  131. kailash/workflow/graph.py +70 -2
  132. kailash/workflow/resilience.py +249 -0
  133. kailash/workflow/templates.py +726 -0
  134. {kailash-0.3.2.dist-info → kailash-0.4.0.dist-info}/METADATA +253 -20
  135. kailash-0.4.0.dist-info/RECORD +223 -0
  136. kailash/api/__init__.py +0 -17
  137. kailash/api/__main__.py +0 -6
  138. kailash/api/studio_secure.py +0 -893
  139. kailash/mcp/__main__.py +0 -13
  140. kailash/mcp/server_new.py +0 -336
  141. kailash/mcp/servers/__init__.py +0 -12
  142. kailash-0.3.2.dist-info/RECORD +0 -136
  143. {kailash-0.3.2.dist-info → kailash-0.4.0.dist-info}/WHEEL +0 -0
  144. {kailash-0.3.2.dist-info → kailash-0.4.0.dist-info}/entry_points.txt +0 -0
  145. {kailash-0.3.2.dist-info → kailash-0.4.0.dist-info}/licenses/LICENSE +0 -0
  146. {kailash-0.3.2.dist-info → kailash-0.4.0.dist-info}/top_level.txt +0 -0
@@ -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
- super().__init__()
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
164
+ super().__init__(name=self.name)
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
- super().__init__()
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
451
+ super().__init__(name=self.name)
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
- super().__init__()
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
729
+ super().__init__(name=self.name)
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
- super().__init__()
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
1055
+ super().__init__(name=self.name)
1056
+
997
1057
  def get_parameters(self) -> dict[str, NodeParameter]:
998
1058
  """Get the parameters for this node.
999
1059
 
@@ -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
- super().__init__()
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
- super().__init__()
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
+ ]