kailash 0.6.6__py3-none-any.whl → 0.8.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.
- kailash/__init__.py +35 -5
- kailash/access_control.py +64 -46
- kailash/adapters/__init__.py +5 -0
- kailash/adapters/mcp_platform_adapter.py +273 -0
- kailash/api/workflow_api.py +34 -3
- kailash/channels/__init__.py +21 -0
- kailash/channels/api_channel.py +409 -0
- kailash/channels/base.py +271 -0
- kailash/channels/cli_channel.py +661 -0
- kailash/channels/event_router.py +496 -0
- kailash/channels/mcp_channel.py +648 -0
- kailash/channels/session.py +423 -0
- kailash/mcp_server/discovery.py +57 -18
- kailash/middleware/communication/api_gateway.py +23 -3
- kailash/middleware/communication/realtime.py +83 -0
- kailash/middleware/core/agent_ui.py +1 -1
- kailash/middleware/gateway/storage_backends.py +393 -0
- kailash/middleware/mcp/enhanced_server.py +22 -16
- kailash/nexus/__init__.py +21 -0
- kailash/nexus/cli/__init__.py +5 -0
- kailash/nexus/cli/__main__.py +6 -0
- kailash/nexus/cli/main.py +176 -0
- kailash/nexus/factory.py +413 -0
- kailash/nexus/gateway.py +545 -0
- kailash/nodes/__init__.py +8 -5
- kailash/nodes/ai/iterative_llm_agent.py +988 -17
- kailash/nodes/ai/llm_agent.py +29 -9
- kailash/nodes/api/__init__.py +2 -2
- kailash/nodes/api/monitoring.py +1 -1
- kailash/nodes/base.py +29 -5
- kailash/nodes/base_async.py +54 -14
- kailash/nodes/code/async_python.py +1 -1
- kailash/nodes/code/python.py +50 -6
- kailash/nodes/data/async_sql.py +90 -0
- kailash/nodes/data/bulk_operations.py +939 -0
- kailash/nodes/data/query_builder.py +373 -0
- kailash/nodes/data/query_cache.py +512 -0
- kailash/nodes/monitoring/__init__.py +10 -0
- kailash/nodes/monitoring/deadlock_detector.py +964 -0
- kailash/nodes/monitoring/performance_anomaly.py +1078 -0
- kailash/nodes/monitoring/race_condition_detector.py +1151 -0
- kailash/nodes/monitoring/transaction_metrics.py +790 -0
- kailash/nodes/monitoring/transaction_monitor.py +931 -0
- kailash/nodes/security/behavior_analysis.py +414 -0
- kailash/nodes/system/__init__.py +17 -0
- kailash/nodes/system/command_parser.py +820 -0
- kailash/nodes/transaction/__init__.py +48 -0
- kailash/nodes/transaction/distributed_transaction_manager.py +983 -0
- kailash/nodes/transaction/saga_coordinator.py +652 -0
- kailash/nodes/transaction/saga_state_storage.py +411 -0
- kailash/nodes/transaction/saga_step.py +467 -0
- kailash/nodes/transaction/transaction_context.py +756 -0
- kailash/nodes/transaction/two_phase_commit.py +978 -0
- kailash/nodes/transform/processors.py +17 -1
- kailash/nodes/validation/__init__.py +21 -0
- kailash/nodes/validation/test_executor.py +532 -0
- kailash/nodes/validation/validation_nodes.py +447 -0
- kailash/resources/factory.py +1 -1
- kailash/runtime/access_controlled.py +9 -7
- kailash/runtime/async_local.py +84 -21
- kailash/runtime/local.py +21 -2
- kailash/runtime/parameter_injector.py +187 -31
- kailash/runtime/runner.py +6 -4
- kailash/runtime/testing.py +1 -1
- kailash/security.py +22 -3
- kailash/servers/__init__.py +32 -0
- kailash/servers/durable_workflow_server.py +430 -0
- kailash/servers/enterprise_workflow_server.py +522 -0
- kailash/servers/gateway.py +183 -0
- kailash/servers/workflow_server.py +293 -0
- kailash/utils/data_validation.py +192 -0
- kailash/workflow/builder.py +382 -15
- kailash/workflow/cyclic_runner.py +102 -10
- kailash/workflow/validation.py +144 -8
- kailash/workflow/visualization.py +99 -27
- {kailash-0.6.6.dist-info → kailash-0.8.0.dist-info}/METADATA +3 -2
- {kailash-0.6.6.dist-info → kailash-0.8.0.dist-info}/RECORD +81 -40
- kailash/workflow/builder_improvements.py +0 -207
- {kailash-0.6.6.dist-info → kailash-0.8.0.dist-info}/WHEEL +0 -0
- {kailash-0.6.6.dist-info → kailash-0.8.0.dist-info}/entry_points.txt +0 -0
- {kailash-0.6.6.dist-info → kailash-0.8.0.dist-info}/licenses/LICENSE +0 -0
- {kailash-0.6.6.dist-info → kailash-0.8.0.dist-info}/top_level.txt +0 -0
@@ -1,20 +1,29 @@
|
|
1
|
-
kailash/__init__.py,sha256=
|
1
|
+
kailash/__init__.py,sha256=yCfV0dNXfj0xBIsqAbdMl31CxaSma9AtltRW6rI2AhU,2878
|
2
2
|
kailash/__main__.py,sha256=vr7TVE5o16V6LsTmRFKG6RDKUXHpIWYdZ6Dok2HkHnI,198
|
3
|
-
kailash/access_control.py,sha256=
|
3
|
+
kailash/access_control.py,sha256=MjKtkoQ2sg1Mgfe7ovGxVwhAbpJKvaepPWr8dxOueMA,26058
|
4
4
|
kailash/access_control_abac.py,sha256=FPfa_8PuDP3AxTjdWfiH3ntwWO8NodA0py9W8SE5dno,30263
|
5
5
|
kailash/manifest.py,sha256=qzOmeMGWz20Sp4IJitSH9gTVbGng7hlimc96VTW4KI8,24814
|
6
6
|
kailash/sdk_exceptions.py,sha256=dueSUxUYqKXmHS5mwl6QtEzP6a0rMGXcBFGCh5sT0tg,10179
|
7
|
-
kailash/security.py,sha256=
|
7
|
+
kailash/security.py,sha256=GBU93tUXcTZGEjl0f9XXRlF3W-sSulhiatMZzv1dNqc,27228
|
8
8
|
kailash/access_control/__init__.py,sha256=ykR_zGJXQoCU_4gGNFbYzhVdUemxeAAoDQLhKIPVBGE,4018
|
9
9
|
kailash/access_control/managers.py,sha256=Vg2inaZqR2GBXsySvPZcEqQtFHgF94z7A_wUHMtA3qA,14431
|
10
10
|
kailash/access_control/rule_evaluators.py,sha256=niguhjThBjA0jIXvdKdGAXzdSM_bAd0ebphGgRrDFKU,15337
|
11
|
+
kailash/adapters/__init__.py,sha256=J6Jg66jyyRypQDxbJbcoSzuoAUi10HZs7JMnU6-0x1U,172
|
12
|
+
kailash/adapters/mcp_platform_adapter.py,sha256=RUAxvBFWrG7RhF7VZw28U7U4Z8EawJHO-6_75-MvgUs,9863
|
11
13
|
kailash/api/auth.py,sha256=SnEgCJ2AkFQORDiFHW4-DsMf2HZ4Ox2qfi1iL75wdG0,19913
|
12
14
|
kailash/api/custom_nodes.py,sha256=ATCrfAgYJhspKmgTdpWgPrSHkea6YLHcjjvaL_zfuqk,10614
|
13
15
|
kailash/api/custom_nodes_secure.py,sha256=cMh1FbEtUAEoLmTb5ew_CeX5kjikBzmBsat1GOkZzFY,13196
|
14
16
|
kailash/api/gateway.py,sha256=BVEKyC53JRnBkOyg3YXAPGDzLm3zon0vbO1xiM6yNxU,12540
|
15
17
|
kailash/api/mcp_integration.py,sha256=xY5VjYXh4bFuNyyWBXEuTm4jjwUn8_9QxZpa4hh6a0Q,14521
|
16
18
|
kailash/api/studio.py,sha256=8Gj3R3p_-EpJerkWYLyrqVzJprKOQmTmK-1EgiLoXMc,34892
|
17
|
-
kailash/api/workflow_api.py,sha256=
|
19
|
+
kailash/api/workflow_api.py,sha256=S1O_PRtTo2SSk47iUh4-uTh0WY1Tjbl1Gt54QIOLDmE,14330
|
20
|
+
kailash/channels/__init__.py,sha256=DP3PxbGDRCLrJkr6gGf1BBJ0MaHsfp_zUSbkyc04ieE,610
|
21
|
+
kailash/channels/api_channel.py,sha256=stuJxNJRUobzj1CavwsHWVZWr2kYqyVLjv_ynt6Wy6A,14541
|
22
|
+
kailash/channels/base.py,sha256=8-cUYAVMlO67BMZCZscShy0FPYAK31s9bxk0JXA9wIM,7825
|
23
|
+
kailash/channels/cli_channel.py,sha256=C7ctIb5V4e6T1Ksu5MPfP0rKOCEciMzOFhjrM9BvRmY,23564
|
24
|
+
kailash/channels/event_router.py,sha256=matl4yttgQa3Vl1HtrAUfNvJ-kfnr4pgP8tMHSDYkSM,16632
|
25
|
+
kailash/channels/mcp_channel.py,sha256=KZ8JtxMRUiwy0ecYWYdM6YSj7YuI50obXCRg0NdsGj8,22767
|
26
|
+
kailash/channels/session.py,sha256=4ZEutfyQ3fhBlBjXa5e32ZL2ZqEuQKwbAk0DGu00X1A,13068
|
18
27
|
kailash/cli/__init__.py,sha256=kJaqsBp3fRmagJhqA6LMwMbEa_Vkz93hIPH3W5Mn5r0,97
|
19
28
|
kailash/cli/commands.py,sha256=lv1S1uB0JQE4tiQCJIa1HCbjYDbFE9KwcK3M1jRtRU4,18168
|
20
29
|
kailash/client/__init__.py,sha256=WNR39t4O6TDQLI14uR_MjQpLza2c6rU3YkQCXcGCiSU,293
|
@@ -51,7 +60,7 @@ kailash/mcp_server/ai_registry_server.py,sha256=vMNMvWLegKBVp7YAHVKgltWa2vTXKNvV
|
|
51
60
|
kailash/mcp_server/auth.py,sha256=Y2BztTL2IILCLSHzZIDSXsIKyUTR8gUXwum5rKffUxs,25251
|
52
61
|
kailash/mcp_server/client.py,sha256=uJXOP7Z4q3CFnX_RvRL5NM6PBcEfR7fUkPQIxfa8c8I,25710
|
53
62
|
kailash/mcp_server/client_new.py,sha256=YU671JvAM0uvuX0uhGZCIKI8co3fqz0cs6HqLZ59Xyo,10285
|
54
|
-
kailash/mcp_server/discovery.py,sha256=
|
63
|
+
kailash/mcp_server/discovery.py,sha256=D8vcwVkbgQCNp0_BlkGeU_dnqgIXN2g0s3_GpndlQu0,57828
|
55
64
|
kailash/mcp_server/errors.py,sha256=_lycwudWP_AJ_KwLO5N3VCKbG1ikfaTyzA2PBF8UAYU,21181
|
56
65
|
kailash/mcp_server/oauth.py,sha256=GFC2O2ueiTTI6V-91Huevhc3K8CxrHe22knuHfuCTqY,56493
|
57
66
|
kailash/mcp_server/protocol.py,sha256=gXeJ-GvSf39WymfS6433SqLKBA40PdeDoBQqu7DUbJE,35129
|
@@ -74,11 +83,11 @@ kailash/middleware/auth/models.py,sha256=sMQ1JnEDKPId1kLNCi2fDfhgLZX-YguHPnSMfS_
|
|
74
83
|
kailash/middleware/auth/utils.py,sha256=AW4fYJ2opQvOr_1YgSQi_MsC_RoFPq0XVOEgbxoXWtw,6555
|
75
84
|
kailash/middleware/communication/__init__.py,sha256=keQ2db4WI2-oZ_nJ5sLE1Tum_RkUt7M2VLTmqOlt0zA,778
|
76
85
|
kailash/middleware/communication/ai_chat.py,sha256=2XmnJB2Nz2xm2darsF2DYnSLGLAYdyYooHok5GrHKb8,35994
|
77
|
-
kailash/middleware/communication/api_gateway.py,sha256
|
86
|
+
kailash/middleware/communication/api_gateway.py,sha256=hjs3Ued5YhFR1LcGJEB2d-F96imIuS7W7bxctQG3blA,32272
|
78
87
|
kailash/middleware/communication/events.py,sha256=MEjgcibNyjA4tSFK8CeXDn1oCE75My7K_saxdCBz2HY,15367
|
79
|
-
kailash/middleware/communication/realtime.py,sha256=
|
88
|
+
kailash/middleware/communication/realtime.py,sha256=xm0i-TUs82XUtnFfHpdeZcx4uMt_V-fmS_uTuvXqDV0,28647
|
80
89
|
kailash/middleware/core/__init__.py,sha256=4yQkOWC4b88zSogs1YVqtKG1PugbncqNCwNNWxTdIZA,545
|
81
|
-
kailash/middleware/core/agent_ui.py,sha256=
|
90
|
+
kailash/middleware/core/agent_ui.py,sha256=Ki5QpsYNM3o3h9KGor4YEXs9Xg8ehXe3w_M8SJnYhxI,36358
|
82
91
|
kailash/middleware/core/schema.py,sha256=uVF-5ZJlLYHOQdsKrG46FnTO1bq_QtDjhUSkIIDL9dY,23584
|
83
92
|
kailash/middleware/core/workflows.py,sha256=kjwwP69-T6eCY7kWIMLUBwVy2CapoPR34cqCETquq0s,12480
|
84
93
|
kailash/middleware/database/__init__.py,sha256=UMws94L-vja94AjfzPWIgn0h4_5BGQzI3YaSdqtzeLk,1682
|
@@ -95,12 +104,19 @@ kailash/middleware/gateway/deduplicator.py,sha256=CblV3fwc7s4wg6KIvypwyNMYL5AuQi
|
|
95
104
|
kailash/middleware/gateway/durable_gateway.py,sha256=EsIgMNxS_no2W40AXDyE7FmVdnGNU26kBRC5rfnSzoQ,14626
|
96
105
|
kailash/middleware/gateway/durable_request.py,sha256=SCnp-bF0tQX9oahr9reqcZjJ_YhyJkeYYl-un9rJ6lo,15437
|
97
106
|
kailash/middleware/gateway/event_store.py,sha256=A3Kh2MhVVPbXWvjeo550SqEGPiJYyspAfu6Gv7UZzo4,16131
|
107
|
+
kailash/middleware/gateway/storage_backends.py,sha256=HJTi6zU6oBI3R3ffcm_U-Xp9qqb9yOHS7JbRawP8AV8,12974
|
98
108
|
kailash/middleware/mcp/__init__.py,sha256=EdZB8zOMSBEEmudRzs8ksz9QZJYWQMEx7Tm1MOwIWnI,922
|
99
109
|
kailash/middleware/mcp/client_integration.py,sha256=dY1RmX-g5E6JzUFuWxk7viuOYIh8bMwoUSvHQMVEsYk,18265
|
100
|
-
kailash/middleware/mcp/enhanced_server.py,sha256=
|
101
|
-
kailash/
|
102
|
-
kailash/
|
103
|
-
kailash/
|
110
|
+
kailash/middleware/mcp/enhanced_server.py,sha256=RUVS7jWHn0ma4F3F23UvuFwUdu7OkSsIRNQmGtkG9I8,18547
|
111
|
+
kailash/nexus/__init__.py,sha256=zaOXOHmmxsDDuyVDA7P-EWkXHLsLHcnrZPSlNQ74M1k,463
|
112
|
+
kailash/nexus/factory.py,sha256=oqtPJoVvwQUdafs_h92MDpjt6xSO1vNLZHizZ1-XLks,12296
|
113
|
+
kailash/nexus/gateway.py,sha256=QzvJVFVmgNI_Z4VHIRpUQ9F8_HNrhINjAiJQ1kTpqJU,19105
|
114
|
+
kailash/nexus/cli/__init__.py,sha256=XbGcZSytNg5lJCOZ981prJpzwTXYJcR6_d6Fw9cXUTo,106
|
115
|
+
kailash/nexus/cli/__main__.py,sha256=GCIzeLFbdtBoRwfB1r0gxME078qd1e3IIFrGHHZQfAc,117
|
116
|
+
kailash/nexus/cli/main.py,sha256=2GqJP5fvP8DgPaeWzOjAG9yS0CbDWhzEl_tI38jO3VQ,5550
|
117
|
+
kailash/nodes/__init__.py,sha256=0uT1nGAIZNzk_tkQo1gmEEkroE8qiVWSjDv1hpoKqQA,1009
|
118
|
+
kailash/nodes/base.py,sha256=LqxnXG1hl33GY4caZiOCshagq-FfHe_nDHVAww1Dkmg,57125
|
119
|
+
kailash/nodes/base_async.py,sha256=whxepCiVplrltfzEQuabmnGCpEV5WgfqwgxbLdCyiDk,8864
|
104
120
|
kailash/nodes/base_cycle_aware.py,sha256=Xpze9xZzLepWeLpi9Y3tMn1dm2LVv-omr5TSQuGTtWo,13377
|
105
121
|
kailash/nodes/base_with_acl.py,sha256=ZfrkLPgrEBcNbG0LKvtq6glDxyOYOMRw3VXX4vWX6bI,11852
|
106
122
|
kailash/nodes/mixins.py,sha256=ncAdNQPe1sphLByeerP6G_s8mjFLt7dM4baiozzIBPA,12083
|
@@ -121,19 +137,19 @@ kailash/nodes/ai/agents.py,sha256=CRA3cdapQjpuvOniXUh6ZVWAlRxUIepVw1BROW6QzdY,20
|
|
121
137
|
kailash/nodes/ai/ai_providers.py,sha256=egfiOZzPmZ10d3wBCJ6ST4tRFrrtq0kt1VyCqxVpxas,65390
|
122
138
|
kailash/nodes/ai/embedding_generator.py,sha256=akGCzz7zLRSziqEQCiPwL2qWhRWxuM_1RQh-YtVEddw,31879
|
123
139
|
kailash/nodes/ai/intelligent_agent_orchestrator.py,sha256=LvBqMKc64zSxFWVCjbLKKel2QwEzoTeJAEgna7rZw00,83097
|
124
|
-
kailash/nodes/ai/iterative_llm_agent.py,sha256=
|
125
|
-
kailash/nodes/ai/llm_agent.py,sha256=
|
140
|
+
kailash/nodes/ai/iterative_llm_agent.py,sha256=T_Rtmz6E5gB0HugT2Q8FHZE9Giqy5WiBB0UCJ4PflNw,93308
|
141
|
+
kailash/nodes/ai/llm_agent.py,sha256=NeNJZbV_VOUbULug2LASwyzLyoUO5wi58Bc9sXTubuc,90181
|
126
142
|
kailash/nodes/ai/models.py,sha256=wsEeUTuegy87mnLtKgSTg7ggCXvC1n3MsL-iZ4qujHs,16393
|
127
143
|
kailash/nodes/ai/self_organizing.py,sha256=B7NwKaBW8OHQBf5b0F9bSs8Wm-5BDJ9IjIkxS9h00mg,62885
|
128
144
|
kailash/nodes/ai/vision_utils.py,sha256=OHD9cVH_mq0WpJyQkNTj_mpipIVWfSV_bF9eA6CdyeA,4166
|
129
145
|
kailash/nodes/alerts/__init__.py,sha256=CY3agJ7VQ4yU68BhxMCaj18EGEaDecYfLxceHHP4o9c,782
|
130
146
|
kailash/nodes/alerts/base.py,sha256=qFU3cBF7jJNjScA0BJv2mTYCUTNQjbr4wTDEEvIGvRE,7598
|
131
147
|
kailash/nodes/alerts/discord.py,sha256=d7tFQy_yFdQSJwNrB-adVwep7-N0vgQ7xX1pXsPCUKE,16996
|
132
|
-
kailash/nodes/api/__init__.py,sha256=
|
148
|
+
kailash/nodes/api/__init__.py,sha256=KOcbsEZdx9kyxpUJiplKx1OFIFoAvvUu7x00BUFOy0w,2340
|
133
149
|
kailash/nodes/api/auth.py,sha256=mve8rdshFIfLpkJX6M9opgDDru1LjcTyf3KpuCs1wd0,30869
|
134
150
|
kailash/nodes/api/graphql.py,sha256=IJsL-oi6U_QbeKHzyKBgUZYYR-fUmS7doWw1fqsKjCo,16999
|
135
151
|
kailash/nodes/api/http.py,sha256=1D62v1gtoh91meuT9PBjzPKkIFX31sH2gGCLAxwu1Hg,39324
|
136
|
-
kailash/nodes/api/monitoring.py,sha256=
|
152
|
+
kailash/nodes/api/monitoring.py,sha256=7aa1HUReqXWWcKWMQ5xdSw9ZLCFfCdhBJFGlyAOlBPg,17471
|
137
153
|
kailash/nodes/api/rate_limiting.py,sha256=y_yPkuCfiaD9R3Jc7fTVR6_ABRCqnl8TiCVtH-r0uOs,19673
|
138
154
|
kailash/nodes/api/rest.py,sha256=jrbVROhcsSwmp2zvCVNnd4zDBVhfpglmChcdBJz7TA4,48798
|
139
155
|
kailash/nodes/api/security.py,sha256=VxMl5p7jWF2ViAqzHTFkte6agUiS9QEiQztV9l9PzDk,31134
|
@@ -149,19 +165,22 @@ kailash/nodes/cache/cache.py,sha256=Qme8fmPVyH_OXSQqjBaQRRu8l9csX39Z3AY1Hi1r6gk,
|
|
149
165
|
kailash/nodes/cache/cache_invalidation.py,sha256=IUvxrRj3K5EF29Z2EaKl7t6Uze_cssnzTqhOH4fLrio,34044
|
150
166
|
kailash/nodes/cache/redis_pool_manager.py,sha256=GR82GCWxo_gAzRE-091OB6AhKre8CTwM3OoePLb2gvE,21574
|
151
167
|
kailash/nodes/code/__init__.py,sha256=yhEwuMjUEPFfe6hMGMd4E4gZdLUuf2JEQ7knYapiM4o,1283
|
152
|
-
kailash/nodes/code/async_python.py,sha256=
|
153
|
-
kailash/nodes/code/python.py,sha256=
|
168
|
+
kailash/nodes/code/async_python.py,sha256=Ai-iMpmz-sAori73JBk0wZtqmwtmF2GNPDxqB04I2Ck,37058
|
169
|
+
kailash/nodes/code/python.py,sha256=u-5lSoxc5ul7zGGSanrcVwXLxlGcDlirdCXT6mLSm40,60331
|
154
170
|
kailash/nodes/compliance/__init__.py,sha256=6a_FL4ofc8MAVuZ-ARW5uYenZLS4mBFVM9AI2QsnoF8,214
|
155
171
|
kailash/nodes/compliance/data_retention.py,sha256=90bH_eGwlcDzUdklAJeXQM-RcuLUGQFQ5fgHOK8a4qk,69443
|
156
172
|
kailash/nodes/compliance/gdpr.py,sha256=ZMoHZjAo4QtGwtFCzGMrAUBFV3TbZOnJ5DZGZS87Bas,70548
|
157
173
|
kailash/nodes/data/__init__.py,sha256=f0h4ysvXxlyFcNJLvDyXrgJ0ixwDF1cS0pJ2QNPakhg,5213
|
158
174
|
kailash/nodes/data/async_connection.py,sha256=wfArHs9svU48bxGZIiixSV2YVn9cukNgEjagwTRu6J4,17250
|
159
|
-
kailash/nodes/data/async_sql.py,sha256=
|
175
|
+
kailash/nodes/data/async_sql.py,sha256=k4zgeHxgZLB06bl8Aos4WdFrHkYvhtAHX3en9wJv1Hw,103160
|
160
176
|
kailash/nodes/data/async_vector.py,sha256=HtwQLO25IXu8Vq80qzU8rMkUAKPQ2qM0x8YxjXHlygU,21005
|
177
|
+
kailash/nodes/data/bulk_operations.py,sha256=WVopmosVkIlweFxVt3boLdCPc93EqpYyQ1Ez9mCIt0c,34453
|
161
178
|
kailash/nodes/data/directory.py,sha256=fbfLqD_ijRubk-4xew3604QntPsyDxqaF4k6TpfyjDg,9923
|
162
179
|
kailash/nodes/data/event_generation.py,sha256=Bc1se0tPg1IAGCQDrWqlFmgoOpUyfMN9ku4Lm3akhXU,11579
|
163
180
|
kailash/nodes/data/file_discovery.py,sha256=njLLusndwBFwbaWP8rcaiE0UQ49RpDlNQ-3SXH7Jhi4,21733
|
164
181
|
kailash/nodes/data/optimistic_locking.py,sha256=R3C69Vs4_4jlmnpfrI3GSIfA6zVQ3hyhMr8r-wXuliI,33329
|
182
|
+
kailash/nodes/data/query_builder.py,sha256=TyqOEOnlX0dJR4lunKcCCzwy9GCwB_k2HvMq1cPhS1w,13318
|
183
|
+
kailash/nodes/data/query_cache.py,sha256=bjednAwXzkGmAQEyFx7HE7MHQDl0hUKHqr_VUuUEXRo,17172
|
165
184
|
kailash/nodes/data/query_pipeline.py,sha256=qX9QdszpMyjTRrljFLtcY_CytSJRDTpGjt4DhwAdPlk,21710
|
166
185
|
kailash/nodes/data/query_router.py,sha256=HExyJlOoz4p5gCYh1zonlFls4Y0r19VvM2TjRztzmqg,32005
|
167
186
|
kailash/nodes/data/readers.py,sha256=MbhILOs7A6XdtvHNqeDLTN4x4MJAzxmlYR7KaPJkDJY,45994
|
@@ -191,12 +210,17 @@ kailash/nodes/mixins/__init__.py,sha256=0WYfu5kj-lHbFwP9g5vmlbsG8UzvI-vhOyHMEUzX
|
|
191
210
|
kailash/nodes/mixins/event_emitter.py,sha256=xTeNrBWmuWIf8qYA5DZekymjjrTAD1sboW9dKbAP40w,7492
|
192
211
|
kailash/nodes/mixins/mcp.py,sha256=HSULx66VY-e8h5R4HjcNDI5pPVq3MN9HxD8T9FI9vRo,7040
|
193
212
|
kailash/nodes/mixins/security.py,sha256=oxIwfKHd6Sdmd2GIaoNkRcSzVHUusYKyGNA7rM61fvw,5534
|
194
|
-
kailash/nodes/monitoring/__init__.py,sha256=
|
213
|
+
kailash/nodes/monitoring/__init__.py,sha256=vuE31gA-8KiHqkvJn1oZ-8L_xQxuzKVZdNvV2Q5OjdI,910
|
195
214
|
kailash/nodes/monitoring/connection_dashboard.py,sha256=mvrBt081SGZ8xNrc_8kdTFQcphxBHUVAPf8xrW4z-3o,29074
|
215
|
+
kailash/nodes/monitoring/deadlock_detector.py,sha256=EcYKD6zsuIfBEUNFZ8QDdRUpd4SYTK2ry0yffFSfRZg,37861
|
196
216
|
kailash/nodes/monitoring/health_check.py,sha256=dzCrjUXIx6I-SYrUR9USIt_faougZESHsF0vFnGT-To,16324
|
197
217
|
kailash/nodes/monitoring/log_processor.py,sha256=HicTgz4Y4RGC6jsyvUaVLVqA3-VyBqW0tHcnAaKGNOk,30886
|
198
218
|
kailash/nodes/monitoring/metrics_collector.py,sha256=qTAcZSx9qdR1H4rUswkvKC7K61pVf4MVXA-npi8FWbY,23155
|
219
|
+
kailash/nodes/monitoring/performance_anomaly.py,sha256=mSouk3Q6DOa--tX7QVNxIV5AvKKT_MCXwrB4KsroMuU,41416
|
199
220
|
kailash/nodes/monitoring/performance_benchmark.py,sha256=XiCFqvhKdgq3FgBR9C-LbmvwDLE6uKEyfl4e0T5QrOk,93311
|
221
|
+
kailash/nodes/monitoring/race_condition_detector.py,sha256=uGhXpGYRxcCTzc0WL0uRm_0oLpPY7mwHN_vYi7-z8Ig,44628
|
222
|
+
kailash/nodes/monitoring/transaction_metrics.py,sha256=PAVj5ZWMnSRfeFhaHdxntA0GrwaBkuevS_6FK2wmdbE,29617
|
223
|
+
kailash/nodes/monitoring/transaction_monitor.py,sha256=vZJhNOWRC3oQXN3h1xdyAh_HYW50RnguoFasatmPqsI,34775
|
200
224
|
kailash/nodes/rag/__init__.py,sha256=3UdByxZHfz2jtrYtUKYcffYdc9Xtd7skoUbKsA2vtfA,8660
|
201
225
|
kailash/nodes/rag/advanced.py,sha256=FHC9ueZ2CiePf8BumrXoisXOiDtvlKwcQ97SX60uTGE,60293
|
202
226
|
kailash/nodes/rag/agentic.py,sha256=bdhRTWqlxxNM1CQgj8IlanvCkjUQQJxVpGj0on6_qh0,26240
|
@@ -217,33 +241,50 @@ kailash/nodes/rag/workflows.py,sha256=PL9d3Lk15drwo2QVdNR9B61EpZ8Kc1crjnqFXc10O1
|
|
217
241
|
kailash/nodes/security/__init__.py,sha256=oaoZdbKhjEZ8vtUHGRPZPDixInzFDmhUZg4ou_Lz6mI,611
|
218
242
|
kailash/nodes/security/abac_evaluator.py,sha256=MAVJrIIQGHdOI-OfzGJFImVaHSq4vO8avEB0bSTprWk,50313
|
219
243
|
kailash/nodes/security/audit_log.py,sha256=zjwLoWHJLhkJiD5rRmE8H2mSEE7-6EHh_FR0FT91uLU,3130
|
220
|
-
kailash/nodes/security/behavior_analysis.py,sha256=
|
244
|
+
kailash/nodes/security/behavior_analysis.py,sha256=zFR5Yny0C85JFnR4I4nfWgHX5PI1bmpB1i-cLZjSvq4,90007
|
221
245
|
kailash/nodes/security/credential_manager.py,sha256=kqetmEBUnOOtSJyCpf0o_IRlwzpCv5FeInB4enBfk5E,14968
|
222
246
|
kailash/nodes/security/rotating_credentials.py,sha256=yEDSraBi_M3DKAaodmkkVPXHreUvrLU8xuTky_Z-tT4,28928
|
223
247
|
kailash/nodes/security/security_event.py,sha256=yVP8foaki-LDD16mlRapaPsbaWMwsum5J_V0n1bnqvw,4150
|
224
248
|
kailash/nodes/security/threat_detection.py,sha256=9tgEteZ41daggTb8rZuRYtd8hNZoghCXiSDK8QE5WWE,40097
|
249
|
+
kailash/nodes/system/__init__.py,sha256=XYVoqLnSsEPk-lZ3yrk2dDFBCieQtZdpD583hvUtRJk,310
|
250
|
+
kailash/nodes/system/command_parser.py,sha256=lbcMTrb3PsxeIhDi7IPmsZ5PyjKjfmGuaR7gCNRtbZA,28086
|
225
251
|
kailash/nodes/testing/__init__.py,sha256=TpaRD5YHwT6R3pI0r0WU99-Vgixj6gmCbZewnt8K8uI,274
|
226
252
|
kailash/nodes/testing/credential_testing.py,sha256=gjoZDL9MbuwkK5Akb8kZA9GF363DlM6WRvi4rxwPbuU,17927
|
253
|
+
kailash/nodes/transaction/__init__.py,sha256=W3wfDtseW6I7mq4L9kr0UXOADTV27q5BgX9JTyVlmCM,1414
|
254
|
+
kailash/nodes/transaction/distributed_transaction_manager.py,sha256=44R2KDNIQqtxXkZlvR5OaQvXcuusPVmZJ0-16WyfMfc,38195
|
255
|
+
kailash/nodes/transaction/saga_coordinator.py,sha256=411I0wF-mC3VOawu-gUNWW0VY9vnUzU3TQN-pApn1ZM,22617
|
256
|
+
kailash/nodes/transaction/saga_state_storage.py,sha256=7LU4WLRufzDrexueGD-6k4G0Bz4N8RQqkATewXOHU84,14595
|
257
|
+
kailash/nodes/transaction/saga_step.py,sha256=_oOuzTnKAkGYBzliyDw8f0tjIkk07Ey3d2clr_nsp-c,16657
|
258
|
+
kailash/nodes/transaction/transaction_context.py,sha256=ZAMZDFSvIpkFYy2XSFMpfIov8LbYrxL7fMbpxWJePuk,27969
|
259
|
+
kailash/nodes/transaction/two_phase_commit.py,sha256=kCUN2q3F_CFYiA-XUCahvh4asnI9AiMPdFbLV5KSgJc,37021
|
227
260
|
kailash/nodes/transform/__init__.py,sha256=JWciUYn9y78-tWiYhc4SCXRoy8YP2O3S2dRp-BXVQxA,765
|
228
261
|
kailash/nodes/transform/chunkers.py,sha256=StRuS6-eLE67OVsqqJJF8dqA2jngD-4yp_rjZQfMAAA,24621
|
229
262
|
kailash/nodes/transform/formatters.py,sha256=BWb5depTZ23Bbg41A_nZojIeET7in6WxYvi3Bhjg-bk,3072
|
230
|
-
kailash/nodes/transform/processors.py,sha256=
|
263
|
+
kailash/nodes/transform/processors.py,sha256=SM6pzH6_8yawc-rsOY_AIKkksL1GArdERHsRkxToj6k,39174
|
264
|
+
kailash/nodes/validation/__init__.py,sha256=99aalT9RziuSFqqSAwhnGEeVXTZDOTWwz54u8gZVzsY,617
|
265
|
+
kailash/nodes/validation/test_executor.py,sha256=q41ljbL04daWMXY95-Ufsy8rnF4LRVZIqOT1bR0FhrU,18518
|
266
|
+
kailash/nodes/validation/validation_nodes.py,sha256=89_v996cMyOaJ3BceYcfoZt2cNxOHJp45W7FNmVewOk,17001
|
231
267
|
kailash/resources/__init__.py,sha256=JM90kDB7k9wTsd6-2jwm-312SeOaXvavyKnPwQwy4PY,1077
|
232
|
-
kailash/resources/factory.py,sha256=
|
268
|
+
kailash/resources/factory.py,sha256=YJYtznJmS1SL0gecqWl1b3YN83WN83QaNY4xVcqCzIc,15821
|
233
269
|
kailash/resources/health.py,sha256=i6XS0HdL6pUYq8SBdRjvchf-oj0sy3JoRLszNylfQJc,9702
|
234
270
|
kailash/resources/reference.py,sha256=RKfXzJFIdid0cLOwsXSmlXq4NhSEci4GO-q3M3qcjA8,7526
|
235
271
|
kailash/resources/registry.py,sha256=5978e9VcUq0XBi9LRN89swptBSOAOAyNmwe2pxFHMxM,13789
|
236
272
|
kailash/runtime/__init__.py,sha256=CvU-qBMESYYISqFOlYlLsYJrXJu0Gqr4x6yr4Ob_Rng,278
|
237
|
-
kailash/runtime/access_controlled.py,sha256=
|
238
|
-
kailash/runtime/async_local.py,sha256=
|
273
|
+
kailash/runtime/access_controlled.py,sha256=HtNJZylaB-2FuPsfEOfQ-4ny4HzwJfHaHNMu2xS1Nzs,17324
|
274
|
+
kailash/runtime/async_local.py,sha256=sYNggSU0R-oo8cCvU5ayodDBqASzUhxu994ZvZxDSC0,34010
|
239
275
|
kailash/runtime/docker.py,sha256=sZknVl1PCGfAZeyc0-exTuKlllSyjYlFIgJoiB3CRNs,23500
|
240
|
-
kailash/runtime/local.py,sha256
|
276
|
+
kailash/runtime/local.py,sha256=-xqgydrSpg0eiC3MIVfWK3S6H4dUNUojrXFKttN_YGc,46422
|
241
277
|
kailash/runtime/parallel.py,sha256=mz_wPD13-YVc3Q_8HkOs4nPQPdTjnjCcnRL7ZRM70lo,21070
|
242
278
|
kailash/runtime/parallel_cyclic.py,sha256=yANZHnePjhCPuCFbq3lFQA1K6jbCv5Of5-vIKbCsmZk,19863
|
243
279
|
kailash/runtime/parameter_injection.py,sha256=kG4GhmarsRr5t3VDFbc2G1HSbsZJg6UmienHCE2Ru7o,14852
|
244
|
-
kailash/runtime/parameter_injector.py,sha256=
|
245
|
-
kailash/runtime/runner.py,sha256=
|
246
|
-
kailash/runtime/testing.py,sha256=
|
280
|
+
kailash/runtime/parameter_injector.py,sha256=4l-OOKEBzM_cQ17Zz5o24QSV9a1Zqfu3D2qyq6Uy7hE,30810
|
281
|
+
kailash/runtime/runner.py,sha256=t_SEumtVn9uXlSzJicb50MpUu6xdqjW0uZ5b2phjVPY,3318
|
282
|
+
kailash/runtime/testing.py,sha256=hTrgGnqxwSBYoztVqnZpxzFwm0DwUnaJdChRHikgoio,19089
|
283
|
+
kailash/servers/__init__.py,sha256=-2nkB5pIkBjc-klGJcKCuzWRAl_G7hlepvyV_Es64DI,976
|
284
|
+
kailash/servers/durable_workflow_server.py,sha256=lMnf-rTUKrjiS9NhNo3qx2lWYC0NR7EEF-4WBUPZ9zI,16588
|
285
|
+
kailash/servers/enterprise_workflow_server.py,sha256=HxArcgu5fQwV2KxKkf1n0Yu75zXy_tS8oxd4-1DM5UY,19785
|
286
|
+
kailash/servers/gateway.py,sha256=faZTHsHL-3GwX-um3iLT4MaJmub2QIMNPnlkLAJe7Oc,6552
|
287
|
+
kailash/servers/workflow_server.py,sha256=nkx8qpZ4xJD767L3M2dTj68SXv8uLUNht6tZ0v2eB5c,9538
|
247
288
|
kailash/testing/__init__.py,sha256=4cqLSbcFz9bDY09vuK5Vpg3UtoAAa93R5tc9zIUvGAE,796
|
248
289
|
kailash/testing/async_test_case.py,sha256=3Pdi13zT-_LduJ5Tfe7yuhz8Qz7KQpcER6G2nMe-t5A,12815
|
249
290
|
kailash/testing/async_utils.py,sha256=gSHcArDJf98mDi--NPFpCoGmAgKHDZ0__tyKAjDjpm0,10745
|
@@ -258,6 +299,7 @@ kailash/tracking/storage/base.py,sha256=wWkK1XdrMV0EGxlbFDyfuVnDoIG0tdSPPwz_8iwz
|
|
258
299
|
kailash/tracking/storage/database.py,sha256=O3-qYmgwTccq9jYl25C0L6R398pXPsWkIAoWLL1aZvQ,20048
|
259
300
|
kailash/tracking/storage/filesystem.py,sha256=VhWxNvqf_Ta3mIaGqKuOrcCqQiEvJj7S8NK5yRd1V68,19627
|
260
301
|
kailash/utils/__init__.py,sha256=pFKhHJxU_kyFE9aGT5recw5E-3nbfVF5pMHepBJWB2E,253
|
302
|
+
kailash/utils/data_validation.py,sha256=LYQWHtB-BRSAGQDMdZQGUKOZCGeoeia2fIqM0UfJFSU,6851
|
261
303
|
kailash/utils/export.py,sha256=WBazN03LOCI03TsIElNv31wSZ_uTLPl8THnqdohgyTk,37361
|
262
304
|
kailash/utils/resource_manager.py,sha256=xMgcSogLofUIRpRMXzmK4gxBi2lIqEJ7rn2rsBBm9xo,13209
|
263
305
|
kailash/utils/secure_logging.py,sha256=3iEJt7sXnIgvdiRz8qsx0JbcygrsUf0_C8UHFXLNfcs,11325
|
@@ -274,8 +316,7 @@ kailash/visualization/reports.py,sha256=D7kJ0flHr16d-qSEq8vnw20N8u_dgTrXtKVSXVm8
|
|
274
316
|
kailash/workflow/__init__.py,sha256=DDQDE9K6RmbX6479guNLLgjiVVV-gQERRvCEJWSVlsM,1836
|
275
317
|
kailash/workflow/async_builder.py,sha256=iv8bDJHdWAUZ77SyMo6sucd92dTdtXesdxycrSE7mM4,20613
|
276
318
|
kailash/workflow/async_patterns.py,sha256=X0ZDXwr6UAu0WC1xnCB7-0V1-tRbKs9UI4JqaBCB6tE,22824
|
277
|
-
kailash/workflow/builder.py,sha256=
|
278
|
-
kailash/workflow/builder_improvements.py,sha256=MYAf-CJkrXTP8Q6leapnfVZATQxCJJ1cAymNOqXCh2w,7374
|
319
|
+
kailash/workflow/builder.py,sha256=3l5wVRtMB1Om_QmeoQ6jsrc_Lm8Hna_pH47UjnfMb9I,31184
|
279
320
|
kailash/workflow/convergence.py,sha256=vfIDR-uNaQE-LVUEzrRtfgKPgX9gL0nLNH-nTg5ra-c,10031
|
280
321
|
kailash/workflow/cycle_analyzer.py,sha256=BGBpgdB-g0-KRI65sVAvHV4lxfoCzMt4uKOHbw8GXT4,32596
|
281
322
|
kailash/workflow/cycle_builder.py,sha256=uWAx8K4ZKMtFC3mWylK4gHT03xeu0xChJlhw50hVqEE,20883
|
@@ -284,7 +325,7 @@ kailash/workflow/cycle_debugger.py,sha256=eG-Q_kakqyhr1Ts-q4pRnO0EI7mVO9ao1s9WOx
|
|
284
325
|
kailash/workflow/cycle_exceptions.py,sha256=4_OLnbEXqIiXKzOc3uh8DzFik4wEHwl8bRZhY9Xhf2A,21838
|
285
326
|
kailash/workflow/cycle_profiler.py,sha256=aEWSCm0Xy15SjgLTpPooVJMzpFhtJWt4livR-3Me4N8,28547
|
286
327
|
kailash/workflow/cycle_state.py,sha256=hzRUvciRreWfS56Cf7ZLQPit_mlPTQDoNTawh8yi-2s,10747
|
287
|
-
kailash/workflow/cyclic_runner.py,sha256=
|
328
|
+
kailash/workflow/cyclic_runner.py,sha256=0IlmghTrwYb3ivqP975DprP3aj45-8_Sn5Wq9tEutG0,43888
|
288
329
|
kailash/workflow/graph.py,sha256=zRpGLXeuwtuxFBvE7_16c_bB9yqZirM_uwtfD1_MY4g,59272
|
289
330
|
kailash/workflow/input_handling.py,sha256=HrW--AmelYC8F18nkfmYlF_wXycA24RuNbDRjvM8rqk,6561
|
290
331
|
kailash/workflow/mermaid_visualizer.py,sha256=UsQDvxgIAhy-Th7ZzFnbuziaTx1Cd5yUh6S_25DffoQ,22294
|
@@ -295,11 +336,11 @@ kailash/workflow/runner.py,sha256=l6jb-H7DwbRlvQ3H3SuTs70rut-u7H3Gi8nybKCEjZU,10
|
|
295
336
|
kailash/workflow/safety.py,sha256=pS5GKu7UdkzFZcb16Dn-0jBxjULDU-59_M0CbUVMVyw,11298
|
296
337
|
kailash/workflow/state.py,sha256=UTZxs5-Ona6uvBhx1__i6-RX8gB4qazkBIWE7uyRmWQ,7600
|
297
338
|
kailash/workflow/templates.py,sha256=98EN5H4fO9b4xeczk20Hu5L8hNcAuRQNGayT6vnZYCw,48540
|
298
|
-
kailash/workflow/validation.py,sha256=
|
299
|
-
kailash/workflow/visualization.py,sha256=
|
300
|
-
kailash-0.
|
301
|
-
kailash-0.
|
302
|
-
kailash-0.
|
303
|
-
kailash-0.
|
304
|
-
kailash-0.
|
305
|
-
kailash-0.
|
339
|
+
kailash/workflow/validation.py,sha256=rWZNJYA_XAfk_og6Cxz8p1gZ3j5CylPvMTDXg2SfjgM,38574
|
340
|
+
kailash/workflow/visualization.py,sha256=_oWiLrd6PjoAnNvCnQtFjxx2SVwhDeuYkuPz_ptIQvQ,23013
|
341
|
+
kailash-0.8.0.dist-info/licenses/LICENSE,sha256=Axe6g7bTrJkToK9h9j2SpRUKKNaDZDCo2lQ2zPxCE6s,1065
|
342
|
+
kailash-0.8.0.dist-info/METADATA,sha256=xsd4eOqs4Lt3pigjT2SoOKnoQ0-P6YjSXf9zYu66LVY,26441
|
343
|
+
kailash-0.8.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
344
|
+
kailash-0.8.0.dist-info/entry_points.txt,sha256=M_q3b8PG5W4XbhSgESzIJjh3_4OBKtZFYFsOdkr2vO4,45
|
345
|
+
kailash-0.8.0.dist-info/top_level.txt,sha256=z7GzH2mxl66498pVf5HKwo5wwfPtt9Aq95uZUpH6JV0,8
|
346
|
+
kailash-0.8.0.dist-info/RECORD,,
|
@@ -1,207 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
WorkflowBuilder Improvements for Parameter Passing
|
3
|
-
|
4
|
-
This module contains improvements to the WorkflowBuilder to handle
|
5
|
-
parameter passing to nodes without incoming connections.
|
6
|
-
"""
|
7
|
-
|
8
|
-
from typing import Any, Dict, List, Optional
|
9
|
-
|
10
|
-
from kailash.workflow.builder import WorkflowBuilder
|
11
|
-
from kailash.workflow.graph import Workflow
|
12
|
-
|
13
|
-
|
14
|
-
class ImprovedWorkflowBuilder(WorkflowBuilder):
|
15
|
-
"""Enhanced WorkflowBuilder that automatically handles parameter passing"""
|
16
|
-
|
17
|
-
def __init__(self):
|
18
|
-
super().__init__()
|
19
|
-
self.workflow_parameters: Dict[str, Any] = {}
|
20
|
-
self.parameter_mappings: Dict[str, Dict[str, str]] = {}
|
21
|
-
|
22
|
-
def set_workflow_parameters(self, **parameters) -> "ImprovedWorkflowBuilder":
|
23
|
-
"""
|
24
|
-
Set default parameters that will be passed to all nodes.
|
25
|
-
|
26
|
-
Args:
|
27
|
-
**parameters: Key-value pairs of workflow-level parameters
|
28
|
-
|
29
|
-
Returns:
|
30
|
-
Self for chaining
|
31
|
-
"""
|
32
|
-
self.workflow_parameters.update(parameters)
|
33
|
-
return self
|
34
|
-
|
35
|
-
def add_parameter_mapping(
|
36
|
-
self, node_id: str, mappings: Dict[str, str]
|
37
|
-
) -> "ImprovedWorkflowBuilder":
|
38
|
-
"""
|
39
|
-
Add parameter mappings for a specific node.
|
40
|
-
|
41
|
-
Args:
|
42
|
-
node_id: Node to configure
|
43
|
-
mappings: Dict mapping workflow param names to node param names
|
44
|
-
|
45
|
-
Returns:
|
46
|
-
Self for chaining
|
47
|
-
"""
|
48
|
-
if node_id not in self.parameter_mappings:
|
49
|
-
self.parameter_mappings[node_id] = {}
|
50
|
-
self.parameter_mappings[node_id].update(mappings)
|
51
|
-
return self
|
52
|
-
|
53
|
-
def add_input_connection(
|
54
|
-
self, to_node: str, to_input: str, from_workflow_param: str
|
55
|
-
) -> "ImprovedWorkflowBuilder":
|
56
|
-
"""
|
57
|
-
Connect a workflow parameter directly to a node input.
|
58
|
-
|
59
|
-
Args:
|
60
|
-
to_node: Target node ID
|
61
|
-
to_input: Input parameter name on the node
|
62
|
-
from_workflow_param: Workflow parameter name
|
63
|
-
|
64
|
-
Returns:
|
65
|
-
Self for chaining
|
66
|
-
"""
|
67
|
-
# Add a special connection type for workflow inputs
|
68
|
-
connection = {
|
69
|
-
"from_node": "__workflow_input__",
|
70
|
-
"from_output": from_workflow_param,
|
71
|
-
"to_node": to_node,
|
72
|
-
"to_input": to_input,
|
73
|
-
"is_workflow_input": True,
|
74
|
-
}
|
75
|
-
self.connections.append(connection)
|
76
|
-
return self
|
77
|
-
|
78
|
-
def build(self, workflow_id: str | None = None, **kwargs) -> Workflow:
|
79
|
-
"""
|
80
|
-
Build the workflow with automatic parameter injection.
|
81
|
-
|
82
|
-
Returns:
|
83
|
-
Enhanced Workflow instance
|
84
|
-
"""
|
85
|
-
# First, build the base workflow
|
86
|
-
workflow = super().build(workflow_id, **kwargs)
|
87
|
-
|
88
|
-
# Find nodes without incoming connections
|
89
|
-
nodes_with_inputs = set()
|
90
|
-
for conn in self.connections:
|
91
|
-
if not conn.get("is_workflow_input"):
|
92
|
-
nodes_with_inputs.add(conn["to_node"])
|
93
|
-
|
94
|
-
nodes_without_inputs = set(self.nodes.keys()) - nodes_with_inputs
|
95
|
-
|
96
|
-
# For each node without inputs, check if it needs workflow parameters
|
97
|
-
for node_id in nodes_without_inputs:
|
98
|
-
node = self.nodes[node_id]
|
99
|
-
node_instance = workflow.get_node(node_id)
|
100
|
-
|
101
|
-
if hasattr(node_instance, "get_parameters"):
|
102
|
-
params = node_instance.get_parameters()
|
103
|
-
|
104
|
-
# Check which required parameters are missing from config
|
105
|
-
for param_name, param_def in params.items():
|
106
|
-
if param_def.required and param_name not in node["config"]:
|
107
|
-
# Check if this parameter should come from workflow parameters
|
108
|
-
if param_name in self.workflow_parameters:
|
109
|
-
# Add to node config
|
110
|
-
node["config"][param_name] = self.workflow_parameters[
|
111
|
-
param_name
|
112
|
-
]
|
113
|
-
elif node_id in self.parameter_mappings:
|
114
|
-
# Check parameter mappings
|
115
|
-
mapping = self.parameter_mappings[node_id]
|
116
|
-
if param_name in mapping:
|
117
|
-
workflow_param = mapping[param_name]
|
118
|
-
if workflow_param in self.workflow_parameters:
|
119
|
-
node["config"][param_name] = (
|
120
|
-
self.workflow_parameters[workflow_param]
|
121
|
-
)
|
122
|
-
|
123
|
-
# Store workflow parameters in metadata for runtime reference
|
124
|
-
workflow._metadata["workflow_parameters"] = self.workflow_parameters
|
125
|
-
workflow._metadata["parameter_mappings"] = self.parameter_mappings
|
126
|
-
|
127
|
-
return workflow
|
128
|
-
|
129
|
-
|
130
|
-
def create_user_login_workflow_improved(config: Dict[str, Any]) -> Workflow:
|
131
|
-
"""
|
132
|
-
Example of creating a login workflow with proper parameter handling.
|
133
|
-
"""
|
134
|
-
workflow = ImprovedWorkflowBuilder()
|
135
|
-
|
136
|
-
# Set workflow-level parameters that will be shared
|
137
|
-
workflow.set_workflow_parameters(
|
138
|
-
tenant_id="default", database_config=config["database_config"]
|
139
|
-
)
|
140
|
-
|
141
|
-
# Add user fetcher node
|
142
|
-
workflow.add_node(
|
143
|
-
"UserManagementNode",
|
144
|
-
"user_fetcher",
|
145
|
-
{
|
146
|
-
"operation": "get_user",
|
147
|
-
"identifier": "$.email",
|
148
|
-
"identifier_type": "email",
|
149
|
-
# tenant_id and database_config will be auto-injected
|
150
|
-
},
|
151
|
-
)
|
152
|
-
|
153
|
-
# Map workflow inputs to the first node
|
154
|
-
workflow.add_input_connection("user_fetcher", "email", "email")
|
155
|
-
workflow.add_input_connection("user_fetcher", "password", "password")
|
156
|
-
|
157
|
-
# Add other nodes...
|
158
|
-
workflow.add_node(
|
159
|
-
"PythonCodeNode",
|
160
|
-
"password_verifier",
|
161
|
-
{"code": "# Password verification code here"},
|
162
|
-
)
|
163
|
-
|
164
|
-
# Connect nodes
|
165
|
-
workflow.add_connection("user_fetcher", "result", "password_verifier", "input")
|
166
|
-
|
167
|
-
return workflow.build(name="user_login_improved")
|
168
|
-
|
169
|
-
|
170
|
-
# Alternative approach: Fix in the existing WorkflowBuilder
|
171
|
-
def patch_workflow_builder():
|
172
|
-
"""
|
173
|
-
Monkey patch the existing WorkflowBuilder to handle parameters better.
|
174
|
-
"""
|
175
|
-
original_build = WorkflowBuilder.build
|
176
|
-
|
177
|
-
def enhanced_build(self, workflow_id: str | None = None, **kwargs) -> Workflow:
|
178
|
-
# Build the workflow normally
|
179
|
-
workflow = original_build(self, workflow_id, **kwargs)
|
180
|
-
|
181
|
-
# Enhanced parameter handling
|
182
|
-
# Find nodes without incoming connections and inject common parameters
|
183
|
-
nodes_with_inputs = set()
|
184
|
-
for edge in workflow._graph.edges():
|
185
|
-
nodes_with_inputs.add(edge[1]) # target node
|
186
|
-
|
187
|
-
# Get all nodes
|
188
|
-
all_nodes = set(workflow._graph.nodes())
|
189
|
-
nodes_without_inputs = all_nodes - nodes_with_inputs
|
190
|
-
|
191
|
-
# Common parameters that should be injected
|
192
|
-
common_params = {
|
193
|
-
"tenant_id": "default",
|
194
|
-
"database_config": kwargs.get("database_config", {}),
|
195
|
-
}
|
196
|
-
|
197
|
-
for node_id in nodes_without_inputs:
|
198
|
-
if node_id in workflow._nodes:
|
199
|
-
node_instance = workflow._nodes[node_id]
|
200
|
-
# Update node config with common parameters if not already set
|
201
|
-
for param, value in common_params.items():
|
202
|
-
if param not in node_instance.config:
|
203
|
-
node_instance.config[param] = value
|
204
|
-
|
205
|
-
return workflow
|
206
|
-
|
207
|
-
WorkflowBuilder.build = enhanced_build
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|