kailash 0.5.0__tar.gz → 0.6.1__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.
- {kailash-0.5.0/src/kailash.egg-info → kailash-0.6.1}/PKG-INFO +19 -4
- {kailash-0.5.0 → kailash-0.6.1}/README.md +15 -3
- {kailash-0.5.0 → kailash-0.6.1}/pyproject.toml +4 -1
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/__init__.py +1 -1
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/access_control/__init__.py +1 -1
- kailash-0.6.1/src/kailash/client/__init__.py +12 -0
- kailash-0.6.1/src/kailash/client/enhanced_client.py +306 -0
- kailash-0.6.1/src/kailash/core/actors/__init__.py +16 -0
- kailash-0.6.1/src/kailash/core/actors/adaptive_pool_controller.py +630 -0
- kailash-0.6.1/src/kailash/core/actors/connection_actor.py +566 -0
- kailash-0.6.1/src/kailash/core/actors/supervisor.py +364 -0
- kailash-0.6.1/src/kailash/core/ml/__init__.py +1 -0
- kailash-0.6.1/src/kailash/core/ml/query_patterns.py +544 -0
- kailash-0.6.1/src/kailash/core/monitoring/__init__.py +19 -0
- kailash-0.6.1/src/kailash/core/monitoring/connection_metrics.py +488 -0
- kailash-0.6.1/src/kailash/core/optimization/__init__.py +1 -0
- kailash-0.6.1/src/kailash/core/resilience/__init__.py +17 -0
- kailash-0.6.1/src/kailash/core/resilience/circuit_breaker.py +382 -0
- kailash-0.6.1/src/kailash/edge/__init__.py +16 -0
- kailash-0.6.1/src/kailash/edge/compliance.py +834 -0
- kailash-0.6.1/src/kailash/edge/discovery.py +659 -0
- kailash-0.6.1/src/kailash/edge/location.py +582 -0
- kailash-0.6.1/src/kailash/gateway/__init__.py +33 -0
- kailash-0.6.1/src/kailash/gateway/api.py +289 -0
- kailash-0.6.1/src/kailash/gateway/enhanced_gateway.py +357 -0
- kailash-0.6.1/src/kailash/gateway/resource_resolver.py +217 -0
- kailash-0.6.1/src/kailash/gateway/security.py +227 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/auth/access_control.py +6 -6
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/auth/models.py +2 -2
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/communication/ai_chat.py +7 -7
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/communication/api_gateway.py +5 -15
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/database/base_models.py +1 -7
- kailash-0.6.1/src/kailash/middleware/gateway/__init__.py +22 -0
- kailash-0.6.1/src/kailash/middleware/gateway/checkpoint_manager.py +398 -0
- kailash-0.6.1/src/kailash/middleware/gateway/deduplicator.py +382 -0
- kailash-0.6.1/src/kailash/middleware/gateway/durable_gateway.py +417 -0
- kailash-0.6.1/src/kailash/middleware/gateway/durable_request.py +498 -0
- kailash-0.6.1/src/kailash/middleware/gateway/event_store.py +499 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/mcp/enhanced_server.py +2 -2
- kailash-0.6.1/src/kailash/nodes/admin/permission_check.py +1648 -0
- kailash-0.6.1/src/kailash/nodes/admin/role_management.py +1957 -0
- kailash-0.6.1/src/kailash/nodes/admin/schema_manager.py +438 -0
- kailash-0.6.1/src/kailash/nodes/admin/user_management.py +1472 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/code/__init__.py +8 -1
- kailash-0.6.1/src/kailash/nodes/code/async_python.py +1035 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/code/python.py +1 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/data/async_sql.py +9 -3
- kailash-0.6.1/src/kailash/nodes/data/query_pipeline.py +641 -0
- kailash-0.6.1/src/kailash/nodes/data/query_router.py +895 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/data/sql.py +20 -11
- kailash-0.6.1/src/kailash/nodes/data/workflow_connection_pool.py +1071 -0
- kailash-0.6.1/src/kailash/nodes/monitoring/__init__.py +5 -0
- kailash-0.6.1/src/kailash/nodes/monitoring/connection_dashboard.py +822 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/__init__.py +2 -7
- kailash-0.6.1/src/kailash/resources/__init__.py +40 -0
- kailash-0.6.1/src/kailash/resources/factory.py +533 -0
- kailash-0.6.1/src/kailash/resources/health.py +319 -0
- kailash-0.6.1/src/kailash/resources/reference.py +288 -0
- kailash-0.6.1/src/kailash/resources/registry.py +392 -0
- kailash-0.6.1/src/kailash/runtime/async_local.py +797 -0
- kailash-0.6.1/src/kailash/testing/__init__.py +34 -0
- kailash-0.6.1/src/kailash/testing/async_test_case.py +353 -0
- kailash-0.6.1/src/kailash/testing/async_utils.py +345 -0
- kailash-0.6.1/src/kailash/testing/fixtures.py +458 -0
- kailash-0.6.1/src/kailash/testing/mock_registry.py +495 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/__init__.py +8 -0
- kailash-0.6.1/src/kailash/workflow/async_builder.py +621 -0
- kailash-0.6.1/src/kailash/workflow/async_patterns.py +766 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/cyclic_runner.py +107 -16
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/graph.py +7 -2
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/resilience.py +11 -1
- {kailash-0.5.0 → kailash-0.6.1/src/kailash.egg-info}/PKG-INFO +19 -4
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash.egg-info/SOURCES.txt +46 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash.egg-info/requires.txt +3 -0
- kailash-0.5.0/src/kailash/nodes/admin/permission_check.py +0 -864
- kailash-0.5.0/src/kailash/nodes/admin/role_management.py +0 -823
- kailash-0.5.0/src/kailash/nodes/admin/user_management.py +0 -1930
- kailash-0.5.0/src/kailash/nodes/monitoring/__init__.py +0 -7
- kailash-0.5.0/src/kailash/runtime/async_local.py +0 -388
- {kailash-0.5.0 → kailash-0.6.1}/LICENSE +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/MANIFEST.in +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/setup.cfg +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/setup.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/__main__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/access_control/managers.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/access_control/rule_evaluators.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/access_control.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/access_control_abac.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/api/auth.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/api/custom_nodes.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/api/custom_nodes_secure.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/api/gateway.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/api/mcp_integration.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/api/studio.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/api/workflow_api.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/cli/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/cli/commands.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/config/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/config/database_config.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/database/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/database/execution_pipeline.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/manifest.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/mcp/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/mcp/ai_registry_server.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/mcp/client.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/mcp/client_new.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/mcp/server.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/mcp/server_enhanced.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/mcp/servers/ai_registry.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/mcp/utils/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/mcp/utils/cache.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/mcp/utils/config.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/mcp/utils/formatters.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/mcp/utils/metrics.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/auth/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/auth/auth_manager.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/auth/exceptions.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/auth/jwt_auth.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/auth/utils.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/communication/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/communication/events.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/communication/realtime.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/core/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/core/agent_ui.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/core/schema.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/core/workflows.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/database/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/database/base.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/database/enums.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/database/migrations.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/database/models.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/database/repositories.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/database/session_manager.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/mcp/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/middleware/mcp/client_integration.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/admin/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/admin/audit_log.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/admin/security_event.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/ai/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/ai/a2a.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/ai/agents.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/ai/ai_providers.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/ai/embedding_generator.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/ai/intelligent_agent_orchestrator.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/ai/iterative_llm_agent.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/ai/llm_agent.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/ai/models.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/ai/self_organizing.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/ai/vision_utils.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/alerts/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/alerts/base.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/alerts/discord.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/api/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/api/auth.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/api/graphql.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/api/http.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/api/monitoring.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/api/rate_limiting.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/api/rest.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/api/security.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/auth/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/auth/directory_integration.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/auth/enterprise_auth_provider.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/auth/mfa.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/auth/risk_assessment.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/auth/session_management.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/auth/sso.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/base.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/base_async.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/base_cycle_aware.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/base_with_acl.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/compliance/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/compliance/data_retention.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/compliance/gdpr.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/data/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/data/async_connection.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/data/async_vector.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/data/directory.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/data/event_generation.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/data/file_discovery.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/data/readers.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/data/retrieval.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/data/sharepoint_graph.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/data/sources.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/data/streaming.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/data/vector_db.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/data/writers.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/enterprise/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/enterprise/batch_processor.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/enterprise/data_lineage.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/logic/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/logic/async_operations.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/logic/convergence.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/logic/loop.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/logic/operations.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/logic/workflow.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/mixins/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/mixins/event_emitter.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/mixins/mcp.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/mixins/security.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/mixins.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/monitoring/performance_benchmark.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/advanced.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/agentic.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/conversational.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/evaluation.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/federated.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/graph.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/multimodal.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/optimized.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/privacy.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/query_processing.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/realtime.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/registry.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/router.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/similarity.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/strategies.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/rag/workflows.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/security/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/security/abac_evaluator.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/security/audit_log.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/security/behavior_analysis.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/security/credential_manager.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/security/rotating_credentials.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/security/security_event.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/security/threat_detection.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/testing/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/testing/credential_testing.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/transform/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/transform/chunkers.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/transform/formatters.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/transform/processors.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/nodes/validation.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/runtime/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/runtime/access_controlled.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/runtime/docker.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/runtime/local.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/runtime/parallel.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/runtime/parallel_cyclic.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/runtime/runner.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/runtime/testing.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/sdk_exceptions.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/security.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/tracking/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/tracking/manager.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/tracking/metrics_collector.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/tracking/models.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/tracking/storage/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/tracking/storage/base.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/tracking/storage/database.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/tracking/storage/filesystem.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/utils/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/utils/export.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/utils/migrations/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/utils/migrations/generator.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/utils/migrations/models.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/utils/migrations/runner.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/utils/resource_manager.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/utils/secure_logging.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/utils/templates.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/visualization/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/visualization/api.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/visualization/dashboard.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/visualization/performance.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/visualization/reports.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/builder.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/convergence.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/cycle_analyzer.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/cycle_builder.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/cycle_config.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/cycle_debugger.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/cycle_exceptions.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/cycle_profiler.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/cycle_state.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/mermaid_visualizer.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/migration.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/mock_registry.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/runner.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/safety.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/state.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/templates.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/validation.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash/workflow/visualization.py +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash.egg-info/dependency_links.txt +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash.egg-info/entry_points.txt +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash.egg-info/not-zip-safe +0 -0
- {kailash-0.5.0 → kailash-0.6.1}/src/kailash.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: kailash
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.6.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
|
@@ -30,6 +30,7 @@ Requires-Dist: requests>=2.32.3
|
|
30
30
|
Requires-Dist: pytest-cov>=6.1.1
|
31
31
|
Requires-Dist: isort>=6.0.1
|
32
32
|
Requires-Dist: aiohttp>=3.12.4
|
33
|
+
Requires-Dist: aiohttp-cors>=0.7.0
|
33
34
|
Requires-Dist: ruff>=0.11.12
|
34
35
|
Requires-Dist: msal>=1.32.3
|
35
36
|
Requires-Dist: sphinx>=8.2.3
|
@@ -61,6 +62,8 @@ Requires-Dist: asyncpg>=0.30.0
|
|
61
62
|
Requires-Dist: aiomysql>=0.2.0
|
62
63
|
Requires-Dist: twilio>=9.6.3
|
63
64
|
Requires-Dist: qrcode>=8.2
|
65
|
+
Requires-Dist: aiofiles>=24.1.0
|
66
|
+
Requires-Dist: bcrypt>=4.3.0
|
64
67
|
Provides-Extra: dev
|
65
68
|
Requires-Dist: pytest>=7.0; extra == "dev"
|
66
69
|
Requires-Dist: pytest-cov>=3.0; extra == "dev"
|
@@ -80,8 +83,9 @@ Dynamic: requires-python
|
|
80
83
|
<a href="https://pepy.tech/project/kailash"><img src="https://static.pepy.tech/badge/kailash" alt="Downloads"></a>
|
81
84
|
<img src="https://img.shields.io/badge/license-MIT-green.svg" alt="MIT License">
|
82
85
|
<img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code style: black">
|
83
|
-
<img src="https://img.shields.io/badge/tests-
|
84
|
-
<img src="https://img.shields.io/badge/
|
86
|
+
<img src="https://img.shields.io/badge/tests-production%20quality-brightgreen.svg" alt="Tests: Production Quality">
|
87
|
+
<img src="https://img.shields.io/badge/docker-integrated-blue.svg" alt="Docker: Integrated">
|
88
|
+
<img src="https://img.shields.io/badge/AI-ollama%20validated-purple.svg" alt="AI: Ollama Validated">
|
85
89
|
</p>
|
86
90
|
|
87
91
|
<p align="center">
|
@@ -94,6 +98,17 @@ Dynamic: requires-python
|
|
94
98
|
|
95
99
|
---
|
96
100
|
|
101
|
+
## 🔥 Latest Release: v0.6.1 (January 26, 2025)
|
102
|
+
|
103
|
+
**Critical patch fixing middleware compatibility issues from v0.6.0**
|
104
|
+
|
105
|
+
- 🚨 **Fixed**: All middleware components now use `.execute()` method
|
106
|
+
- 🔧 **Fixed**: DataTransformer string transformation validation
|
107
|
+
- 🧹 **Fixed**: EventStore async task cleanup preventing crashes
|
108
|
+
- 🐳 **New**: Standardized Docker test environment (`./test-env`)
|
109
|
+
|
110
|
+
[Full Changelog](changelogs/releases/v0.6.1-2025-01-26.md) | [Migration Guide](sdk-users/migration-guides/v0.6.0-to-v0.6.1-migration.md)
|
111
|
+
|
97
112
|
## ✨ Highlights
|
98
113
|
|
99
114
|
- 🚀 **Rapid Prototyping**: Create and test workflows locally without containerization
|
@@ -121,6 +136,7 @@ Dynamic: requires-python
|
|
121
136
|
- 🔄 **Zero-Downtime Operations**: Automatic credential rotation with enterprise notifications and audit trails
|
122
137
|
- 🌉 **Enterprise Middleware (v0.4.0)**: Production-ready middleware architecture with real-time agent-frontend communication, dynamic workflows, and AI chat integration
|
123
138
|
- ⚡ **Performance Revolution (v0.5.0)**: 10-100x faster parameter resolution, clear async/sync separation, automatic resource management
|
139
|
+
- 🧪 **Production-Quality Testing (v0.5.0)**: Comprehensive testing infrastructure with Docker integration, AI workflows, and real-world business scenarios
|
124
140
|
|
125
141
|
## 🏗️ Project Architecture
|
126
142
|
|
@@ -177,7 +193,6 @@ pip install kailash[user-management]
|
|
177
193
|
# Everything
|
178
194
|
pip install kailash[all]
|
179
195
|
```
|
180
|
-
>>>>>>> origin/main
|
181
196
|
|
182
197
|
## 🎯 Who Is This For?
|
183
198
|
|
@@ -6,8 +6,9 @@
|
|
6
6
|
<a href="https://pepy.tech/project/kailash"><img src="https://static.pepy.tech/badge/kailash" alt="Downloads"></a>
|
7
7
|
<img src="https://img.shields.io/badge/license-MIT-green.svg" alt="MIT License">
|
8
8
|
<img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code style: black">
|
9
|
-
<img src="https://img.shields.io/badge/tests-
|
10
|
-
<img src="https://img.shields.io/badge/
|
9
|
+
<img src="https://img.shields.io/badge/tests-production%20quality-brightgreen.svg" alt="Tests: Production Quality">
|
10
|
+
<img src="https://img.shields.io/badge/docker-integrated-blue.svg" alt="Docker: Integrated">
|
11
|
+
<img src="https://img.shields.io/badge/AI-ollama%20validated-purple.svg" alt="AI: Ollama Validated">
|
11
12
|
</p>
|
12
13
|
|
13
14
|
<p align="center">
|
@@ -20,6 +21,17 @@
|
|
20
21
|
|
21
22
|
---
|
22
23
|
|
24
|
+
## 🔥 Latest Release: v0.6.1 (January 26, 2025)
|
25
|
+
|
26
|
+
**Critical patch fixing middleware compatibility issues from v0.6.0**
|
27
|
+
|
28
|
+
- 🚨 **Fixed**: All middleware components now use `.execute()` method
|
29
|
+
- 🔧 **Fixed**: DataTransformer string transformation validation
|
30
|
+
- 🧹 **Fixed**: EventStore async task cleanup preventing crashes
|
31
|
+
- 🐳 **New**: Standardized Docker test environment (`./test-env`)
|
32
|
+
|
33
|
+
[Full Changelog](changelogs/releases/v0.6.1-2025-01-26.md) | [Migration Guide](sdk-users/migration-guides/v0.6.0-to-v0.6.1-migration.md)
|
34
|
+
|
23
35
|
## ✨ Highlights
|
24
36
|
|
25
37
|
- 🚀 **Rapid Prototyping**: Create and test workflows locally without containerization
|
@@ -47,6 +59,7 @@
|
|
47
59
|
- 🔄 **Zero-Downtime Operations**: Automatic credential rotation with enterprise notifications and audit trails
|
48
60
|
- 🌉 **Enterprise Middleware (v0.4.0)**: Production-ready middleware architecture with real-time agent-frontend communication, dynamic workflows, and AI chat integration
|
49
61
|
- ⚡ **Performance Revolution (v0.5.0)**: 10-100x faster parameter resolution, clear async/sync separation, automatic resource management
|
62
|
+
- 🧪 **Production-Quality Testing (v0.5.0)**: Comprehensive testing infrastructure with Docker integration, AI workflows, and real-world business scenarios
|
50
63
|
|
51
64
|
## 🏗️ Project Architecture
|
52
65
|
|
@@ -103,7 +116,6 @@ pip install kailash[user-management]
|
|
103
116
|
# Everything
|
104
117
|
pip install kailash[all]
|
105
118
|
```
|
106
|
-
>>>>>>> origin/main
|
107
119
|
|
108
120
|
## 🎯 Who Is This For?
|
109
121
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "kailash"
|
7
|
-
version = "0.
|
7
|
+
version = "0.6.1"
|
8
8
|
description = "Python SDK for the Kailash container-node architecture"
|
9
9
|
authors = [
|
10
10
|
{name = "Integrum", email = "info@integrum.com"}
|
@@ -34,6 +34,7 @@ dependencies = [
|
|
34
34
|
"pytest-cov>=6.1.1",
|
35
35
|
"isort>=6.0.1",
|
36
36
|
"aiohttp>=3.12.4",
|
37
|
+
"aiohttp-cors>=0.7.0",
|
37
38
|
"ruff>=0.11.12",
|
38
39
|
"msal>=1.32.3",
|
39
40
|
"sphinx>=8.2.3",
|
@@ -65,6 +66,8 @@ dependencies = [
|
|
65
66
|
"aiomysql>=0.2.0",
|
66
67
|
"twilio>=9.6.3",
|
67
68
|
"qrcode>=8.2",
|
69
|
+
"aiofiles>=24.1.0",
|
70
|
+
"bcrypt>=4.3.0",
|
68
71
|
]
|
69
72
|
|
70
73
|
[project.optional-dependencies]
|
@@ -42,8 +42,8 @@ set_access_control_manager = _original_module.set_access_control_manager
|
|
42
42
|
|
43
43
|
# Import new composition-based components
|
44
44
|
from kailash.access_control.managers import AccessControlManager # noqa: E402
|
45
|
+
from kailash.access_control.rule_evaluators import ABACRuleEvaluator # noqa: E402
|
45
46
|
from kailash.access_control.rule_evaluators import ( # noqa: E402
|
46
|
-
ABACRuleEvaluator,
|
47
47
|
HybridRuleEvaluator,
|
48
48
|
RBACRuleEvaluator,
|
49
49
|
RuleEvaluator,
|
@@ -0,0 +1,12 @@
|
|
1
|
+
"""Enhanced client SDK for Kailash Gateway.
|
2
|
+
|
3
|
+
This module provides Python client for interacting with the Enhanced Gateway API.
|
4
|
+
"""
|
5
|
+
|
6
|
+
from .enhanced_client import KailashClient, SyncKailashClient, WorkflowResult
|
7
|
+
|
8
|
+
__all__ = [
|
9
|
+
"KailashClient",
|
10
|
+
"SyncKailashClient",
|
11
|
+
"WorkflowResult",
|
12
|
+
]
|
@@ -0,0 +1,306 @@
|
|
1
|
+
"""Enhanced client for interacting with Kailash gateway.
|
2
|
+
|
3
|
+
This module provides async and sync clients for the Enhanced Gateway API
|
4
|
+
with support for resource references and convenient helper methods.
|
5
|
+
"""
|
6
|
+
|
7
|
+
import asyncio
|
8
|
+
import json
|
9
|
+
import logging
|
10
|
+
from dataclasses import dataclass
|
11
|
+
from typing import Any, Dict, List, Optional, Union
|
12
|
+
|
13
|
+
import aiohttp
|
14
|
+
|
15
|
+
from ..gateway.resource_resolver import ResourceReference
|
16
|
+
|
17
|
+
logger = logging.getLogger(__name__)
|
18
|
+
|
19
|
+
|
20
|
+
@dataclass
|
21
|
+
class WorkflowResult:
|
22
|
+
"""Result from workflow execution."""
|
23
|
+
|
24
|
+
request_id: str
|
25
|
+
workflow_id: str
|
26
|
+
status: str
|
27
|
+
result: Optional[Any] = None
|
28
|
+
error: Optional[str] = None
|
29
|
+
execution_time: Optional[float] = None
|
30
|
+
|
31
|
+
@property
|
32
|
+
def is_success(self) -> bool:
|
33
|
+
return self.status == "completed"
|
34
|
+
|
35
|
+
@property
|
36
|
+
def is_failed(self) -> bool:
|
37
|
+
return self.status == "failed"
|
38
|
+
|
39
|
+
@property
|
40
|
+
def is_running(self) -> bool:
|
41
|
+
return self.status in ["pending", "running"]
|
42
|
+
|
43
|
+
|
44
|
+
class KailashClient:
|
45
|
+
"""Enhanced client for interacting with Kailash gateway."""
|
46
|
+
|
47
|
+
def __init__(self, base_url: str, api_key: Optional[str] = None, timeout: int = 30):
|
48
|
+
self.base_url = base_url.rstrip("/")
|
49
|
+
self.api_key = api_key
|
50
|
+
self.timeout = timeout
|
51
|
+
self._session: Optional[aiohttp.ClientSession] = None
|
52
|
+
|
53
|
+
async def __aenter__(self):
|
54
|
+
"""Async context manager entry."""
|
55
|
+
await self._ensure_session()
|
56
|
+
return self
|
57
|
+
|
58
|
+
async def __aexit__(self, exc_type, exc_val, exc_tb):
|
59
|
+
"""Async context manager exit."""
|
60
|
+
await self.close()
|
61
|
+
|
62
|
+
async def _ensure_session(self):
|
63
|
+
"""Ensure HTTP session exists."""
|
64
|
+
if not self._session:
|
65
|
+
headers = {}
|
66
|
+
if self.api_key:
|
67
|
+
headers["Authorization"] = f"Bearer {self.api_key}"
|
68
|
+
|
69
|
+
timeout = aiohttp.ClientTimeout(total=self.timeout)
|
70
|
+
self._session = aiohttp.ClientSession(headers=headers, timeout=timeout)
|
71
|
+
|
72
|
+
async def close(self):
|
73
|
+
"""Close HTTP session."""
|
74
|
+
if self._session:
|
75
|
+
await self._session.close()
|
76
|
+
self._session = None
|
77
|
+
|
78
|
+
async def execute_workflow(
|
79
|
+
self,
|
80
|
+
workflow_id: str,
|
81
|
+
inputs: Dict[str, Any],
|
82
|
+
resources: Optional[Dict[str, Any]] = None,
|
83
|
+
context: Optional[Dict[str, Any]] = None,
|
84
|
+
wait: bool = True,
|
85
|
+
poll_interval: float = 1.0,
|
86
|
+
max_wait: float = 300.0,
|
87
|
+
) -> WorkflowResult:
|
88
|
+
"""Execute workflow with resource support."""
|
89
|
+
await self._ensure_session()
|
90
|
+
|
91
|
+
# Prepare request
|
92
|
+
request_data = {
|
93
|
+
"inputs": inputs,
|
94
|
+
"resources": resources or {},
|
95
|
+
"context": context or {},
|
96
|
+
}
|
97
|
+
|
98
|
+
# Execute workflow
|
99
|
+
async with self._session.post(
|
100
|
+
f"{self.base_url}/api/v1/workflows/{workflow_id}/execute", json=request_data
|
101
|
+
) as response:
|
102
|
+
response.raise_for_status()
|
103
|
+
result_data = await response.json()
|
104
|
+
|
105
|
+
result = WorkflowResult(**result_data)
|
106
|
+
|
107
|
+
# Wait for completion if requested
|
108
|
+
if wait and result.is_running:
|
109
|
+
result = await self.wait_for_completion(
|
110
|
+
workflow_id,
|
111
|
+
result.request_id,
|
112
|
+
poll_interval=poll_interval,
|
113
|
+
max_wait=max_wait,
|
114
|
+
)
|
115
|
+
|
116
|
+
return result
|
117
|
+
|
118
|
+
async def wait_for_completion(
|
119
|
+
self,
|
120
|
+
workflow_id: str,
|
121
|
+
request_id: str,
|
122
|
+
poll_interval: float = 1.0,
|
123
|
+
max_wait: float = 300.0,
|
124
|
+
) -> WorkflowResult:
|
125
|
+
"""Wait for workflow completion."""
|
126
|
+
await self._ensure_session()
|
127
|
+
|
128
|
+
elapsed = 0.0
|
129
|
+
while elapsed < max_wait:
|
130
|
+
# Get status
|
131
|
+
result = await self.get_workflow_status(workflow_id, request_id)
|
132
|
+
|
133
|
+
if not result.is_running:
|
134
|
+
return result
|
135
|
+
|
136
|
+
# Wait before next poll
|
137
|
+
await asyncio.sleep(poll_interval)
|
138
|
+
elapsed += poll_interval
|
139
|
+
|
140
|
+
# Timeout
|
141
|
+
raise TimeoutError(f"Workflow did not complete within {max_wait} seconds")
|
142
|
+
|
143
|
+
async def get_workflow_status(
|
144
|
+
self, workflow_id: str, request_id: str
|
145
|
+
) -> WorkflowResult:
|
146
|
+
"""Get workflow execution status."""
|
147
|
+
await self._ensure_session()
|
148
|
+
|
149
|
+
async with self._session.get(
|
150
|
+
f"{self.base_url}/api/v1/workflows/{workflow_id}/status/{request_id}"
|
151
|
+
) as response:
|
152
|
+
response.raise_for_status()
|
153
|
+
result_data = await response.json()
|
154
|
+
|
155
|
+
return WorkflowResult(**result_data)
|
156
|
+
|
157
|
+
async def list_workflows(self) -> Dict[str, Any]:
|
158
|
+
"""List available workflows."""
|
159
|
+
await self._ensure_session()
|
160
|
+
|
161
|
+
async with self._session.get(f"{self.base_url}/api/v1/workflows") as response:
|
162
|
+
response.raise_for_status()
|
163
|
+
return await response.json()
|
164
|
+
|
165
|
+
async def get_workflow_details(self, workflow_id: str) -> Dict[str, Any]:
|
166
|
+
"""Get details of a specific workflow."""
|
167
|
+
await self._ensure_session()
|
168
|
+
|
169
|
+
async with self._session.get(
|
170
|
+
f"{self.base_url}/api/v1/workflows/{workflow_id}"
|
171
|
+
) as response:
|
172
|
+
response.raise_for_status()
|
173
|
+
return await response.json()
|
174
|
+
|
175
|
+
async def health_check(self) -> Dict[str, Any]:
|
176
|
+
"""Check gateway health."""
|
177
|
+
await self._ensure_session()
|
178
|
+
|
179
|
+
async with self._session.get(f"{self.base_url}/api/v1/health") as response:
|
180
|
+
response.raise_for_status()
|
181
|
+
return await response.json()
|
182
|
+
|
183
|
+
async def list_resources(self) -> List[str]:
|
184
|
+
"""List available resources."""
|
185
|
+
await self._ensure_session()
|
186
|
+
|
187
|
+
async with self._session.get(f"{self.base_url}/api/v1/resources") as response:
|
188
|
+
response.raise_for_status()
|
189
|
+
return await response.json()
|
190
|
+
|
191
|
+
# Resource reference helpers
|
192
|
+
def ref(self, resource_name: str) -> str:
|
193
|
+
"""Create reference to registered resource."""
|
194
|
+
return f"@{resource_name}"
|
195
|
+
|
196
|
+
def database(
|
197
|
+
self,
|
198
|
+
host: str,
|
199
|
+
database: str,
|
200
|
+
port: int = 5432,
|
201
|
+
credentials_ref: Optional[str] = None,
|
202
|
+
**kwargs,
|
203
|
+
) -> Dict[str, Any]:
|
204
|
+
"""Create database resource reference."""
|
205
|
+
config = {"host": host, "port": port, "database": database, **kwargs}
|
206
|
+
|
207
|
+
return {
|
208
|
+
"type": "database",
|
209
|
+
"config": config,
|
210
|
+
"credentials_ref": credentials_ref,
|
211
|
+
}
|
212
|
+
|
213
|
+
def http_client(
|
214
|
+
self,
|
215
|
+
base_url: Optional[str] = None,
|
216
|
+
headers: Optional[Dict[str, str]] = None,
|
217
|
+
credentials_ref: Optional[str] = None,
|
218
|
+
**kwargs,
|
219
|
+
) -> Dict[str, Any]:
|
220
|
+
"""Create HTTP client resource reference."""
|
221
|
+
config = {**kwargs}
|
222
|
+
if base_url:
|
223
|
+
config["base_url"] = base_url
|
224
|
+
if headers:
|
225
|
+
config["headers"] = headers
|
226
|
+
|
227
|
+
return {
|
228
|
+
"type": "http_client",
|
229
|
+
"config": config,
|
230
|
+
"credentials_ref": credentials_ref,
|
231
|
+
}
|
232
|
+
|
233
|
+
def cache(
|
234
|
+
self,
|
235
|
+
host: str = "localhost",
|
236
|
+
port: int = 6379,
|
237
|
+
credentials_ref: Optional[str] = None,
|
238
|
+
**kwargs,
|
239
|
+
) -> Dict[str, Any]:
|
240
|
+
"""Create cache resource reference."""
|
241
|
+
config = {"host": host, "port": port, **kwargs}
|
242
|
+
|
243
|
+
return {"type": "cache", "config": config, "credentials_ref": credentials_ref}
|
244
|
+
|
245
|
+
|
246
|
+
# Synchronous wrapper for convenience
|
247
|
+
class SyncKailashClient:
|
248
|
+
"""Synchronous wrapper for KailashClient."""
|
249
|
+
|
250
|
+
def __init__(self, base_url: str, api_key: Optional[str] = None):
|
251
|
+
self.async_client = KailashClient(base_url, api_key)
|
252
|
+
|
253
|
+
def execute_workflow(
|
254
|
+
self, workflow_id: str, inputs: Dict[str, Any], **kwargs
|
255
|
+
) -> WorkflowResult:
|
256
|
+
"""Execute workflow synchronously."""
|
257
|
+
loop = asyncio.new_event_loop()
|
258
|
+
asyncio.set_event_loop(loop)
|
259
|
+
try:
|
260
|
+
return loop.run_until_complete(
|
261
|
+
self.async_client.execute_workflow(workflow_id, inputs, **kwargs)
|
262
|
+
)
|
263
|
+
finally:
|
264
|
+
loop.close()
|
265
|
+
|
266
|
+
def list_workflows(self) -> Dict[str, Any]:
|
267
|
+
"""List workflows synchronously."""
|
268
|
+
loop = asyncio.new_event_loop()
|
269
|
+
asyncio.set_event_loop(loop)
|
270
|
+
try:
|
271
|
+
return loop.run_until_complete(self.async_client.list_workflows())
|
272
|
+
finally:
|
273
|
+
loop.close()
|
274
|
+
|
275
|
+
def get_workflow_details(self, workflow_id: str) -> Dict[str, Any]:
|
276
|
+
"""Get workflow details synchronously."""
|
277
|
+
loop = asyncio.new_event_loop()
|
278
|
+
asyncio.set_event_loop(loop)
|
279
|
+
try:
|
280
|
+
return loop.run_until_complete(
|
281
|
+
self.async_client.get_workflow_details(workflow_id)
|
282
|
+
)
|
283
|
+
finally:
|
284
|
+
loop.close()
|
285
|
+
|
286
|
+
def health_check(self) -> Dict[str, Any]:
|
287
|
+
"""Check health synchronously."""
|
288
|
+
loop = asyncio.new_event_loop()
|
289
|
+
asyncio.set_event_loop(loop)
|
290
|
+
try:
|
291
|
+
return loop.run_until_complete(self.async_client.health_check())
|
292
|
+
finally:
|
293
|
+
loop.close()
|
294
|
+
|
295
|
+
def list_resources(self) -> List[str]:
|
296
|
+
"""List resources synchronously."""
|
297
|
+
loop = asyncio.new_event_loop()
|
298
|
+
asyncio.set_event_loop(loop)
|
299
|
+
try:
|
300
|
+
return loop.run_until_complete(self.async_client.list_resources())
|
301
|
+
finally:
|
302
|
+
loop.close()
|
303
|
+
|
304
|
+
# Delegate resource helpers
|
305
|
+
def __getattr__(self, name):
|
306
|
+
return getattr(self.async_client, name)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
"""Actor-based components for Kailash SDK.
|
2
|
+
|
3
|
+
This module provides actor-based patterns for improved fault tolerance
|
4
|
+
and isolation in distributed systems.
|
5
|
+
"""
|
6
|
+
|
7
|
+
from .connection_actor import ActorConnection, ConnectionActor, ConnectionState
|
8
|
+
from .supervisor import ActorSupervisor, SupervisionStrategy
|
9
|
+
|
10
|
+
__all__ = [
|
11
|
+
"ActorConnection",
|
12
|
+
"ConnectionState",
|
13
|
+
"ConnectionActor",
|
14
|
+
"ActorSupervisor",
|
15
|
+
"SupervisionStrategy",
|
16
|
+
]
|