kailash 0.9.0__py3-none-any.whl → 0.9.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 CHANGED
@@ -3,9 +3,9 @@
3
3
  The Kailash SDK provides a comprehensive framework for creating nodes and workflows
4
4
  that align with container-node architecture while allowing rapid prototyping.
5
5
 
6
- New in v0.9.0: Complete migration from cycle=True to modern CycleBuilder API across
7
- all documentation and examples. Enhanced cyclic workflow patterns for enterprise use.
8
- Previous v0.8.7: MCP Parameter Validation Tool, 100% MCP Protocol compliance.
6
+ New in v0.9.1: DataFlow PostgreSQL parameter conversion verification and comprehensive testing infrastructure.
7
+ Complete validation of parameter conversion chain from DataFlow to AsyncSQLDatabaseNode to PostgreSQL.
8
+ Previous v0.9.0: Complete migration from cycle=True to modern CycleBuilder API.
9
9
  """
10
10
 
11
11
  from kailash.nodes.base import Node, NodeMetadata, NodeParameter
@@ -48,7 +48,7 @@ except ImportError:
48
48
  # For backward compatibility
49
49
  WorkflowGraph = Workflow
50
50
 
51
- __version__ = "0.9.0"
51
+ __version__ = "0.9.1"
52
52
 
53
53
  __all__ = [
54
54
  # Core workflow components
@@ -493,7 +493,10 @@ class PostgreSQLAdapter(DatabaseAdapter):
493
493
  and "RETURNING" not in query_upper
494
494
  and fetch_mode == FetchMode.ALL
495
495
  ):
496
- result = await conn.execute(query, *params)
496
+ if isinstance(params, dict):
497
+ result = await conn.execute(query, params)
498
+ else:
499
+ result = await conn.execute(query, *params)
497
500
  # asyncpg returns a string like "UPDATE 1", extract the count
498
501
  if isinstance(result, str):
499
502
  parts = result.split()
@@ -505,15 +508,24 @@ class PostgreSQLAdapter(DatabaseAdapter):
505
508
  return []
506
509
 
507
510
  if fetch_mode == FetchMode.ONE:
508
- row = await conn.fetchrow(query, *params)
511
+ if isinstance(params, dict):
512
+ row = await conn.fetchrow(query, params)
513
+ else:
514
+ row = await conn.fetchrow(query, *params)
509
515
  return self._convert_row(dict(row)) if row else None
510
516
  elif fetch_mode == FetchMode.ALL:
511
- rows = await conn.fetch(query, *params)
517
+ if isinstance(params, dict):
518
+ rows = await conn.fetch(query, params)
519
+ else:
520
+ rows = await conn.fetch(query, *params)
512
521
  return [self._convert_row(dict(row)) for row in rows]
513
522
  elif fetch_mode == FetchMode.MANY:
514
523
  if not fetch_size:
515
524
  raise ValueError("fetch_size required for MANY mode")
516
- rows = await conn.fetch(query, *params)
525
+ if isinstance(params, dict):
526
+ rows = await conn.fetch(query, params)
527
+ else:
528
+ rows = await conn.fetch(query, *params)
517
529
  return [self._convert_row(dict(row)) for row in rows[:fetch_size]]
518
530
  elif fetch_mode == FetchMode.ITERATOR:
519
531
  raise NotImplementedError("Iterator mode not yet implemented")
@@ -532,7 +544,10 @@ class PostgreSQLAdapter(DatabaseAdapter):
532
544
  and "RETURNING" not in query_upper
533
545
  and fetch_mode == FetchMode.ALL
534
546
  ):
535
- result = await conn.execute(query, *params)
547
+ if isinstance(params, dict):
548
+ result = await conn.execute(query, params)
549
+ else:
550
+ result = await conn.execute(query, *params)
536
551
  # asyncpg returns a string like "UPDATE 1", extract the count
537
552
  if isinstance(result, str):
538
553
  parts = result.split()
@@ -544,15 +559,24 @@ class PostgreSQLAdapter(DatabaseAdapter):
544
559
  return []
545
560
 
546
561
  if fetch_mode == FetchMode.ONE:
547
- row = await conn.fetchrow(query, *params)
562
+ if isinstance(params, dict):
563
+ row = await conn.fetchrow(query, params)
564
+ else:
565
+ row = await conn.fetchrow(query, *params)
548
566
  return self._convert_row(dict(row)) if row else None
549
567
  elif fetch_mode == FetchMode.ALL:
550
- rows = await conn.fetch(query, *params)
568
+ if isinstance(params, dict):
569
+ rows = await conn.fetch(query, params)
570
+ else:
571
+ rows = await conn.fetch(query, *params)
551
572
  return [self._convert_row(dict(row)) for row in rows]
552
573
  elif fetch_mode == FetchMode.MANY:
553
574
  if not fetch_size:
554
575
  raise ValueError("fetch_size required for MANY mode")
555
- rows = await conn.fetch(query, *params)
576
+ if isinstance(params, dict):
577
+ rows = await conn.fetch(query, params)
578
+ else:
579
+ rows = await conn.fetch(query, *params)
556
580
  return [self._convert_row(dict(row)) for row in rows[:fetch_size]]
557
581
  elif fetch_mode == FetchMode.ITERATOR:
558
582
  raise NotImplementedError("Iterator mode not yet implemented")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kailash
3
- Version: 0.9.0
3
+ Version: 0.9.1
4
4
  Summary: Python SDK for the Kailash container-node architecture
5
5
  Home-page: https://github.com/integrum/kailash-python-sdk
6
6
  Author: Integrum
@@ -1,4 +1,4 @@
1
- kailash/__init__.py,sha256=c9Upj65mN4RX9QCF8NliTUtNaZJJW8jiJqBvR4c6vmA,2537
1
+ kailash/__init__.py,sha256=idMOMtCtjj5VGvHOiFbLk1lz383ZHxbJN_bYrcmoWRU,2583
2
2
  kailash/__main__.py,sha256=vr7TVE5o16V6LsTmRFKG6RDKUXHpIWYdZ6Dok2HkHnI,198
3
3
  kailash/access_control.py,sha256=MjKtkoQ2sg1Mgfe7ovGxVwhAbpJKvaepPWr8dxOueMA,26058
4
4
  kailash/access_control_abac.py,sha256=FPfa_8PuDP3AxTjdWfiH3ntwWO8NodA0py9W8SE5dno,30263
@@ -201,7 +201,7 @@ kailash/nodes/compliance/data_retention.py,sha256=90bH_eGwlcDzUdklAJeXQM-RcuLUGQ
201
201
  kailash/nodes/compliance/gdpr.py,sha256=ZMoHZjAo4QtGwtFCzGMrAUBFV3TbZOnJ5DZGZS87Bas,70548
202
202
  kailash/nodes/data/__init__.py,sha256=f0h4ysvXxlyFcNJLvDyXrgJ0ixwDF1cS0pJ2QNPakhg,5213
203
203
  kailash/nodes/data/async_connection.py,sha256=wfArHs9svU48bxGZIiixSV2YVn9cukNgEjagwTRu6J4,17250
204
- kailash/nodes/data/async_sql.py,sha256=p1wpT-3vYF6P5puQR8_IfPfe8rIJaa0O7YWjfKwAMM0,104101
204
+ kailash/nodes/data/async_sql.py,sha256=yKwX4_gFc_Qi6sCF134XCgtERyIhAZKK7DomYSZG3bo,105201
205
205
  kailash/nodes/data/async_vector.py,sha256=HtwQLO25IXu8Vq80qzU8rMkUAKPQ2qM0x8YxjXHlygU,21005
206
206
  kailash/nodes/data/bulk_operations.py,sha256=WVopmosVkIlweFxVt3boLdCPc93EqpYyQ1Ez9mCIt0c,34453
207
207
  kailash/nodes/data/directory.py,sha256=fbfLqD_ijRubk-4xew3604QntPsyDxqaF4k6TpfyjDg,9923
@@ -395,9 +395,9 @@ kailash/workflow/templates.py,sha256=XQMAKZXC2dlxgMMQhSEOWAF3hIbe9JJt9j_THchhAm8
395
395
  kailash/workflow/type_inference.py,sha256=i1F7Yd_Z3elTXrthsLpqGbOnQBIVVVEjhRpI0HrIjd0,24492
396
396
  kailash/workflow/validation.py,sha256=r2zApGiiG8UEn7p5Ji842l8OR1_KftzDkWc7gg0cac0,44675
397
397
  kailash/workflow/visualization.py,sha256=nHBW-Ai8QBMZtn2Nf3EE1_aiMGi9S6Ui_BfpA5KbJPU,23187
398
- kailash-0.9.0.dist-info/licenses/LICENSE,sha256=Axe6g7bTrJkToK9h9j2SpRUKKNaDZDCo2lQ2zPxCE6s,1065
399
- kailash-0.9.0.dist-info/METADATA,sha256=h2b6X5_Qrk6f-iadmgTO-muDLzhiH2Huf1uCMBq1ANY,21733
400
- kailash-0.9.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
401
- kailash-0.9.0.dist-info/entry_points.txt,sha256=M_q3b8PG5W4XbhSgESzIJjh3_4OBKtZFYFsOdkr2vO4,45
402
- kailash-0.9.0.dist-info/top_level.txt,sha256=z7GzH2mxl66498pVf5HKwo5wwfPtt9Aq95uZUpH6JV0,8
403
- kailash-0.9.0.dist-info/RECORD,,
398
+ kailash-0.9.1.dist-info/licenses/LICENSE,sha256=Axe6g7bTrJkToK9h9j2SpRUKKNaDZDCo2lQ2zPxCE6s,1065
399
+ kailash-0.9.1.dist-info/METADATA,sha256=dHLC_VuvScP3WIWBPf5osJEE6OZEq-fxEV8KDNZE9G4,21733
400
+ kailash-0.9.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
401
+ kailash-0.9.1.dist-info/entry_points.txt,sha256=M_q3b8PG5W4XbhSgESzIJjh3_4OBKtZFYFsOdkr2vO4,45
402
+ kailash-0.9.1.dist-info/top_level.txt,sha256=z7GzH2mxl66498pVf5HKwo5wwfPtt9Aq95uZUpH6JV0,8
403
+ kailash-0.9.1.dist-info/RECORD,,