kailash 0.4.2__tar.gz → 0.6.0__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.4.2/src/kailash.egg-info → kailash-0.6.0}/PKG-INFO +12 -7
- {kailash-0.4.2 → kailash-0.6.0}/README.md +9 -6
- {kailash-0.4.2 → kailash-0.6.0}/pyproject.toml +4 -2
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/__init__.py +1 -1
- kailash-0.6.0/src/kailash/client/__init__.py +12 -0
- kailash-0.6.0/src/kailash/client/enhanced_client.py +306 -0
- kailash-0.6.0/src/kailash/core/actors/__init__.py +16 -0
- kailash-0.6.0/src/kailash/core/actors/connection_actor.py +566 -0
- kailash-0.6.0/src/kailash/core/actors/supervisor.py +364 -0
- kailash-0.6.0/src/kailash/edge/__init__.py +16 -0
- kailash-0.6.0/src/kailash/edge/compliance.py +834 -0
- kailash-0.6.0/src/kailash/edge/discovery.py +659 -0
- kailash-0.6.0/src/kailash/edge/location.py +582 -0
- kailash-0.6.0/src/kailash/gateway/__init__.py +33 -0
- kailash-0.6.0/src/kailash/gateway/api.py +289 -0
- kailash-0.6.0/src/kailash/gateway/enhanced_gateway.py +357 -0
- kailash-0.6.0/src/kailash/gateway/resource_resolver.py +217 -0
- kailash-0.6.0/src/kailash/gateway/security.py +227 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/auth/models.py +2 -2
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/database/base_models.py +1 -7
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/database/repositories.py +3 -1
- kailash-0.6.0/src/kailash/middleware/gateway/__init__.py +22 -0
- kailash-0.6.0/src/kailash/middleware/gateway/checkpoint_manager.py +398 -0
- kailash-0.6.0/src/kailash/middleware/gateway/deduplicator.py +382 -0
- kailash-0.6.0/src/kailash/middleware/gateway/durable_gateway.py +417 -0
- kailash-0.6.0/src/kailash/middleware/gateway/durable_request.py +498 -0
- kailash-0.6.0/src/kailash/middleware/gateway/event_store.py +459 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/admin/audit_log.py +364 -6
- kailash-0.6.0/src/kailash/nodes/admin/permission_check.py +1648 -0
- kailash-0.6.0/src/kailash/nodes/admin/role_management.py +1957 -0
- kailash-0.6.0/src/kailash/nodes/admin/schema_manager.py +438 -0
- kailash-0.6.0/src/kailash/nodes/admin/user_management.py +1472 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/api/http.py +95 -71
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/base.py +281 -164
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/base_async.py +30 -31
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/code/__init__.py +8 -1
- kailash-0.6.0/src/kailash/nodes/code/async_python.py +1035 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/code/python.py +1 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/data/async_sql.py +12 -25
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/data/sql.py +20 -11
- kailash-0.6.0/src/kailash/nodes/data/workflow_connection_pool.py +643 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/__init__.py +1 -4
- kailash-0.6.0/src/kailash/resources/__init__.py +40 -0
- kailash-0.6.0/src/kailash/resources/factory.py +533 -0
- kailash-0.6.0/src/kailash/resources/health.py +319 -0
- kailash-0.6.0/src/kailash/resources/reference.py +288 -0
- kailash-0.6.0/src/kailash/resources/registry.py +392 -0
- kailash-0.6.0/src/kailash/runtime/async_local.py +797 -0
- kailash-0.6.0/src/kailash/testing/__init__.py +34 -0
- kailash-0.6.0/src/kailash/testing/async_test_case.py +353 -0
- kailash-0.6.0/src/kailash/testing/async_utils.py +345 -0
- kailash-0.6.0/src/kailash/testing/fixtures.py +458 -0
- kailash-0.6.0/src/kailash/testing/mock_registry.py +495 -0
- kailash-0.6.0/src/kailash/utils/resource_manager.py +420 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/__init__.py +8 -0
- kailash-0.6.0/src/kailash/workflow/async_builder.py +621 -0
- kailash-0.6.0/src/kailash/workflow/async_patterns.py +766 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/builder.py +93 -10
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/cyclic_runner.py +111 -41
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/graph.py +7 -2
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/resilience.py +11 -1
- {kailash-0.4.2 → kailash-0.6.0/src/kailash.egg-info}/PKG-INFO +12 -7
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash.egg-info/SOURCES.txt +36 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash.egg-info/requires.txt +2 -0
- kailash-0.4.2/src/kailash/nodes/admin/permission_check.py +0 -864
- kailash-0.4.2/src/kailash/nodes/admin/role_management.py +0 -823
- kailash-0.4.2/src/kailash/nodes/admin/user_management.py +0 -944
- kailash-0.4.2/src/kailash/runtime/async_local.py +0 -388
- {kailash-0.4.2 → kailash-0.6.0}/LICENSE +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/MANIFEST.in +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/setup.cfg +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/setup.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/__main__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/access_control/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/access_control/managers.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/access_control/rule_evaluators.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/access_control.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/access_control_abac.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/api/auth.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/api/custom_nodes.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/api/custom_nodes_secure.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/api/gateway.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/api/mcp_integration.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/api/studio.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/api/workflow_api.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/cli/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/cli/commands.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/config/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/config/database_config.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/database/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/database/execution_pipeline.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/manifest.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/mcp/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/mcp/ai_registry_server.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/mcp/client.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/mcp/client_new.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/mcp/server.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/mcp/server_enhanced.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/mcp/servers/ai_registry.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/mcp/utils/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/mcp/utils/cache.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/mcp/utils/config.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/mcp/utils/formatters.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/mcp/utils/metrics.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/auth/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/auth/access_control.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/auth/auth_manager.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/auth/exceptions.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/auth/jwt_auth.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/auth/utils.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/communication/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/communication/ai_chat.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/communication/api_gateway.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/communication/events.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/communication/realtime.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/core/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/core/agent_ui.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/core/schema.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/core/workflows.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/database/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/database/base.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/database/enums.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/database/migrations.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/database/models.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/database/session_manager.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/mcp/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/mcp/client_integration.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/middleware/mcp/enhanced_server.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/admin/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/admin/security_event.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/ai/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/ai/a2a.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/ai/agents.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/ai/ai_providers.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/ai/embedding_generator.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/ai/intelligent_agent_orchestrator.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/ai/iterative_llm_agent.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/ai/llm_agent.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/ai/models.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/ai/self_organizing.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/ai/vision_utils.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/alerts/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/alerts/base.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/alerts/discord.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/api/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/api/auth.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/api/graphql.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/api/monitoring.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/api/rate_limiting.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/api/rest.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/api/security.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/auth/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/auth/directory_integration.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/auth/enterprise_auth_provider.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/auth/mfa.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/auth/risk_assessment.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/auth/session_management.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/auth/sso.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/base_cycle_aware.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/base_with_acl.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/compliance/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/compliance/data_retention.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/compliance/gdpr.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/data/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/data/async_connection.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/data/async_vector.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/data/directory.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/data/event_generation.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/data/file_discovery.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/data/readers.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/data/retrieval.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/data/sharepoint_graph.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/data/sources.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/data/streaming.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/data/vector_db.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/data/writers.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/enterprise/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/enterprise/batch_processor.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/enterprise/data_lineage.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/logic/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/logic/async_operations.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/logic/convergence.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/logic/loop.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/logic/operations.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/logic/workflow.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/mixins/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/mixins/event_emitter.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/mixins/mcp.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/mixins/security.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/mixins.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/monitoring/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/monitoring/performance_benchmark.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/advanced.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/agentic.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/conversational.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/evaluation.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/federated.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/graph.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/multimodal.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/optimized.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/privacy.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/query_processing.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/realtime.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/registry.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/router.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/similarity.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/strategies.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/rag/workflows.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/security/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/security/abac_evaluator.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/security/audit_log.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/security/behavior_analysis.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/security/credential_manager.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/security/rotating_credentials.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/security/security_event.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/security/threat_detection.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/testing/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/testing/credential_testing.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/transform/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/transform/chunkers.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/transform/formatters.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/transform/processors.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/nodes/validation.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/runtime/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/runtime/access_controlled.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/runtime/docker.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/runtime/local.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/runtime/parallel.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/runtime/parallel_cyclic.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/runtime/runner.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/runtime/testing.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/sdk_exceptions.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/security.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/tracking/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/tracking/manager.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/tracking/metrics_collector.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/tracking/models.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/tracking/storage/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/tracking/storage/base.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/tracking/storage/database.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/tracking/storage/filesystem.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/utils/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/utils/export.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/utils/migrations/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/utils/migrations/generator.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/utils/migrations/models.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/utils/migrations/runner.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/utils/secure_logging.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/utils/templates.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/visualization/__init__.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/visualization/api.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/visualization/dashboard.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/visualization/performance.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/visualization/reports.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/convergence.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/cycle_analyzer.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/cycle_builder.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/cycle_config.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/cycle_debugger.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/cycle_exceptions.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/cycle_profiler.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/cycle_state.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/mermaid_visualizer.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/migration.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/mock_registry.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/runner.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/safety.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/state.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/templates.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/validation.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash/workflow/visualization.py +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash.egg-info/dependency_links.txt +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash.egg-info/entry_points.txt +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/src/kailash.egg-info/not-zip-safe +0 -0
- {kailash-0.4.2 → kailash-0.6.0}/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.0
|
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
|
@@ -61,6 +61,8 @@ Requires-Dist: asyncpg>=0.30.0
|
|
61
61
|
Requires-Dist: aiomysql>=0.2.0
|
62
62
|
Requires-Dist: twilio>=9.6.3
|
63
63
|
Requires-Dist: qrcode>=8.2
|
64
|
+
Requires-Dist: aiofiles>=24.1.0
|
65
|
+
Requires-Dist: bcrypt>=4.3.0
|
64
66
|
Provides-Extra: dev
|
65
67
|
Requires-Dist: pytest>=7.0; extra == "dev"
|
66
68
|
Requires-Dist: pytest-cov>=3.0; extra == "dev"
|
@@ -80,8 +82,9 @@ Dynamic: requires-python
|
|
80
82
|
<a href="https://pepy.tech/project/kailash"><img src="https://static.pepy.tech/badge/kailash" alt="Downloads"></a>
|
81
83
|
<img src="https://img.shields.io/badge/license-MIT-green.svg" alt="MIT License">
|
82
84
|
<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/
|
85
|
+
<img src="https://img.shields.io/badge/tests-production%20quality-brightgreen.svg" alt="Tests: Production Quality">
|
86
|
+
<img src="https://img.shields.io/badge/docker-integrated-blue.svg" alt="Docker: Integrated">
|
87
|
+
<img src="https://img.shields.io/badge/AI-ollama%20validated-purple.svg" alt="AI: Ollama Validated">
|
85
88
|
</p>
|
86
89
|
|
87
90
|
<p align="center">
|
@@ -120,12 +123,14 @@ Dynamic: requires-python
|
|
120
123
|
- 🏭 **Session 067 Enhancements**: Business workflow templates, data lineage tracking, automatic credential rotation
|
121
124
|
- 🔄 **Zero-Downtime Operations**: Automatic credential rotation with enterprise notifications and audit trails
|
122
125
|
- 🌉 **Enterprise Middleware (v0.4.0)**: Production-ready middleware architecture with real-time agent-frontend communication, dynamic workflows, and AI chat integration
|
126
|
+
- ⚡ **Performance Revolution (v0.5.0)**: 10-100x faster parameter resolution, clear async/sync separation, automatic resource management
|
127
|
+
- 🧪 **Production-Quality Testing (v0.5.0)**: Comprehensive testing infrastructure with Docker integration, AI workflows, and real-world business scenarios
|
123
128
|
|
124
129
|
## 🏗️ Project Architecture
|
125
130
|
|
126
131
|
The Kailash project is organized into three distinct layers:
|
127
132
|
|
128
|
-
### Core Architecture (v0.
|
133
|
+
### Core Architecture (v0.5.0)
|
129
134
|
```
|
130
135
|
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
|
131
136
|
│ Frontend │ │ Middleware │ │ Kailash Core │
|
@@ -150,9 +155,10 @@ kailash_python_sdk/
|
|
150
155
|
1. **SDK Layer** (`src/kailash/`) - The core framework providing:
|
151
156
|
- Nodes: Reusable computational units (100+ built-in)
|
152
157
|
- Workflows: DAG-based orchestration with cyclic support
|
153
|
-
- Runtime: Unified execution engine
|
154
|
-
- Middleware: Enterprise communication layer (
|
158
|
+
- Runtime: Unified execution engine with optimized async/sync separation (v0.5.0)
|
159
|
+
- Middleware: Enterprise communication layer (v0.4.0)
|
155
160
|
- Security: RBAC/ABAC access control with audit logging
|
161
|
+
- Performance: LRU parameter caching, automatic resource pooling (NEW in v0.5.0)
|
156
162
|
|
157
163
|
2. **Application Layer** (`apps/`) - Complete applications including:
|
158
164
|
- User Management System (Django++ capabilities)
|
@@ -175,7 +181,6 @@ pip install kailash[user-management]
|
|
175
181
|
# Everything
|
176
182
|
pip install kailash[all]
|
177
183
|
```
|
178
|
-
>>>>>>> origin/main
|
179
184
|
|
180
185
|
## 🎯 Who Is This For?
|
181
186
|
|
@@ -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">
|
@@ -46,12 +47,14 @@
|
|
46
47
|
- 🏭 **Session 067 Enhancements**: Business workflow templates, data lineage tracking, automatic credential rotation
|
47
48
|
- 🔄 **Zero-Downtime Operations**: Automatic credential rotation with enterprise notifications and audit trails
|
48
49
|
- 🌉 **Enterprise Middleware (v0.4.0)**: Production-ready middleware architecture with real-time agent-frontend communication, dynamic workflows, and AI chat integration
|
50
|
+
- ⚡ **Performance Revolution (v0.5.0)**: 10-100x faster parameter resolution, clear async/sync separation, automatic resource management
|
51
|
+
- 🧪 **Production-Quality Testing (v0.5.0)**: Comprehensive testing infrastructure with Docker integration, AI workflows, and real-world business scenarios
|
49
52
|
|
50
53
|
## 🏗️ Project Architecture
|
51
54
|
|
52
55
|
The Kailash project is organized into three distinct layers:
|
53
56
|
|
54
|
-
### Core Architecture (v0.
|
57
|
+
### Core Architecture (v0.5.0)
|
55
58
|
```
|
56
59
|
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
|
57
60
|
│ Frontend │ │ Middleware │ │ Kailash Core │
|
@@ -76,9 +79,10 @@ kailash_python_sdk/
|
|
76
79
|
1. **SDK Layer** (`src/kailash/`) - The core framework providing:
|
77
80
|
- Nodes: Reusable computational units (100+ built-in)
|
78
81
|
- Workflows: DAG-based orchestration with cyclic support
|
79
|
-
- Runtime: Unified execution engine
|
80
|
-
- Middleware: Enterprise communication layer (
|
82
|
+
- Runtime: Unified execution engine with optimized async/sync separation (v0.5.0)
|
83
|
+
- Middleware: Enterprise communication layer (v0.4.0)
|
81
84
|
- Security: RBAC/ABAC access control with audit logging
|
85
|
+
- Performance: LRU parameter caching, automatic resource pooling (NEW in v0.5.0)
|
82
86
|
|
83
87
|
2. **Application Layer** (`apps/`) - Complete applications including:
|
84
88
|
- User Management System (Django++ capabilities)
|
@@ -101,7 +105,6 @@ pip install kailash[user-management]
|
|
101
105
|
# Everything
|
102
106
|
pip install kailash[all]
|
103
107
|
```
|
104
|
-
>>>>>>> origin/main
|
105
108
|
|
106
109
|
## 🎯 Who Is This For?
|
107
110
|
|
@@ -4,13 +4,13 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "kailash"
|
7
|
-
version = "0.
|
7
|
+
version = "0.6.0"
|
8
8
|
description = "Python SDK for the Kailash container-node architecture"
|
9
9
|
authors = [
|
10
10
|
{name = "Integrum", email = "info@integrum.com"}
|
11
11
|
]
|
12
12
|
readme = "README.md"
|
13
|
-
requires-python = ">=3.
|
13
|
+
requires-python = ">=3.12"
|
14
14
|
classifiers = [
|
15
15
|
"Development Status :: 3 - Alpha",
|
16
16
|
"Intended Audience :: Developers",
|
@@ -65,6 +65,8 @@ dependencies = [
|
|
65
65
|
"aiomysql>=0.2.0",
|
66
66
|
"twilio>=9.6.3",
|
67
67
|
"qrcode>=8.2",
|
68
|
+
"aiofiles>=24.1.0",
|
69
|
+
"bcrypt>=4.3.0",
|
68
70
|
]
|
69
71
|
|
70
72
|
[project.optional-dependencies]
|
@@ -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
|
+
]
|