kailash 0.8.5__tar.gz → 0.8.6__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.8.5/src/kailash.egg-info → kailash-0.8.6}/PKG-INFO +19 -17
- {kailash-0.8.5 → kailash-0.8.6}/README.md +18 -16
- {kailash-0.8.5 → kailash-0.8.6}/pyproject.toml +3 -3
- {kailash-0.8.5 → kailash-0.8.6}/setup.py +4 -4
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/__init__.py +5 -5
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/channels/__init__.py +2 -1
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/channels/mcp_channel.py +23 -4
- kailash-0.8.6/src/kailash/cli/validate_imports.py +202 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/core/resilience/bulkhead.py +15 -5
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/core/resilience/circuit_breaker.py +4 -1
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/core/resilience/health_monitor.py +312 -84
- kailash-0.8.6/src/kailash/edge/migration/edge_migration_service.py +384 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/server.py +351 -8
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/transports.py +305 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/gateway/event_store.py +1 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/base.py +77 -1
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/code/python.py +44 -3
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/async_sql.py +42 -20
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/edge/edge_migration_node.py +16 -12
- kailash-0.8.6/src/kailash/nodes/governance.py +410 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/registry.py +1 -1
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/transaction/distributed_transaction_manager.py +48 -1
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/transaction/saga_state_storage.py +2 -1
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/validation.py +8 -8
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/local.py +30 -0
- kailash-0.8.6/src/kailash/runtime/validation/__init__.py +12 -0
- kailash-0.8.6/src/kailash/runtime/validation/import_validator.py +446 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/validation/suggestion_engine.py +5 -5
- kailash-0.8.6/src/kailash/utils/data_paths.py +74 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/builder.py +183 -4
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/mermaid_visualizer.py +3 -1
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/templates.py +6 -6
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/validation.py +134 -3
- {kailash-0.8.5 → kailash-0.8.6/src/kailash.egg-info}/PKG-INFO +19 -17
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash.egg-info/SOURCES.txt +5 -0
- kailash-0.8.5/src/kailash/runtime/validation/__init__.py +0 -20
- {kailash-0.8.5 → kailash-0.8.6}/LICENSE +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/MANIFEST.in +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/setup.cfg +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/__main__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/access_control/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/access_control/managers.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/access_control/rule_evaluators.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/access_control.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/access_control_abac.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/adapters/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/adapters/mcp_platform_adapter.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/api/auth.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/api/custom_nodes.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/api/custom_nodes_secure.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/api/gateway.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/api/mcp_integration.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/api/studio.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/api/workflow_api.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/channels/api_channel.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/channels/base.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/channels/cli_channel.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/channels/event_router.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/channels/session.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/cli/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/cli/commands.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/cli/validation_audit.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/client/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/client/enhanced_client.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/config/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/config/database_config.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/core/actors/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/core/actors/adaptive_pool_controller.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/core/actors/connection_actor.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/core/actors/supervisor.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/core/ml/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/core/ml/query_patterns.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/core/monitoring/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/core/monitoring/connection_metrics.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/core/optimization/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/core/resilience/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/database/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/database/execution_pipeline.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/compliance.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/consistency.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/coordination/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/coordination/global_ordering.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/coordination/leader_election.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/coordination/partition_detector.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/coordination/raft.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/discovery.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/location.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/migration/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/migration/edge_migrator.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/monitoring/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/monitoring/edge_monitor.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/prediction/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/prediction/predictive_warmer.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/resource/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/resource/cloud_integration.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/resource/cost_optimizer.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/resource/docker_integration.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/resource/kubernetes_integration.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/resource/platform_integration.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/resource/predictive_scaler.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/resource/resource_analyzer.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/edge/resource/resource_pools.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/gateway/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/gateway/api.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/gateway/enhanced_gateway.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/gateway/resource_resolver.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/gateway/security.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/integrations/dataflow_edge.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/manifest.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/advanced_features.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/ai_registry_server.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/auth.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/client.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/client_new.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/discovery.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/errors.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/oauth.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/protocol.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/registry_integration.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/servers/ai_registry.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/utils/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/utils/cache.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/utils/config.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/utils/formatters.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/mcp_server/utils/metrics.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/auth/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/auth/access_control.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/auth/auth_manager.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/auth/exceptions.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/auth/jwt_auth.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/auth/models.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/auth/utils.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/communication/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/communication/ai_chat.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/communication/api_gateway.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/communication/events.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/communication/realtime.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/core/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/core/agent_ui.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/core/schema.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/core/workflows.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/database/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/database/base.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/database/base_models.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/database/enums.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/database/migrations.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/database/models.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/database/repositories.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/database/session_manager.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/gateway/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/gateway/checkpoint_manager.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/gateway/deduplicator.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/gateway/durable_gateway.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/gateway/durable_request.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/gateway/storage_backends.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/mcp/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/mcp/client_integration.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/middleware/mcp/enhanced_server.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/monitoring/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/monitoring/alerts.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/monitoring/metrics.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/admin/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/admin/audit_log.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/admin/permission_check.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/admin/role_management.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/admin/schema.sql +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/admin/schema_manager.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/admin/security_event.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/admin/tenant_isolation.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/admin/transaction_utils.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/admin/user_management.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ai/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ai/a2a.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ai/a2a_backup.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ai/agents.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ai/ai_providers.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ai/embedding_generator.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ai/hybrid_search.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ai/intelligent_agent_orchestrator.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ai/iterative_llm_agent.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ai/llm_agent.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ai/models.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ai/self_organizing.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ai/semantic_memory.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ai/streaming_analytics.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ai/vision_utils.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/alerts/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/alerts/base.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/alerts/discord.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/api/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/api/auth.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/api/graphql.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/api/http.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/api/monitoring.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/api/rate_limiting.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/api/rest.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/api/security.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/auth/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/auth/directory_integration.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/auth/enterprise_auth_provider.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/auth/mfa.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/auth/risk_assessment.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/auth/session_management.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/auth/sso.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/base_async.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/base_cycle_aware.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/base_with_acl.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/cache/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/cache/cache.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/cache/cache_invalidation.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/cache/redis_pool_manager.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/code/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/code/async_python.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/compliance/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/compliance/data_retention.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/compliance/gdpr.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/async_connection.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/async_vector.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/bulk_operations.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/directory.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/event_generation.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/file_discovery.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/optimistic_locking.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/query_builder.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/query_cache.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/query_pipeline.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/query_router.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/readers.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/redis.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/retrieval.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/sharepoint_graph.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/sources.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/sql.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/streaming.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/vector_db.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/workflow_connection_pool.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/data/writers.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/edge/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/edge/base.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/edge/cloud_node.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/edge/coordination.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/edge/docker_node.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/edge/edge_data.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/edge/edge_monitoring_node.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/edge/edge_state.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/edge/edge_warming_node.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/edge/kubernetes_node.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/edge/platform_node.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/edge/resource_analyzer_node.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/edge/resource_optimizer_node.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/edge/resource_scaler_node.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/enterprise/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/enterprise/audit_logger.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/enterprise/batch_processor.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/enterprise/data_lineage.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/enterprise/mcp_executor.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/enterprise/service_discovery.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/enterprise/tenant_assignment.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/logic/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/logic/async_operations.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/logic/convergence.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/logic/loop.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/logic/operations.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/logic/workflow.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/mixins/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/mixins/event_emitter.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/mixins/mcp.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/mixins/security.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/mixins.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/monitoring/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/monitoring/connection_dashboard.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/monitoring/deadlock_detector.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/monitoring/health_check.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/monitoring/log_processor.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/monitoring/metrics_collector.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/monitoring/performance_anomaly.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/monitoring/performance_benchmark.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/monitoring/race_condition_detector.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/monitoring/transaction_metrics.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/monitoring/transaction_monitor.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/ports.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/advanced.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/agentic.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/conversational.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/evaluation.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/federated.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/graph.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/multimodal.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/optimized.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/privacy.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/query_processing.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/realtime.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/router.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/similarity.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/strategies.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/rag/workflows.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/security/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/security/abac_evaluator.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/security/audit_log.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/security/behavior_analysis.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/security/credential_manager.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/security/rotating_credentials.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/security/security_event.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/security/threat_detection.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/system/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/system/command_parser.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/testing/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/testing/credential_testing.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/transaction/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/transaction/saga_coordinator.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/transaction/saga_step.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/transaction/transaction_context.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/transaction/two_phase_commit.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/transform/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/transform/chunkers.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/transform/formatters.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/transform/processors.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/validation/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/validation/test_executor.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/nodes/validation/validation_nodes.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/resources/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/resources/factory.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/resources/health.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/resources/reference.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/resources/registry.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/access_controlled.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/async_local.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/docker.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/parallel.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/parallel_cyclic.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/parameter_injection.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/parameter_injector.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/runner.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/secret_provider.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/testing.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/validation/connection_context.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/validation/enhanced_error_formatter.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/validation/error_categorizer.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/validation/metrics.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/runtime/validation/performance.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/sdk_exceptions.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/security.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/servers/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/servers/durable_workflow_server.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/servers/enterprise_workflow_server.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/servers/gateway.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/servers/workflow_server.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/testing/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/testing/async_test_case.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/testing/async_utils.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/testing/fixtures.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/testing/mock_registry.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/tracking/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/tracking/manager.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/tracking/metrics_collector.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/tracking/models.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/tracking/storage/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/tracking/storage/base.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/tracking/storage/database.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/tracking/storage/filesystem.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/utils/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/utils/data_validation.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/utils/export.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/utils/migrations/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/utils/migrations/generator.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/utils/migrations/models.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/utils/migrations/runner.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/utils/resource_manager.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/utils/secure_logging.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/utils/templates.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/visualization/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/visualization/api.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/visualization/dashboard.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/visualization/performance.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/visualization/reports.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/__init__.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/async_builder.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/async_patterns.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/contracts.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/convergence.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/cycle_analyzer.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/cycle_builder.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/cycle_config.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/cycle_debugger.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/cycle_exceptions.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/cycle_profiler.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/cycle_state.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/cyclic_runner.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/edge_infrastructure.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/graph.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/input_handling.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/migration.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/mock_registry.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/resilience.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/runner.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/safety.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/state.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/type_inference.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash/workflow/visualization.py +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash.egg-info/dependency_links.txt +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash.egg-info/entry_points.txt +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash.egg-info/not-zip-safe +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/src/kailash.egg-info/requires.txt +0 -0
- {kailash-0.8.5 → kailash-0.8.6}/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.8.
|
3
|
+
Version: 0.8.6
|
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
|
@@ -116,18 +116,18 @@ Dynamic: requires-python
|
|
116
116
|
|
117
117
|
---
|
118
118
|
|
119
|
-
## 🔥 Latest Release: v0.8.
|
119
|
+
## 🔥 Latest Release: v0.8.5 (January 20, 2025)
|
120
120
|
|
121
|
-
**
|
121
|
+
**Architecture Cleanup & Enterprise Security**
|
122
122
|
|
123
|
-
-
|
124
|
-
-
|
125
|
-
-
|
126
|
-
-
|
127
|
-
-
|
128
|
-
- ✅ **
|
123
|
+
- 🏗️ **Architecture Clarity**: Removed confusing `src/kailash/nexus` module
|
124
|
+
- 🔒 **Connection Validation**: Enterprise-grade parameter validation with type safety
|
125
|
+
- 🌐 **Edge Computing**: 50+ new nodes for geo-distributed infrastructure
|
126
|
+
- 📊 **Advanced Monitoring**: AlertManager with proactive threshold monitoring
|
127
|
+
- 🚀 **Performance**: <1ms validation overhead with intelligent caching
|
128
|
+
- ✅ **Breaking Changes**: See [migration guide](sdk-users/6-reference/changelogs/releases/v0.8.5-2025-07-20.md)
|
129
129
|
|
130
|
-
[Full Changelog](
|
130
|
+
[Full Changelog](sdk-users/6-reference/changelogs/releases/v0.8.5-2025-07-20.md) | [PyPI Packages](https://pypi.org/project/kailash/0.8.5/)
|
131
131
|
|
132
132
|
## 🎯 What Makes Kailash Different
|
133
133
|
|
@@ -344,7 +344,7 @@ results, run_id = runtime.execute(workflow.build())
|
|
344
344
|
|
345
345
|
## 🚀 Applications Built with Kailash
|
346
346
|
|
347
|
-
### 1. DataFlow - Zero-Config Database Platform
|
347
|
+
### 1. DataFlow - Zero-Config Database Platform (v0.3.1)
|
348
348
|
```bash
|
349
349
|
pip install kailash-dataflow
|
350
350
|
```
|
@@ -352,8 +352,9 @@ pip install kailash-dataflow
|
|
352
352
|
- **Redis caching** with enterprise-grade invalidation
|
353
353
|
- **Automatic API generation** with OpenAPI documentation
|
354
354
|
- **4 production examples** with complete deployment guides
|
355
|
+
- **Latest**: v0.3.1 - Enhanced transaction support and schema management
|
355
356
|
|
356
|
-
### 2. Nexus - Multi-Channel Platform
|
357
|
+
### 2. Nexus - Multi-Channel Platform (v1.0.3)
|
357
358
|
```bash
|
358
359
|
pip install kailash-nexus
|
359
360
|
```
|
@@ -361,6 +362,7 @@ pip install kailash-nexus
|
|
361
362
|
- **Enterprise orchestration** with multi-tenancy
|
362
363
|
- **Session management** with cross-channel synchronization
|
363
364
|
- **105 tests** with comprehensive validation
|
365
|
+
- **Latest**: v1.0.3 - Production-ready release with enhanced stability
|
364
366
|
|
365
367
|
### 3. AI Registry - Advanced RAG Platform
|
366
368
|
```bash
|
@@ -421,8 +423,8 @@ pytest tests/e2e/ --timeout=10
|
|
421
423
|
|
422
424
|
### For Users
|
423
425
|
- **[SDK Users Guide](sdk-users/)**: Complete workflow development guide
|
424
|
-
- **[Node Selection Guide](sdk-users/nodes/node-selection-guide.md)**: Smart node selection with decision trees
|
425
|
-
- **[Enterprise Patterns](sdk-users/enterprise/)**: Production deployment patterns
|
426
|
+
- **[Node Selection Guide](sdk-users/2-core-concepts/nodes/node-selection-guide.md)**: Smart node selection with decision trees
|
427
|
+
- **[Enterprise Patterns](sdk-users/5-enterprise/)**: Production deployment patterns
|
426
428
|
- **[API Documentation](https://integrum.github.io/kailash-python-sdk)**: Complete API reference
|
427
429
|
|
428
430
|
### For Contributors
|
@@ -431,9 +433,9 @@ pytest tests/e2e/ --timeout=10
|
|
431
433
|
- **[Testing Guide](tests/README.md)**: 3-tier testing strategy
|
432
434
|
|
433
435
|
### Quick References
|
434
|
-
- **[Cheatsheet](sdk-users/cheatsheet/)**: 53 copy-paste patterns
|
435
|
-
- **[Common Mistakes](sdk-users/validation/common-mistakes.md)**: Error patterns and solutions
|
436
|
-
- **[Performance Guide](sdk-users/performance/)**: Optimization patterns
|
436
|
+
- **[Cheatsheet](sdk-users/2-core-concepts/cheatsheet/)**: 53 copy-paste patterns
|
437
|
+
- **[Common Mistakes](sdk-users/2-core-concepts/validation/common-mistakes.md)**: Error patterns and solutions
|
438
|
+
- **[Performance Guide](sdk-users/5-enterprise/performance/)**: Optimization patterns
|
437
439
|
|
438
440
|
## 🚢 Production Deployment
|
439
441
|
|
@@ -22,18 +22,18 @@
|
|
22
22
|
|
23
23
|
---
|
24
24
|
|
25
|
-
## 🔥 Latest Release: v0.8.
|
25
|
+
## 🔥 Latest Release: v0.8.5 (January 20, 2025)
|
26
26
|
|
27
|
-
**
|
27
|
+
**Architecture Cleanup & Enterprise Security**
|
28
28
|
|
29
|
-
-
|
30
|
-
-
|
31
|
-
-
|
32
|
-
-
|
33
|
-
-
|
34
|
-
- ✅ **
|
29
|
+
- 🏗️ **Architecture Clarity**: Removed confusing `src/kailash/nexus` module
|
30
|
+
- 🔒 **Connection Validation**: Enterprise-grade parameter validation with type safety
|
31
|
+
- 🌐 **Edge Computing**: 50+ new nodes for geo-distributed infrastructure
|
32
|
+
- 📊 **Advanced Monitoring**: AlertManager with proactive threshold monitoring
|
33
|
+
- 🚀 **Performance**: <1ms validation overhead with intelligent caching
|
34
|
+
- ✅ **Breaking Changes**: See [migration guide](sdk-users/6-reference/changelogs/releases/v0.8.5-2025-07-20.md)
|
35
35
|
|
36
|
-
[Full Changelog](
|
36
|
+
[Full Changelog](sdk-users/6-reference/changelogs/releases/v0.8.5-2025-07-20.md) | [PyPI Packages](https://pypi.org/project/kailash/0.8.5/)
|
37
37
|
|
38
38
|
## 🎯 What Makes Kailash Different
|
39
39
|
|
@@ -250,7 +250,7 @@ results, run_id = runtime.execute(workflow.build())
|
|
250
250
|
|
251
251
|
## 🚀 Applications Built with Kailash
|
252
252
|
|
253
|
-
### 1. DataFlow - Zero-Config Database Platform
|
253
|
+
### 1. DataFlow - Zero-Config Database Platform (v0.3.1)
|
254
254
|
```bash
|
255
255
|
pip install kailash-dataflow
|
256
256
|
```
|
@@ -258,8 +258,9 @@ pip install kailash-dataflow
|
|
258
258
|
- **Redis caching** with enterprise-grade invalidation
|
259
259
|
- **Automatic API generation** with OpenAPI documentation
|
260
260
|
- **4 production examples** with complete deployment guides
|
261
|
+
- **Latest**: v0.3.1 - Enhanced transaction support and schema management
|
261
262
|
|
262
|
-
### 2. Nexus - Multi-Channel Platform
|
263
|
+
### 2. Nexus - Multi-Channel Platform (v1.0.3)
|
263
264
|
```bash
|
264
265
|
pip install kailash-nexus
|
265
266
|
```
|
@@ -267,6 +268,7 @@ pip install kailash-nexus
|
|
267
268
|
- **Enterprise orchestration** with multi-tenancy
|
268
269
|
- **Session management** with cross-channel synchronization
|
269
270
|
- **105 tests** with comprehensive validation
|
271
|
+
- **Latest**: v1.0.3 - Production-ready release with enhanced stability
|
270
272
|
|
271
273
|
### 3. AI Registry - Advanced RAG Platform
|
272
274
|
```bash
|
@@ -327,8 +329,8 @@ pytest tests/e2e/ --timeout=10
|
|
327
329
|
|
328
330
|
### For Users
|
329
331
|
- **[SDK Users Guide](sdk-users/)**: Complete workflow development guide
|
330
|
-
- **[Node Selection Guide](sdk-users/nodes/node-selection-guide.md)**: Smart node selection with decision trees
|
331
|
-
- **[Enterprise Patterns](sdk-users/enterprise/)**: Production deployment patterns
|
332
|
+
- **[Node Selection Guide](sdk-users/2-core-concepts/nodes/node-selection-guide.md)**: Smart node selection with decision trees
|
333
|
+
- **[Enterprise Patterns](sdk-users/5-enterprise/)**: Production deployment patterns
|
332
334
|
- **[API Documentation](https://integrum.github.io/kailash-python-sdk)**: Complete API reference
|
333
335
|
|
334
336
|
### For Contributors
|
@@ -337,9 +339,9 @@ pytest tests/e2e/ --timeout=10
|
|
337
339
|
- **[Testing Guide](tests/README.md)**: 3-tier testing strategy
|
338
340
|
|
339
341
|
### Quick References
|
340
|
-
- **[Cheatsheet](sdk-users/cheatsheet/)**: 53 copy-paste patterns
|
341
|
-
- **[Common Mistakes](sdk-users/validation/common-mistakes.md)**: Error patterns and solutions
|
342
|
-
- **[Performance Guide](sdk-users/performance/)**: Optimization patterns
|
342
|
+
- **[Cheatsheet](sdk-users/2-core-concepts/cheatsheet/)**: 53 copy-paste patterns
|
343
|
+
- **[Common Mistakes](sdk-users/2-core-concepts/validation/common-mistakes.md)**: Error patterns and solutions
|
344
|
+
- **[Performance Guide](sdk-users/5-enterprise/performance/)**: Optimization patterns
|
343
345
|
|
344
346
|
## 🚢 Production Deployment
|
345
347
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "kailash"
|
7
|
-
version = "0.8.
|
7
|
+
version = "0.8.6"
|
8
8
|
description = "Python SDK for the Kailash container-node architecture"
|
9
9
|
authors = [
|
10
10
|
{name = "Integrum", email = "info@integrum.com"}
|
@@ -123,7 +123,7 @@ select = ["E", "F"]
|
|
123
123
|
ignore = ["E203", "E501", "E722", "F401", "F841"]
|
124
124
|
|
125
125
|
[tool.ruff.lint.per-file-ignores]
|
126
|
-
"sdk-users/workflows/by-industry/finance/scripts/*.py" = ["E402"]
|
126
|
+
"sdk-users/2-core-concepts/workflows/by-industry/finance/scripts/*.py" = ["E402"]
|
127
127
|
"examples/feature_examples/workflows/cyclic/*.py" = ["E722"]
|
128
128
|
"examples/feature_examples/workflows/parallel/*.py" = ["E722"]
|
129
129
|
"scripts/refactor-pythoncode-to-functions.py" = ["E722"]
|
@@ -136,7 +136,7 @@ ignore = ["E203", "E501", "E722", "F401", "F841"]
|
|
136
136
|
# Allow late imports in performance test files
|
137
137
|
"tests/unit/performance_benchmarks/*.py" = ["E402"]
|
138
138
|
# SDK user workflows may have late imports for demos
|
139
|
-
"sdk-users/workflows/**/*.py" = ["E402", "F821"]
|
139
|
+
"sdk-users/2-core-concepts/workflows/**/*.py" = ["E402", "F821"]
|
140
140
|
# Examples may have late imports and mocks
|
141
141
|
"examples/**/*.py" = ["E402", "F821"]
|
142
142
|
# Scripts may need to modify sys.path before imports
|
@@ -51,14 +51,14 @@ setup(
|
|
51
51
|
"pygraphviz>=1.9",
|
52
52
|
],
|
53
53
|
"dataflow": [
|
54
|
-
"kailash-dataflow>=0.1
|
54
|
+
"kailash-dataflow>=0.3.1",
|
55
55
|
],
|
56
56
|
"nexus": [
|
57
|
-
"kailash-nexus>=1.0.
|
57
|
+
"kailash-nexus>=1.0.3",
|
58
58
|
],
|
59
59
|
"all": [
|
60
|
-
"kailash-dataflow>=0.1
|
61
|
-
"kailash-nexus>=1.0.
|
60
|
+
"kailash-dataflow>=0.3.1",
|
61
|
+
"kailash-nexus>=1.0.3",
|
62
62
|
],
|
63
63
|
},
|
64
64
|
# Entry points for CLI
|
@@ -3,10 +3,10 @@
|
|
3
3
|
The Kailash SDK provides a comprehensive framework for creating nodes and workflows
|
4
4
|
that align with container-node architecture while allowing rapid prototyping.
|
5
5
|
|
6
|
-
New in v0.
|
7
|
-
|
8
|
-
|
9
|
-
Previous v0.
|
6
|
+
New in v0.8.6: Enhanced parameter validation system with 4 modes (off/warn/strict/debug),
|
7
|
+
ParameterDebugger for comprehensive flow tracing (10x faster debugging), production-ready
|
8
|
+
performance (<1ms overhead), and complete troubleshooting documentation.
|
9
|
+
Previous v0.8.5: Test infrastructure enhancement, application framework improvements.
|
10
10
|
"""
|
11
11
|
|
12
12
|
from kailash.nodes.base import Node, NodeMetadata, NodeParameter
|
@@ -49,7 +49,7 @@ except ImportError:
|
|
49
49
|
# For backward compatibility
|
50
50
|
WorkflowGraph = Workflow
|
51
51
|
|
52
|
-
__version__ = "0.8.
|
52
|
+
__version__ = "0.8.6"
|
53
53
|
|
54
54
|
__all__ = [
|
55
55
|
# Core workflow components
|
@@ -5,7 +5,7 @@ enabling unified management of API, CLI, and MCP interfaces through a common cha
|
|
5
5
|
"""
|
6
6
|
|
7
7
|
from .api_channel import APIChannel
|
8
|
-
from .base import Channel, ChannelConfig
|
8
|
+
from .base import Channel, ChannelConfig, ChannelType
|
9
9
|
from .cli_channel import CLIChannel
|
10
10
|
from .mcp_channel import MCPChannel
|
11
11
|
from .session import CrossChannelSession, SessionManager
|
@@ -13,6 +13,7 @@ from .session import CrossChannelSession, SessionManager
|
|
13
13
|
__all__ = [
|
14
14
|
"Channel",
|
15
15
|
"ChannelConfig",
|
16
|
+
"ChannelType",
|
16
17
|
"APIChannel",
|
17
18
|
"CLIChannel",
|
18
19
|
"MCPChannel",
|
@@ -84,6 +84,7 @@ class MCPChannel(Channel):
|
|
84
84
|
# MCP-specific state
|
85
85
|
self._clients: Dict[str, Dict[str, Any]] = {}
|
86
86
|
self._server_task: Optional[asyncio.Task] = None
|
87
|
+
self._mcp_server_task: Optional[asyncio.Task] = None
|
87
88
|
|
88
89
|
logger.info(f"Initialized MCP channel {self.name}")
|
89
90
|
|
@@ -202,8 +203,15 @@ class MCPChannel(Channel):
|
|
202
203
|
self.status = ChannelStatus.STARTING
|
203
204
|
self._setup_event_queue()
|
204
205
|
|
205
|
-
# Start MCP server
|
206
|
-
|
206
|
+
# Start MCP server (Core SDK uses run() method, not start())
|
207
|
+
# For async operation, we need to run it in a separate task
|
208
|
+
if hasattr(self.mcp_server, "run"):
|
209
|
+
# Core SDK MCPServer uses run() method
|
210
|
+
loop = asyncio.get_event_loop()
|
211
|
+
self._mcp_server_task = loop.run_in_executor(None, self.mcp_server.run)
|
212
|
+
else:
|
213
|
+
# Fallback to start() if available
|
214
|
+
await self.mcp_server.start()
|
207
215
|
|
208
216
|
# Start server task for handling connections
|
209
217
|
self._server_task = asyncio.create_task(self._server_loop())
|
@@ -261,9 +269,20 @@ class MCPChannel(Channel):
|
|
261
269
|
except asyncio.CancelledError:
|
262
270
|
pass
|
263
271
|
|
272
|
+
# Stop MCP server task if running
|
273
|
+
if hasattr(self, "_mcp_server_task") and self._mcp_server_task:
|
274
|
+
self._mcp_server_task.cancel()
|
275
|
+
try:
|
276
|
+
await self._mcp_server_task
|
277
|
+
except asyncio.CancelledError:
|
278
|
+
pass
|
279
|
+
|
264
280
|
# Stop MCP server
|
265
|
-
if self.mcp_server:
|
266
|
-
|
281
|
+
if self.mcp_server and hasattr(self.mcp_server, "stop"):
|
282
|
+
try:
|
283
|
+
await self.mcp_server.stop()
|
284
|
+
except Exception as e:
|
285
|
+
logger.warning(f"Error stopping MCP server: {e}")
|
267
286
|
|
268
287
|
await self._cleanup()
|
269
288
|
self.status = ChannelStatus.STOPPED
|
@@ -0,0 +1,202 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Command-line tool for validating import paths for production deployment.
|
4
|
+
|
5
|
+
Usage:
|
6
|
+
python -m kailash.cli.validate_imports [path] [options]
|
7
|
+
|
8
|
+
Examples:
|
9
|
+
# Validate current directory
|
10
|
+
python -m kailash.cli.validate_imports
|
11
|
+
|
12
|
+
# Validate specific directory
|
13
|
+
python -m kailash.cli.validate_imports src/myapp
|
14
|
+
|
15
|
+
# Fix imports (dry run)
|
16
|
+
python -m kailash.cli.validate_imports src/myapp --fix
|
17
|
+
|
18
|
+
# Fix imports (apply changes)
|
19
|
+
python -m kailash.cli.validate_imports src/myapp --fix --apply
|
20
|
+
"""
|
21
|
+
|
22
|
+
import argparse
|
23
|
+
import sys
|
24
|
+
from pathlib import Path
|
25
|
+
from typing import List
|
26
|
+
|
27
|
+
from kailash.runtime.validation import ImportIssue, ImportPathValidator
|
28
|
+
|
29
|
+
|
30
|
+
def main():
|
31
|
+
"""Main entry point for import validation CLI."""
|
32
|
+
parser = argparse.ArgumentParser(
|
33
|
+
description="Validate Python imports for production deployment compatibility",
|
34
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
35
|
+
epilog="""
|
36
|
+
Examples:
|
37
|
+
%(prog)s # Validate current directory
|
38
|
+
%(prog)s src/myapp # Validate specific directory
|
39
|
+
%(prog)s src/myapp --fix # Show import fixes (dry run)
|
40
|
+
%(prog)s --file module.py # Validate single file
|
41
|
+
|
42
|
+
For more info, see: sdk-users/7-gold-standards/absolute-imports-gold-standard.md
|
43
|
+
""",
|
44
|
+
)
|
45
|
+
|
46
|
+
parser.add_argument(
|
47
|
+
"path",
|
48
|
+
nargs="?",
|
49
|
+
default=".",
|
50
|
+
help="Path to validate (directory or file, default: current directory)",
|
51
|
+
)
|
52
|
+
|
53
|
+
parser.add_argument(
|
54
|
+
"--file",
|
55
|
+
"-f",
|
56
|
+
action="store_true",
|
57
|
+
help="Treat path as a single file instead of directory",
|
58
|
+
)
|
59
|
+
|
60
|
+
parser.add_argument(
|
61
|
+
"--fix", action="store_true", help="Show suggested fixes for import issues"
|
62
|
+
)
|
63
|
+
|
64
|
+
parser.add_argument(
|
65
|
+
"--apply",
|
66
|
+
action="store_true",
|
67
|
+
help="Apply fixes (use with --fix, CAUTION: modifies files!)",
|
68
|
+
)
|
69
|
+
|
70
|
+
parser.add_argument(
|
71
|
+
"--no-recursive", "-n", action="store_true", help="Do not scan subdirectories"
|
72
|
+
)
|
73
|
+
|
74
|
+
parser.add_argument(
|
75
|
+
"--include-tests", action="store_true", help="Include test files in validation"
|
76
|
+
)
|
77
|
+
|
78
|
+
parser.add_argument("--json", action="store_true", help="Output results as JSON")
|
79
|
+
|
80
|
+
parser.add_argument(
|
81
|
+
"--quiet",
|
82
|
+
"-q",
|
83
|
+
action="store_true",
|
84
|
+
help="Only show errors, no informational output",
|
85
|
+
)
|
86
|
+
|
87
|
+
parser.add_argument(
|
88
|
+
"--verbose", "-v", action="store_true", help="Show detailed output"
|
89
|
+
)
|
90
|
+
|
91
|
+
args = parser.parse_args()
|
92
|
+
|
93
|
+
# Create validator
|
94
|
+
validator = ImportPathValidator()
|
95
|
+
|
96
|
+
# Validate path
|
97
|
+
path = Path(args.path)
|
98
|
+
if not path.exists():
|
99
|
+
print(f"Error: Path '{path}' does not exist", file=sys.stderr)
|
100
|
+
sys.exit(1)
|
101
|
+
|
102
|
+
# Collect issues
|
103
|
+
issues: List[ImportIssue] = []
|
104
|
+
|
105
|
+
if args.file or path.is_file():
|
106
|
+
# Validate single file
|
107
|
+
if args.verbose:
|
108
|
+
print(f"Validating file: {path}")
|
109
|
+
issues = validator.validate_file(str(path))
|
110
|
+
else:
|
111
|
+
# Validate directory
|
112
|
+
if args.verbose:
|
113
|
+
print(f"Validating directory: {path}")
|
114
|
+
print(f"Recursive: {not args.no_recursive}")
|
115
|
+
print(f"Include tests: {args.include_tests}")
|
116
|
+
print()
|
117
|
+
|
118
|
+
# TODO: Add support for include_tests flag in validator
|
119
|
+
issues = validator.validate_directory(
|
120
|
+
str(path), recursive=not args.no_recursive
|
121
|
+
)
|
122
|
+
|
123
|
+
# Handle results
|
124
|
+
if args.json:
|
125
|
+
import json
|
126
|
+
|
127
|
+
# Convert issues to JSON-serializable format
|
128
|
+
issues_data = [
|
129
|
+
{
|
130
|
+
"file": issue.file_path,
|
131
|
+
"line": issue.line_number,
|
132
|
+
"import": issue.import_statement,
|
133
|
+
"type": issue.issue_type.value,
|
134
|
+
"severity": issue.severity,
|
135
|
+
"message": issue.message,
|
136
|
+
"suggestion": issue.suggestion,
|
137
|
+
}
|
138
|
+
for issue in issues
|
139
|
+
]
|
140
|
+
print(
|
141
|
+
json.dumps(
|
142
|
+
{
|
143
|
+
"issues": issues_data,
|
144
|
+
"total": len(issues),
|
145
|
+
"critical": len([i for i in issues if i.severity == "critical"]),
|
146
|
+
"warnings": len([i for i in issues if i.severity == "warning"]),
|
147
|
+
},
|
148
|
+
indent=2,
|
149
|
+
)
|
150
|
+
)
|
151
|
+
|
152
|
+
elif args.fix:
|
153
|
+
# Show fixes
|
154
|
+
if not issues:
|
155
|
+
if not args.quiet:
|
156
|
+
print("✅ No import issues found!")
|
157
|
+
sys.exit(0)
|
158
|
+
|
159
|
+
print(f"Found {len(issues)} import issues\n")
|
160
|
+
|
161
|
+
# Group by file
|
162
|
+
files_with_issues = {}
|
163
|
+
for issue in issues:
|
164
|
+
if issue.file_path not in files_with_issues:
|
165
|
+
files_with_issues[issue.file_path] = []
|
166
|
+
files_with_issues[issue.file_path].append(issue)
|
167
|
+
|
168
|
+
for file_path, file_issues in files_with_issues.items():
|
169
|
+
print(f"\n📄 {file_path}")
|
170
|
+
print("-" * 60)
|
171
|
+
|
172
|
+
if args.apply:
|
173
|
+
# Apply fixes
|
174
|
+
fixes = validator.fix_imports_in_file(file_path, dry_run=False)
|
175
|
+
for original, fixed in fixes:
|
176
|
+
print(f" ❌ {original}")
|
177
|
+
print(f" ✅ {fixed}")
|
178
|
+
print(f"\n Applied {len(fixes)} fixes to {file_path}")
|
179
|
+
else:
|
180
|
+
# Show proposed fixes
|
181
|
+
for issue in file_issues:
|
182
|
+
print(f" Line {issue.line_number}: {issue.import_statement}")
|
183
|
+
print(f" Issue: {issue.message}")
|
184
|
+
print(f" Fix: {issue.suggestion}")
|
185
|
+
print()
|
186
|
+
|
187
|
+
if not args.apply:
|
188
|
+
print("\n💡 To apply these fixes, run with --fix --apply")
|
189
|
+
print("⚠️ CAUTION: This will modify your files!")
|
190
|
+
|
191
|
+
else:
|
192
|
+
# Standard report
|
193
|
+
report = validator.generate_report(issues)
|
194
|
+
print(report)
|
195
|
+
|
196
|
+
# Exit code based on critical issues
|
197
|
+
critical_count = len([i for i in issues if i.severity == "critical"])
|
198
|
+
sys.exit(1 if critical_count > 0 else 0)
|
199
|
+
|
200
|
+
|
201
|
+
if __name__ == "__main__":
|
202
|
+
main()
|
@@ -204,11 +204,21 @@ class BulkheadPartition:
|
|
204
204
|
await self._record_failure(execution_time)
|
205
205
|
raise
|
206
206
|
finally:
|
207
|
-
# Clean up
|
208
|
-
|
209
|
-
|
210
|
-
self._active_operations
|
211
|
-
|
207
|
+
# Clean up - with proper exception handling for event loop issues
|
208
|
+
try:
|
209
|
+
async with self._lock:
|
210
|
+
if operation_id in self._active_operations:
|
211
|
+
self._active_operations.remove(operation_id)
|
212
|
+
self.metrics.active_operations = len(self._active_operations)
|
213
|
+
except (RuntimeError, asyncio.CancelledError):
|
214
|
+
# Handle event loop issues during cleanup - force cleanup without lock
|
215
|
+
try:
|
216
|
+
if operation_id in self._active_operations:
|
217
|
+
self._active_operations.remove(operation_id)
|
218
|
+
self.metrics.active_operations = len(self._active_operations)
|
219
|
+
except:
|
220
|
+
# Final fallback - ignore cleanup errors during shutdown
|
221
|
+
pass
|
212
222
|
|
213
223
|
async def _execute_isolated(
|
214
224
|
self, operation_id: str, func: Callable, args: tuple, kwargs: dict, timeout: int
|
@@ -467,7 +467,10 @@ class CircuitBreakerManager:
|
|
467
467
|
return self._breakers[name]
|
468
468
|
|
469
469
|
def create_circuit_breaker(
|
470
|
-
self,
|
470
|
+
self,
|
471
|
+
name: str,
|
472
|
+
config: Optional[CircuitBreakerConfig] = None,
|
473
|
+
pattern: Optional[str] = None,
|
471
474
|
) -> ConnectionCircuitBreaker:
|
472
475
|
"""Create a new circuit breaker with optional pattern-based configuration."""
|
473
476
|
if pattern and pattern in self._patterns:
|