kailash 0.5.0__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.5.0/src/kailash.egg-info → kailash-0.6.0}/PKG-INFO +7 -4
- {kailash-0.5.0 → kailash-0.6.0}/README.md +4 -3
- {kailash-0.5.0 → kailash-0.6.0}/pyproject.toml +3 -1
- {kailash-0.5.0 → 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.5.0 → kailash-0.6.0}/src/kailash/middleware/auth/models.py +2 -2
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/database/base_models.py +1 -7
- 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.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.5.0 → 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.5.0 → kailash-0.6.0}/src/kailash/nodes/code/python.py +1 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/data/async_sql.py +9 -3
- {kailash-0.5.0 → 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.5.0 → 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.5.0 → 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.5.0 → kailash-0.6.0}/src/kailash/workflow/cyclic_runner.py +107 -16
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/graph.py +7 -2
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/resilience.py +11 -1
- {kailash-0.5.0 → kailash-0.6.0/src/kailash.egg-info}/PKG-INFO +7 -4
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash.egg-info/SOURCES.txt +35 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash.egg-info/requires.txt +2 -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/runtime/async_local.py +0 -388
- {kailash-0.5.0 → kailash-0.6.0}/LICENSE +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/MANIFEST.in +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/setup.cfg +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/setup.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/__main__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/access_control/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/access_control/managers.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/access_control/rule_evaluators.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/access_control.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/access_control_abac.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/api/auth.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/api/custom_nodes.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/api/custom_nodes_secure.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/api/gateway.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/api/mcp_integration.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/api/studio.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/api/workflow_api.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/cli/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/cli/commands.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/config/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/config/database_config.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/database/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/database/execution_pipeline.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/manifest.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/mcp/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/mcp/ai_registry_server.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/mcp/client.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/mcp/client_new.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/mcp/server.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/mcp/server_enhanced.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/mcp/servers/ai_registry.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/mcp/utils/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/mcp/utils/cache.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/mcp/utils/config.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/mcp/utils/formatters.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/mcp/utils/metrics.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/auth/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/auth/access_control.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/auth/auth_manager.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/auth/exceptions.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/auth/jwt_auth.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/auth/utils.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/communication/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/communication/ai_chat.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/communication/api_gateway.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/communication/events.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/communication/realtime.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/core/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/core/agent_ui.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/core/schema.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/core/workflows.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/database/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/database/base.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/database/enums.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/database/migrations.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/database/models.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/database/repositories.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/database/session_manager.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/mcp/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/mcp/client_integration.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/middleware/mcp/enhanced_server.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/admin/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/admin/audit_log.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/admin/security_event.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/ai/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/ai/a2a.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/ai/agents.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/ai/ai_providers.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/ai/embedding_generator.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/ai/intelligent_agent_orchestrator.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/ai/iterative_llm_agent.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/ai/llm_agent.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/ai/models.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/ai/self_organizing.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/ai/vision_utils.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/alerts/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/alerts/base.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/alerts/discord.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/api/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/api/auth.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/api/graphql.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/api/http.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/api/monitoring.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/api/rate_limiting.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/api/rest.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/api/security.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/auth/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/auth/directory_integration.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/auth/enterprise_auth_provider.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/auth/mfa.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/auth/risk_assessment.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/auth/session_management.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/auth/sso.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/base.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/base_async.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/base_cycle_aware.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/base_with_acl.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/compliance/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/compliance/data_retention.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/compliance/gdpr.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/data/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/data/async_connection.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/data/async_vector.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/data/directory.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/data/event_generation.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/data/file_discovery.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/data/readers.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/data/retrieval.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/data/sharepoint_graph.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/data/sources.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/data/streaming.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/data/vector_db.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/data/writers.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/enterprise/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/enterprise/batch_processor.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/enterprise/data_lineage.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/logic/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/logic/async_operations.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/logic/convergence.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/logic/loop.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/logic/operations.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/logic/workflow.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/mixins/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/mixins/event_emitter.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/mixins/mcp.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/mixins/security.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/mixins.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/monitoring/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/monitoring/performance_benchmark.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/advanced.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/agentic.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/conversational.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/evaluation.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/federated.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/graph.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/multimodal.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/optimized.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/privacy.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/query_processing.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/realtime.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/registry.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/router.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/similarity.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/strategies.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/rag/workflows.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/security/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/security/abac_evaluator.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/security/audit_log.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/security/behavior_analysis.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/security/credential_manager.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/security/rotating_credentials.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/security/security_event.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/security/threat_detection.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/testing/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/testing/credential_testing.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/transform/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/transform/chunkers.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/transform/formatters.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/transform/processors.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/nodes/validation.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/runtime/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/runtime/access_controlled.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/runtime/docker.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/runtime/local.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/runtime/parallel.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/runtime/parallel_cyclic.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/runtime/runner.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/runtime/testing.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/sdk_exceptions.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/security.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/tracking/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/tracking/manager.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/tracking/metrics_collector.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/tracking/models.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/tracking/storage/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/tracking/storage/base.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/tracking/storage/database.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/tracking/storage/filesystem.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/utils/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/utils/export.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/utils/migrations/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/utils/migrations/generator.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/utils/migrations/models.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/utils/migrations/runner.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/utils/resource_manager.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/utils/secure_logging.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/utils/templates.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/visualization/__init__.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/visualization/api.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/visualization/dashboard.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/visualization/performance.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/visualization/reports.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/builder.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/convergence.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/cycle_analyzer.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/cycle_builder.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/cycle_config.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/cycle_debugger.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/cycle_exceptions.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/cycle_profiler.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/cycle_state.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/mermaid_visualizer.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/migration.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/mock_registry.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/runner.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/safety.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/state.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/templates.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/validation.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash/workflow/visualization.py +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash.egg-info/dependency_links.txt +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash.egg-info/entry_points.txt +0 -0
- {kailash-0.5.0 → kailash-0.6.0}/src/kailash.egg-info/not-zip-safe +0 -0
- {kailash-0.5.0 → 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">
|
@@ -121,6 +124,7 @@ Dynamic: requires-python
|
|
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
|
123
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
|
124
128
|
|
125
129
|
## 🏗️ Project Architecture
|
126
130
|
|
@@ -177,7 +181,6 @@ pip install kailash[user-management]
|
|
177
181
|
# Everything
|
178
182
|
pip install kailash[all]
|
179
183
|
```
|
180
|
-
>>>>>>> origin/main
|
181
184
|
|
182
185
|
## 🎯 Who Is This For?
|
183
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">
|
@@ -47,6 +48,7 @@
|
|
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
|
49
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
|
50
52
|
|
51
53
|
## 🏗️ Project Architecture
|
52
54
|
|
@@ -103,7 +105,6 @@ pip install kailash[user-management]
|
|
103
105
|
# Everything
|
104
106
|
pip install kailash[all]
|
105
107
|
```
|
106
|
-
>>>>>>> origin/main
|
107
108
|
|
108
109
|
## 🎯 Who Is This For?
|
109
110
|
|
@@ -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.0"
|
8
8
|
description = "Python SDK for the Kailash container-node architecture"
|
9
9
|
authors = [
|
10
10
|
{name = "Integrum", email = "info@integrum.com"}
|
@@ -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
|
+
]
|