voodoo-framework 2.7.1__tar.gz → 2.7.2__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.
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/PKG-INFO +1 -1
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/__init__.py +1 -1
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/data/__init__.py +19 -2
- voodoo_framework-2.7.2/src/voodoo/storage/scheduler/__init__.py +49 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo_framework.egg-info/PKG-INFO +1 -1
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_store_only_core_import.py +35 -0
- voodoo_framework-2.7.1/src/voodoo/storage/scheduler/__init__.py +0 -31
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/LICENSE +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/README.md +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/pyproject.toml +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/setup.cfg +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/adapters/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/adapters/capabilities.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/adapters/registry.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/adapters/tailwind.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/adapters/voodoo_css.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/agent.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/agents/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/agents/models.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/agents/registry.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ai/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ai/agent.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ai/agent_legacy.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ai/agent_runtime_truth.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ai/providers/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ai/providers/anthropic.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ai/providers/gemini.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ai/providers/mock.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ai/providers/ollama.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ai/providers/openai.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ai/tools/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ai/tools/registry.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/api.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/auth/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/auth/cookies.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/auth/guards.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/auth/jwt.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/auth/middleware.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/auth/passwords.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/auth/user.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/__main__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/agents.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/ai.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/approvals.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/auth.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/create.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/dev.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/doctor.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/executions.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/fabric.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/generate.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/inspect.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/new.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/objects.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/protocol.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/recover.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/routes.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/scaffolding.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/schedules.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/status.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/tasks.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/terminal.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/theme.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/version.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/cli/workers_cmd.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/components.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/config.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/core/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/core/app.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/core/errors.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/core/events.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/core/render.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/core/routing.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/core/sitemap.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/core/state.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/data/base.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/data/model.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/data/store_backend.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/data/store_facade.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/data/store_model.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/edge/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/edge/auth.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/edge/errors.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/edge/gateway.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/edge/http.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/edge/models.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/edge/mqtt.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/edge/protocol.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/edge/simulator.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/edge/store.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/edge/store_voodoo.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/edge/world.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/i18n.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/mcp/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/mcp/client.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/memory/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/memory/interfaces.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/memory/sqlite.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/mesh/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/mesh/auth.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/mesh/client.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/mesh/event_bus.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/mesh/remote.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/mesh/replay.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/primitives/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/primitives/capability.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/primitives/compute.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/primitives/constraint.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/primitives/effect.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/primitives/intent.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/primitives/resource.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/primitives/state.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/primitives/time.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/protocol/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/protocol/export.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/protocol/fabric.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/protocol/operational.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/protocol/schemas.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/py.typed +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/queue.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/routing/api.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/routing/pages.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/adaptive.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/capability.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/constraint.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/context.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/dashboard.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/engine.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/errors.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/execution.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/fabric.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/goal.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/goal_store.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/graph.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/human.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/identity.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/identity_store.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/membership.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/operations.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/persistence.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/planner.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/policy.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/scheduler.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/store.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/task.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/transaction.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/workflow.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/workflow_store.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/runtime/world_execution.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/schedule.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/security/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/security/cors.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/security/csrf.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/security/headers.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/security/passwords.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/security/rate_limit.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/security/redaction.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/security/secrets.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/seo.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/static/client.js +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/status.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/cache/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/cache/interfaces.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/cache/memory.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/cache/redis.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/database/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/database/interfaces.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/database/postgres.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/database/sqlite.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/events/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/events/interfaces.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/events/local.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/events/postgres.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/events/sqlite.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/events/store.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/execution/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/execution/migrations.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/execution/postgres.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/execution/sqlite.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/execution/store.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/manager.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/objects/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/objects/interfaces.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/objects/local.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/objects/s3.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/objects/store.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/queue/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/queue/interfaces.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/queue/memory.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/queue/postgres.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/queue/redis.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/queue/sqlite.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/queue/store.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/scheduler/sqlite.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/storage/scheduler/store.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/telemetry/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/telemetry/api.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/telemetry/middleware.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/telemetry/otlp.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/telemetry/store.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/theme.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/tools/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/tools/registry.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/component.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/events.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/interactive.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/layout.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/library.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/markdown.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/primitives.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/product.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/rendering.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/state.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/styles/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/styles/presets.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/styles/product.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/styles/system.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/styles/theme.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/styles/voodoo_system.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/ui/voodoo_system.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/workers/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/workers/queue.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/world/__init__.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/world/model.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/world/models.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/world/sqlite.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo/world/store.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo_framework.egg-info/SOURCES.txt +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo_framework.egg-info/dependency_links.txt +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo_framework.egg-info/entry_points.txt +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo_framework.egg-info/requires.txt +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/src/voodoo_framework.egg-info/top_level.txt +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_adaptive_agency_correctness.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_agency_runtime_truth.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_agent.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_agent_registry.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_agent_runtime.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_app.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_auth.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_capability_security.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_checkpoint_resume.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_chrome.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_cli.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_cli_fabric.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_cli_inspect.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_components.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_config.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_contract_api.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_create.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_create_store_smoke.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_data.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_design_system.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_design_system2.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_durable_goal_runtime.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_durable_hitl.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_durable_workflow_runtime.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_edge_device.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_edge_e2e.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_edge_gateway.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_edge_http.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_edge_protocol.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_edge_security.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_edge_voodoo_store.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_edge_world.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_events.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_execution_sqlite_store.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_goal_runtime.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_hitl_persistence_correctness.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_http_runtime.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_human.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_i18n.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_identity_execution.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_identity_foundation.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_integration.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_mcp.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_mcp_runtime.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_memory.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_mesh.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_mesh_event_bus.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_mesh_remote_auth.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_mesh_remote_authority.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_mesh_remote_execution.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_mesh_remote_outcomes.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_mesh_remote_replay.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_mesh_two_node_acceptance.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_model.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_node_membership.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_object_store.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_observability.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_operational_policy.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_operational_runtime_ui.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_persistence.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_planner_adaptive.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_primitives.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_product_components.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_protocol.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_protocol_fabric.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_protocol_operational.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_provider_switching.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_providers.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_public_api_3.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_queue.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_reactive.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_runtime.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_runtime_correctness.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_runtime_fabric.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_runtime_store_app_lifecycle.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_runtime_store_lifecycle.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_runtime_store_provider.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_runtime_transaction.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_scheduler.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_security.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_seo.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_sprint27_convergence.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_sprint28_acceptance.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_state.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_store_first_user_journey.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_store_model_backend.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_theme.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_theme_presets.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_tools.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_ui.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_ui_magic.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_ui_magic_acceptance.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_voodoo_store_events.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_voodoo_store_execution.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_voodoo_store_hitl_restart.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_voodoo_store_queue.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_voodoo_store_scheduler.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_voodoo_system_components.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_websocket.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_worker_retry_semantics.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_workers.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_world_aware_execution.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_world_model.py +0 -0
- {voodoo_framework-2.7.1 → voodoo_framework-2.7.2}/tests/test_world_sqlite.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: voodoo-framework
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.2
|
|
4
4
|
Summary: The programmable runtime for adaptive applications and operational systems — web, APIs, agents, workers, human workflows, distributed systems, and physical systems in one runtime.
|
|
5
5
|
Author-email: Helder Perez <contact@helderperez.com>
|
|
6
6
|
Maintainer-email: Helder Perez <contact@helderperez.com>
|
|
@@ -37,6 +37,8 @@ __all__ = [
|
|
|
37
37
|
"_triggers",
|
|
38
38
|
]
|
|
39
39
|
|
|
40
|
+
_sql_initialized = False
|
|
41
|
+
|
|
40
42
|
|
|
41
43
|
async def init_db(*args: Any, **kwargs: Any) -> Any:
|
|
42
44
|
"""Compatibility entry point for the optional SQL subsystem.
|
|
@@ -44,9 +46,13 @@ async def init_db(*args: Any, **kwargs: Any) -> Any:
|
|
|
44
46
|
Importing ``voodoo`` does not load SQL or require ``aiosqlite``. Calling
|
|
45
47
|
this function explicitly opts into the legacy SQL adapter surface.
|
|
46
48
|
"""
|
|
49
|
+
global _sql_initialized
|
|
50
|
+
|
|
47
51
|
from voodoo.data.base import init_db as _init_db
|
|
48
52
|
|
|
49
|
-
|
|
53
|
+
result = await _init_db(*args, **kwargs)
|
|
54
|
+
_sql_initialized = True
|
|
55
|
+
return result
|
|
50
56
|
|
|
51
57
|
|
|
52
58
|
async def get_db() -> Any:
|
|
@@ -57,7 +63,18 @@ async def get_db() -> Any:
|
|
|
57
63
|
|
|
58
64
|
|
|
59
65
|
async def close_db() -> None:
|
|
60
|
-
"""Close
|
|
66
|
+
"""Close SQL only when the optional subsystem was explicitly initialized.
|
|
67
|
+
|
|
68
|
+
The Store-first Runtime calls this compatibility hook during shutdown. A
|
|
69
|
+
default application must therefore treat it as a no-op instead of importing
|
|
70
|
+
the legacy SQLite adapter merely to discover that no SQL connection exists.
|
|
71
|
+
"""
|
|
72
|
+
global _sql_initialized
|
|
73
|
+
|
|
74
|
+
if not _sql_initialized:
|
|
75
|
+
return
|
|
76
|
+
|
|
61
77
|
from voodoo.data.base import close_db as _close_db
|
|
62
78
|
|
|
63
79
|
await _close_db()
|
|
80
|
+
_sql_initialized = False
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"""Durable scheduler storage.
|
|
2
|
+
|
|
3
|
+
Voodoo Store is the canonical local-first scheduler provider. SQLite remains
|
|
4
|
+
available only as an explicit compatibility adapter and is imported lazily.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from importlib import import_module
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
from voodoo.storage.scheduler.store import VoodooStoreScheduleStore
|
|
14
|
+
|
|
15
|
+
__all__ = [
|
|
16
|
+
"SQLiteScheduleStore",
|
|
17
|
+
"VoodooStoreScheduleStore",
|
|
18
|
+
"create_schedule_store",
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
_LAZY_EXPORTS = {
|
|
22
|
+
"SQLiteScheduleStore": (
|
|
23
|
+
"voodoo.storage.scheduler.sqlite",
|
|
24
|
+
"SQLiteScheduleStore",
|
|
25
|
+
),
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def __getattr__(name: str) -> Any:
|
|
30
|
+
target = _LAZY_EXPORTS.get(name)
|
|
31
|
+
if target is None:
|
|
32
|
+
raise AttributeError(
|
|
33
|
+
f"module 'voodoo.storage.scheduler' has no attribute {name!r}"
|
|
34
|
+
)
|
|
35
|
+
module_name, symbol = target
|
|
36
|
+
value = getattr(import_module(module_name), symbol)
|
|
37
|
+
globals()[name] = value
|
|
38
|
+
return value
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def create_schedule_store(_legacy_path: str | Path | None = None):
|
|
42
|
+
"""Resolve the canonical Store-backed scheduler.
|
|
43
|
+
|
|
44
|
+
``_legacy_path`` is accepted temporarily so the current App lifecycle can
|
|
45
|
+
retain its call shape. It is deliberately ignored: missing Store
|
|
46
|
+
temporal-work capabilities are an actionable error and never trigger a
|
|
47
|
+
SQLite fallback.
|
|
48
|
+
"""
|
|
49
|
+
return VoodooStoreScheduleStore()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: voodoo-framework
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.2
|
|
4
4
|
Summary: The programmable runtime for adaptive applications and operational systems — web, APIs, agents, workers, human workflows, distributed systems, and physical systems in one runtime.
|
|
5
5
|
Author-email: Helder Perez <contact@helderperez.com>
|
|
6
6
|
Maintainer-email: Helder Perez <contact@helderperez.com>
|
|
@@ -26,6 +26,7 @@ assert "voodoo.storage.database.sqlite" not in sys.modules
|
|
|
26
26
|
assert "voodoo.storage.events.sqlite" not in sys.modules
|
|
27
27
|
assert "voodoo.storage.queue.sqlite" not in sys.modules
|
|
28
28
|
assert "voodoo.storage.execution.sqlite" not in sys.modules
|
|
29
|
+
assert "voodoo.storage.scheduler.sqlite" not in sys.modules
|
|
29
30
|
"""
|
|
30
31
|
result = subprocess.run(
|
|
31
32
|
[sys.executable, "-c", code],
|
|
@@ -36,6 +37,40 @@ assert "voodoo.storage.execution.sqlite" not in sys.modules
|
|
|
36
37
|
assert result.returncode == 0, result.stderr
|
|
37
38
|
|
|
38
39
|
|
|
40
|
+
def test_runtime_startup_does_not_require_aiosqlite(tmp_path) -> None:
|
|
41
|
+
code = r"""
|
|
42
|
+
import importlib.abc
|
|
43
|
+
import sys
|
|
44
|
+
|
|
45
|
+
class BlockAioSQLite(importlib.abc.MetaPathFinder):
|
|
46
|
+
def find_spec(self, fullname, path=None, target=None):
|
|
47
|
+
if fullname == "aiosqlite" or fullname.startswith("aiosqlite."):
|
|
48
|
+
raise ImportError("aiosqlite intentionally blocked by startup release gate")
|
|
49
|
+
return None
|
|
50
|
+
|
|
51
|
+
sys.meta_path.insert(0, BlockAioSQLite())
|
|
52
|
+
|
|
53
|
+
from starlette.testclient import TestClient
|
|
54
|
+
from voodoo.core import create_app
|
|
55
|
+
|
|
56
|
+
with TestClient(create_app()) as client:
|
|
57
|
+
assert client is not None
|
|
58
|
+
|
|
59
|
+
assert "aiosqlite" not in sys.modules
|
|
60
|
+
assert "voodoo.data.base" not in sys.modules
|
|
61
|
+
assert "voodoo.storage.database.sqlite" not in sys.modules
|
|
62
|
+
assert "voodoo.storage.scheduler.sqlite" not in sys.modules
|
|
63
|
+
"""
|
|
64
|
+
result = subprocess.run(
|
|
65
|
+
[sys.executable, "-c", code],
|
|
66
|
+
cwd=tmp_path,
|
|
67
|
+
text=True,
|
|
68
|
+
capture_output=True,
|
|
69
|
+
check=False,
|
|
70
|
+
)
|
|
71
|
+
assert result.returncode == 0, result.stderr
|
|
72
|
+
|
|
73
|
+
|
|
39
74
|
def test_public_model_module_has_no_sql_fallback_import() -> None:
|
|
40
75
|
code = r"""
|
|
41
76
|
import sys
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"""Durable scheduler storage.
|
|
2
|
-
|
|
3
|
-
Voodoo Store is the canonical local-first scheduler provider. SQLite remains
|
|
4
|
-
available only as an explicit compatibility adapter; the Runtime never falls
|
|
5
|
-
back to it when Store capabilities are missing.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from __future__ import annotations
|
|
9
|
-
|
|
10
|
-
from pathlib import Path
|
|
11
|
-
|
|
12
|
-
from voodoo.storage.scheduler.sqlite import SQLiteScheduleStore
|
|
13
|
-
from voodoo.storage.scheduler.store import VoodooStoreScheduleStore
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def create_schedule_store(_legacy_path: str | Path | None = None):
|
|
17
|
-
"""Resolve the canonical Store-backed scheduler.
|
|
18
|
-
|
|
19
|
-
``_legacy_path`` is accepted temporarily so the current App lifecycle can
|
|
20
|
-
retain its call shape while Sprint 28 removes legacy path plumbing. It is
|
|
21
|
-
deliberately ignored: missing Store temporal-work capabilities are an
|
|
22
|
-
actionable error and never trigger a SQLite fallback.
|
|
23
|
-
"""
|
|
24
|
-
return VoodooStoreScheduleStore()
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
__all__ = [
|
|
28
|
-
"SQLiteScheduleStore",
|
|
29
|
-
"VoodooStoreScheduleStore",
|
|
30
|
-
"create_schedule_store",
|
|
31
|
-
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|