py-data-engine 0.3.12__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {py_data_engine-0.3.12/src/py_data_engine.egg-info → py_data_engine-0.4.0}/PKG-INFO +30 -40
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/README.md +1 -8
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/pyproject.toml +34 -38
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/application/actions.py +0 -4
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/application/runtime.py +13 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/core/flow.py +1 -1
- py_data_engine-0.4.0/src/data_engine/daemon_bootstrap.py +275 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/authoring/flow.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/core/flow.html +2 -2
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/core/model.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/core/primitives.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/helpers/duckdb/_dimensions.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/helpers/duckdb/_maintenance.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/helpers/duckdb/_read.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/helpers/duckdb/_replace.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/helpers/excel.html +43 -8
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/helpers/polars.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/helpers/schema.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/hosts/scheduler.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/runtime/engine.html +2 -2
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/runtime/execution/grouped.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/runtime/execution/single.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/runtime/file_watch.html +17 -16
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/runtime/result_cleanup.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/runtime/stop.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/services/daemon.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/services/daemon_state.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/services/flow_catalog.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/services/flow_execution.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/services/ledger.html +8 -16
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/services/logs.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/services/runtime_binding.html +41 -5
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/services/runtime_execution.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/services/runtime_history.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/services/settings.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/services/shared_state.html +49 -10
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/services/theme.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/services/workspace_provisioning.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/data_engine/services/workspaces.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_modules/index.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/guides/app-runtime-and-workspaces.md.txt +53 -23
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/guides/getting-started.md.txt +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/guides/project-inventory.md.txt +1428 -798
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/guides/project-map.md.txt +21 -20
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/documentation_options.js +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/api.html +76 -20
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/genindex.html +11 -5
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/guides/app-runtime-and-workspaces.html +55 -25
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/guides/authoring-flow-modules.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/guides/configuring-flows.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/guides/core-concepts.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/guides/database-methods.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/guides/duckdb-helpers.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/guides/excel-helpers.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/guides/flow-context.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/guides/flow-methods.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/guides/getting-started.html +2 -2
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/guides/polars-helpers.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/guides/project-inventory.html +7390 -6472
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/guides/project-map.html +85 -78
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/guides/recipes.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/index.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/objects.inv +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/py-modindex.html +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/search.html +1 -1
- py_data_engine-0.4.0/src/data_engine/docs/html/searchindex.js +1 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/guides/app-runtime-and-workspaces.md +53 -23
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/guides/getting-started.md +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/guides/project-inventory.md +1428 -798
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/guides/project-map.md +21 -20
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/actions.py +0 -8
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/runtime.py +8 -2
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/helpers/excel.py +42 -7
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/hosts/daemon/app.py +47 -10
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/hosts/daemon/bootstrap.py +51 -27
- py_data_engine-0.4.0/src/data_engine/hosts/daemon/client.py +2218 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/hosts/daemon/commands.py +23 -4
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/hosts/daemon/composition.py +139 -16
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/hosts/daemon/constants.py +0 -2
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/hosts/daemon/entrypoints.py +27 -4
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/hosts/daemon/lifecycle.py +172 -45
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/hosts/daemon/manager.py +34 -22
- py_data_engine-0.4.0/src/data_engine/hosts/daemon/ownership.py +205 -0
- py_data_engine-0.4.0/src/data_engine/hosts/daemon/runtime_commands.py +410 -0
- py_data_engine-0.4.0/src/data_engine/hosts/daemon/runtime_control.py +196 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/hosts/daemon/runtime_events.py +6 -0
- py_data_engine-0.4.0/src/data_engine/hosts/daemon/server.py +302 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/hosts/daemon/shared_state.py +78 -11
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/hosts/daemon/state_sync.py +53 -22
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/platform/identity.py +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/platform/local_settings.py +56 -0
- py_data_engine-0.4.0/src/data_engine/platform/machine_identity.py +58 -0
- py_data_engine-0.4.0/src/data_engine/platform/posix_watchdog.py +764 -0
- py_data_engine-0.4.0/src/data_engine/platform/processes.py +1566 -0
- py_data_engine-0.4.0/src/data_engine/platform/windows_spawn.py +727 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/platform/workspace_models.py +45 -33
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/platform/workspace_policy.py +22 -25
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/engine.py +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/execution/continuous.py +19 -14
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/execution/runner.py +10 -2
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/file_watch.py +16 -15
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/ledger_models.py +6 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/runtime_cache_store.py +90 -6
- py_data_engine-0.4.0/src/data_engine/runtime/runtime_control_store.py +514 -0
- py_data_engine-0.4.0/src/data_engine/runtime/shared_state.py +2066 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/sqlite_store.py +35 -5
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/debug_artifacts.py +31 -8
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/ledger.py +4 -12
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/operator_commands.py +11 -11
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/operator_queries.py +1 -1
- py_data_engine-0.4.0/src/data_engine/services/reset.py +68 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/runtime_binding.py +39 -3
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/runtime_io.py +208 -53
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/runtime_ports.py +6 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/runtime_state.py +6 -2
- py_data_engine-0.4.0/src/data_engine/services/shared_state.py +69 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/workspace_io.py +178 -56
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/__init__.py +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/cli/app.py +5 -6
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/cli/commands_doctor.py +49 -10
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/cli/commands_run.py +2 -6
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/cli/commands_start.py +0 -11
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/cli/parser.py +2 -5
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/app_binding.py +0 -2
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/controllers/flows.py +0 -7
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/launcher.py +13 -4
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/presenters/logs.py +0 -2
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/presenters/sidebar.py +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/presenters/workspace_binding.py +5 -3
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/rendering/artifacts.py +54 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/surface.py +1 -1
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/widgets/sidebar.py +2 -2
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/views/__init__.py +1 -22
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/views/actions.py +1 -53
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/views/flow_display.py +4 -16
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/views/presentation.py +1 -25
- {py_data_engine-0.3.12 → py_data_engine-0.4.0/src/py_data_engine.egg-info}/PKG-INFO +30 -40
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/py_data_engine.egg-info/SOURCES.txt +4 -13
- py_data_engine-0.4.0/src/py_data_engine.egg-info/requires.txt +55 -0
- py_data_engine-0.3.12/src/data_engine/docs/html/searchindex.js +0 -1
- py_data_engine-0.3.12/src/data_engine/hosts/daemon/client.py +0 -533
- py_data_engine-0.3.12/src/data_engine/hosts/daemon/ownership.py +0 -131
- py_data_engine-0.3.12/src/data_engine/hosts/daemon/runtime_commands.py +0 -301
- py_data_engine-0.3.12/src/data_engine/hosts/daemon/runtime_control.py +0 -35
- py_data_engine-0.3.12/src/data_engine/hosts/daemon/server.py +0 -118
- py_data_engine-0.3.12/src/data_engine/platform/processes.py +0 -218
- py_data_engine-0.3.12/src/data_engine/runtime/runtime_control_store.py +0 -251
- py_data_engine-0.3.12/src/data_engine/runtime/shared_state.py +0 -621
- py_data_engine-0.3.12/src/data_engine/services/reset.py +0 -61
- py_data_engine-0.3.12/src/data_engine/services/shared_state.py +0 -39
- py_data_engine-0.3.12/src/data_engine/ui/tui/__init__.py +0 -5
- py_data_engine-0.3.12/src/data_engine/ui/tui/app.py +0 -534
- py_data_engine-0.3.12/src/data_engine/ui/tui/app_binding.py +0 -126
- py_data_engine-0.3.12/src/data_engine/ui/tui/bootstrap.py +0 -471
- py_data_engine-0.3.12/src/data_engine/ui/tui/controllers/__init__.py +0 -6
- py_data_engine-0.3.12/src/data_engine/ui/tui/controllers/flows.py +0 -486
- py_data_engine-0.3.12/src/data_engine/ui/tui/controllers/runtime.py +0 -358
- py_data_engine-0.3.12/src/data_engine/ui/tui/runtime.py +0 -34
- py_data_engine-0.3.12/src/data_engine/ui/tui/state_support.py +0 -136
- py_data_engine-0.3.12/src/data_engine/ui/tui/support.py +0 -142
- py_data_engine-0.3.12/src/data_engine/ui/tui/theme.py +0 -292
- py_data_engine-0.3.12/src/data_engine/ui/tui/widgets.py +0 -133
- py_data_engine-0.3.12/src/data_engine/views/text.py +0 -109
- py_data_engine-0.3.12/src/py_data_engine.egg-info/requires.txt +0 -59
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/LICENSE +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/MANIFEST.in +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/setup.cfg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/setup.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/application/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/application/catalog.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/application/control.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/application/details.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/application/workspace.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/authoring/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/authoring/flow.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/authoring/services.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/core/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/core/helpers.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/core/model.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/core/primitives.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/devtools/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/devtools/project_ast_map.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/devtools/smoke_data.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/api.rst.txt +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/guides/authoring-flow-modules.md.txt +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/guides/configuring-flows.md.txt +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/guides/core-concepts.md.txt +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/guides/database-methods.md.txt +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/guides/duckdb-helpers.md.txt +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/guides/excel-helpers.md.txt +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/guides/flow-context.md.txt +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/guides/flow-methods.md.txt +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/guides/polars-helpers.md.txt +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/guides/recipes.md.txt +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_sources/index.rst.txt +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/base-stemmer.js +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/basic.css +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/badge_only.css +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/lato-bold-italic.woff +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/lato-bold.woff +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/lato-bold.woff2 +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/lato-normal-italic.woff +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/lato-normal.woff +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/fonts/lato-normal.woff2 +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/css/theme.css +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/custom.css +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/doctools.js +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/english-stemmer.js +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/file.png +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-bold.eot +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-bold.ttf +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-bold.woff +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-italic.eot +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-italic.ttf +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-italic.woff +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-regular.eot +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-regular.ttf +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-regular.woff +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/jquery.js +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/js/badge_only.js +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/js/theme.js +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/js/versions.js +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/language_data.js +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/minus.png +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/plus.png +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/pygments.css +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/searchtools.js +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/html/_static/sphinx_highlight.js +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/_static/custom.css +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/api.rst +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/conf.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/guides/authoring-flow-modules.md +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/guides/configuring-flows.md +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/guides/core-concepts.md +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/guides/database-methods.md +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/guides/duckdb-helpers.md +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/guides/excel-helpers.md +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/guides/flow-context.md +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/guides/flow-methods.md +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/guides/polars-helpers.md +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/guides/recipes.md +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/docs/sphinx_source/index.rst +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/catalog.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/debug_artifacts.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/details.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/diagnostics.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/errors.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/inspection.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/logs.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/operations.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/operator.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/runs.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/source_state.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/support.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/time.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/domain/workspace.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/flow_modules/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/flow_modules/flow_module_compiler.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/flow_modules/flow_module_loader.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/helpers/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/helpers/duckdb/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/helpers/duckdb/_common.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/helpers/duckdb/_dimensions.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/helpers/duckdb/_maintenance.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/helpers/duckdb/_read.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/helpers/duckdb/_replace.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/helpers/polars.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/helpers/schema.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/hosts/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/hosts/daemon/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/hosts/daemon/runtime_ledger.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/hosts/scheduler.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/platform/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/platform/instrumentation.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/platform/interpreters.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/platform/paths.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/platform/theme.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/execution/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/execution/app.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/execution/context.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/execution/grouped.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/execution/logging.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/execution/polling.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/execution/single.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/result_cleanup.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/runtime_db.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/runtime/stop.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/daemon.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/daemon_state.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/flow_catalog.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/flow_execution.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/logs.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/runtime_execution.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/runtime_history.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/settings.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/theme.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/workspace_provisioning.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/services/workspaces.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/cli/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/cli/commands_workspace.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/cli/dependencies.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/app.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/bootstrap.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/cache_models.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/control_support.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/controllers/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/controllers/runtime.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/dialogs/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/dialogs/inputs.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/dialogs/messages.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/dialogs/previews.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/helpers/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/helpers/inspection.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/helpers/lifecycle.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/helpers/scroll.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/helpers/theming.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/check-mark-dark.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/check-mark-light.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/dark_light.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/dataframe.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/debug.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/documentation.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/down-chevron-dark.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/down-chevron-light.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/failed.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/group.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/home.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/manual.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/poll.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/schedule.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/select-all-all.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/select-all-none.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/select-all-partial.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/settings.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/sort-ascending.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/sort-descending.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/started.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/success.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/up-chevron-dark.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/up-chevron-light.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons/view-log.svg +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/icons.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/presenters/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/presenters/dataframes.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/presenters/debug.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/presenters/docs.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/presenters/runtime_projection.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/presenters/steps.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/presenters/workspace.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/presenters/workspace_settings.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/preview_models.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/render_support.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/rendering/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/rendering/icons.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/rendering/preview_filters.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/runtime.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/state_support.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/support.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/theme.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/widgets/__init__.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/widgets/config.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/widgets/log_list.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/widgets/logs.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/widgets/panels.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/ui/gui/widgets/steps.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/views/artifacts.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/views/logs.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/views/models.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/views/runs.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/views/selection.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/views/state.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/data_engine/views/status.py +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/py_data_engine.egg-info/dependency_links.txt +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/py_data_engine.egg-info/entry_points.txt +0 -0
- {py_data_engine-0.3.12 → py_data_engine-0.4.0}/src/py_data_engine.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: py-data-engine
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: GUI orchestrator for python-based dataframe transform pipelines.
|
|
5
5
|
Author: Data Engine contributors
|
|
6
6
|
License-Expression: MIT
|
|
@@ -18,55 +18,52 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
18
18
|
Requires-Python: >=3.14
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
License-File: LICENSE
|
|
21
|
-
Requires-Dist: APScheduler==3.11.
|
|
22
|
-
Requires-Dist: duckdb==1.5.
|
|
23
|
-
Requires-Dist: fastexcel==0.
|
|
24
|
-
Requires-Dist: numpy==2.
|
|
21
|
+
Requires-Dist: APScheduler==3.11.3
|
|
22
|
+
Requires-Dist: duckdb==1.5.4
|
|
23
|
+
Requires-Dist: fastexcel==0.20.2
|
|
24
|
+
Requires-Dist: numpy==2.5.1
|
|
25
25
|
Requires-Dist: openpyxl==3.1.5
|
|
26
|
-
Requires-Dist: polars==1.
|
|
27
|
-
Requires-Dist: pyarrow==
|
|
28
|
-
Requires-Dist: PySide6==6.11.
|
|
29
|
-
Requires-Dist: textual==8.2.3
|
|
26
|
+
Requires-Dist: polars==1.42.1
|
|
27
|
+
Requires-Dist: pyarrow==25.0.0
|
|
28
|
+
Requires-Dist: PySide6==6.11.1
|
|
30
29
|
Requires-Dist: xlsxwriter==3.2.9
|
|
31
|
-
Provides-Extra: polars-lts
|
|
32
|
-
Requires-Dist: polars-lts-cpu==1.33.1; extra == "polars-lts"
|
|
33
30
|
Provides-Extra: synthetic
|
|
34
31
|
Requires-Dist: openpyxl==3.1.5; extra == "synthetic"
|
|
35
|
-
Requires-Dist: pandas==3.0.
|
|
32
|
+
Requires-Dist: pandas==3.0.3; extra == "synthetic"
|
|
36
33
|
Provides-Extra: notebook
|
|
37
|
-
Requires-Dist: ipykernel==7.
|
|
38
|
-
Requires-Dist: ipython==9.
|
|
39
|
-
Requires-Dist: jupyterlab==4.
|
|
40
|
-
Requires-Dist: notebook==7.
|
|
34
|
+
Requires-Dist: ipykernel==7.3.0; extra == "notebook"
|
|
35
|
+
Requires-Dist: ipython==9.15.0; extra == "notebook"
|
|
36
|
+
Requires-Dist: jupyterlab==4.6.1; extra == "notebook"
|
|
37
|
+
Requires-Dist: notebook==7.6.0; extra == "notebook"
|
|
41
38
|
Provides-Extra: docs
|
|
42
|
-
Requires-Dist: myst-parser==5.
|
|
39
|
+
Requires-Dist: myst-parser==5.1.0; extra == "docs"
|
|
43
40
|
Requires-Dist: Sphinx==9.1.0; extra == "docs"
|
|
44
41
|
Requires-Dist: sphinx_rtd_theme==3.1.0; extra == "docs"
|
|
45
42
|
Provides-Extra: package
|
|
46
|
-
Requires-Dist: build==1.
|
|
47
|
-
Requires-Dist: pyinstaller==6.
|
|
43
|
+
Requires-Dist: build==1.5.1; extra == "package"
|
|
44
|
+
Requires-Dist: pyinstaller==6.21.0; extra == "package"
|
|
48
45
|
Requires-Dist: twine==6.2.0; extra == "package"
|
|
49
46
|
Provides-Extra: test
|
|
50
47
|
Requires-Dist: openpyxl==3.1.5; extra == "test"
|
|
51
|
-
Requires-Dist: pandas==3.0.
|
|
48
|
+
Requires-Dist: pandas==3.0.3; extra == "test"
|
|
52
49
|
Requires-Dist: pydocstyle==6.3.0; extra == "test"
|
|
53
|
-
Requires-Dist: pytest==9.
|
|
50
|
+
Requires-Dist: pytest==9.1.1; extra == "test"
|
|
54
51
|
Requires-Dist: pytest-cov==7.1.0; extra == "test"
|
|
55
52
|
Provides-Extra: dev
|
|
56
|
-
Requires-Dist: ipykernel==7.
|
|
57
|
-
Requires-Dist: ipython==9.
|
|
58
|
-
Requires-Dist: jupyterlab==4.
|
|
59
|
-
Requires-Dist: myst-parser==5.
|
|
60
|
-
Requires-Dist: notebook==7.
|
|
61
|
-
Requires-Dist: numpy==2.
|
|
53
|
+
Requires-Dist: ipykernel==7.3.0; extra == "dev"
|
|
54
|
+
Requires-Dist: ipython==9.15.0; extra == "dev"
|
|
55
|
+
Requires-Dist: jupyterlab==4.6.1; extra == "dev"
|
|
56
|
+
Requires-Dist: myst-parser==5.1.0; extra == "dev"
|
|
57
|
+
Requires-Dist: notebook==7.6.0; extra == "dev"
|
|
58
|
+
Requires-Dist: numpy==2.5.1; extra == "dev"
|
|
62
59
|
Requires-Dist: openpyxl==3.1.5; extra == "dev"
|
|
63
|
-
Requires-Dist: pandas==3.0.
|
|
64
|
-
Requires-Dist: pydoclint==0.
|
|
60
|
+
Requires-Dist: pandas==3.0.3; extra == "dev"
|
|
61
|
+
Requires-Dist: pydoclint==0.9.1; extra == "dev"
|
|
65
62
|
Requires-Dist: pydocstyle==6.3.0; extra == "dev"
|
|
66
|
-
Requires-Dist: pyinstaller==6.
|
|
67
|
-
Requires-Dist: pytest==9.
|
|
63
|
+
Requires-Dist: pyinstaller==6.21.0; extra == "dev"
|
|
64
|
+
Requires-Dist: pytest==9.1.1; extra == "dev"
|
|
68
65
|
Requires-Dist: pytest-cov==7.1.0; extra == "dev"
|
|
69
|
-
Requires-Dist: ruff==0.15.
|
|
66
|
+
Requires-Dist: ruff==0.15.21; extra == "dev"
|
|
70
67
|
Requires-Dist: Sphinx==9.1.0; extra == "dev"
|
|
71
68
|
Requires-Dist: sphinx_rtd_theme==3.1.0; extra == "dev"
|
|
72
69
|
Requires-Dist: viztracer==1.1.1; extra == "dev"
|
|
@@ -85,7 +82,7 @@ The runtime is built around:
|
|
|
85
82
|
- Polars and DuckDB-friendly flow steps
|
|
86
83
|
- mirrored output paths for source-driven runs
|
|
87
84
|
- saved run, log, and dataframe inspection state
|
|
88
|
-
- desktop
|
|
85
|
+
- a desktop operator surface
|
|
89
86
|
|
|
90
87
|
## Install
|
|
91
88
|
|
|
@@ -93,7 +90,6 @@ Use the installer for your environment:
|
|
|
93
90
|
|
|
94
91
|
- macOS: [INSTALL/INSTALL MAC.command](INSTALL/INSTALL%20MAC.command)
|
|
95
92
|
- Windows: [INSTALL/INSTALL WINDOWS.bat](INSTALL/INSTALL%20WINDOWS.bat)
|
|
96
|
-
- Windows VM / CPU-safe Polars path: [INSTALL/INSTALL WINDOWS_VM.bat](INSTALL/INSTALL%20WINDOWS_VM.bat)
|
|
97
93
|
|
|
98
94
|
For local development:
|
|
99
95
|
|
|
@@ -120,12 +116,6 @@ Desktop GUI:
|
|
|
120
116
|
data-engine start gui
|
|
121
117
|
```
|
|
122
118
|
|
|
123
|
-
Terminal UI:
|
|
124
|
-
|
|
125
|
-
```bash
|
|
126
|
-
data-engine start tui
|
|
127
|
-
```
|
|
128
|
-
|
|
129
119
|
Headless commands:
|
|
130
120
|
|
|
131
121
|
```bash
|
|
@@ -11,7 +11,7 @@ The runtime is built around:
|
|
|
11
11
|
- Polars and DuckDB-friendly flow steps
|
|
12
12
|
- mirrored output paths for source-driven runs
|
|
13
13
|
- saved run, log, and dataframe inspection state
|
|
14
|
-
- desktop
|
|
14
|
+
- a desktop operator surface
|
|
15
15
|
|
|
16
16
|
## Install
|
|
17
17
|
|
|
@@ -19,7 +19,6 @@ Use the installer for your environment:
|
|
|
19
19
|
|
|
20
20
|
- macOS: [INSTALL/INSTALL MAC.command](INSTALL/INSTALL%20MAC.command)
|
|
21
21
|
- Windows: [INSTALL/INSTALL WINDOWS.bat](INSTALL/INSTALL%20WINDOWS.bat)
|
|
22
|
-
- Windows VM / CPU-safe Polars path: [INSTALL/INSTALL WINDOWS_VM.bat](INSTALL/INSTALL%20WINDOWS_VM.bat)
|
|
23
22
|
|
|
24
23
|
For local development:
|
|
25
24
|
|
|
@@ -46,12 +45,6 @@ Desktop GUI:
|
|
|
46
45
|
data-engine start gui
|
|
47
46
|
```
|
|
48
47
|
|
|
49
|
-
Terminal UI:
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
data-engine start tui
|
|
53
|
-
```
|
|
54
|
-
|
|
55
48
|
Headless commands:
|
|
56
49
|
|
|
57
50
|
```bash
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
[build-system]
|
|
2
2
|
requires = [
|
|
3
|
-
"setuptools==
|
|
4
|
-
"APScheduler==3.11.
|
|
5
|
-
"duckdb==1.5.
|
|
6
|
-
"myst-parser==5.
|
|
7
|
-
"numpy==2.
|
|
3
|
+
"setuptools==83.0.0",
|
|
4
|
+
"APScheduler==3.11.3",
|
|
5
|
+
"duckdb==1.5.4",
|
|
6
|
+
"myst-parser==5.1.0",
|
|
7
|
+
"numpy==2.5.1",
|
|
8
8
|
"openpyxl==3.1.5",
|
|
9
|
-
"polars==1.
|
|
9
|
+
"polars==1.42.1",
|
|
10
10
|
"Sphinx==9.1.0",
|
|
11
11
|
"sphinx_rtd_theme==3.1.0",
|
|
12
12
|
"xlsxwriter==3.2.9",
|
|
@@ -35,15 +35,14 @@ classifiers = [
|
|
|
35
35
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
36
36
|
]
|
|
37
37
|
dependencies = [
|
|
38
|
-
"APScheduler==3.11.
|
|
39
|
-
"duckdb==1.5.
|
|
40
|
-
"fastexcel==0.
|
|
41
|
-
"numpy==2.
|
|
38
|
+
"APScheduler==3.11.3",
|
|
39
|
+
"duckdb==1.5.4",
|
|
40
|
+
"fastexcel==0.20.2",
|
|
41
|
+
"numpy==2.5.1",
|
|
42
42
|
"openpyxl==3.1.5",
|
|
43
|
-
"polars==1.
|
|
44
|
-
"pyarrow==
|
|
45
|
-
"PySide6==6.11.
|
|
46
|
-
"textual==8.2.3",
|
|
43
|
+
"polars==1.42.1",
|
|
44
|
+
"pyarrow==25.0.0",
|
|
45
|
+
"PySide6==6.11.1",
|
|
47
46
|
"xlsxwriter==3.2.9",
|
|
48
47
|
]
|
|
49
48
|
|
|
@@ -56,51 +55,48 @@ Issues = "https://github.com/bj-data-eng/data-engine/issues"
|
|
|
56
55
|
data-engine = "data_engine.ui.cli.app:main"
|
|
57
56
|
|
|
58
57
|
[project.optional-dependencies]
|
|
59
|
-
polars-lts = [
|
|
60
|
-
"polars-lts-cpu==1.33.1",
|
|
61
|
-
]
|
|
62
58
|
synthetic = [
|
|
63
59
|
"openpyxl==3.1.5",
|
|
64
|
-
"pandas==3.0.
|
|
60
|
+
"pandas==3.0.3",
|
|
65
61
|
]
|
|
66
62
|
notebook = [
|
|
67
|
-
"ipykernel==7.
|
|
68
|
-
"ipython==9.
|
|
69
|
-
"jupyterlab==4.
|
|
70
|
-
"notebook==7.
|
|
63
|
+
"ipykernel==7.3.0",
|
|
64
|
+
"ipython==9.15.0",
|
|
65
|
+
"jupyterlab==4.6.1",
|
|
66
|
+
"notebook==7.6.0",
|
|
71
67
|
]
|
|
72
68
|
docs = [
|
|
73
|
-
"myst-parser==5.
|
|
69
|
+
"myst-parser==5.1.0",
|
|
74
70
|
"Sphinx==9.1.0",
|
|
75
71
|
"sphinx_rtd_theme==3.1.0",
|
|
76
72
|
]
|
|
77
73
|
package = [
|
|
78
|
-
"build==1.
|
|
79
|
-
"pyinstaller==6.
|
|
74
|
+
"build==1.5.1",
|
|
75
|
+
"pyinstaller==6.21.0",
|
|
80
76
|
"twine==6.2.0",
|
|
81
77
|
]
|
|
82
78
|
test = [
|
|
83
79
|
"openpyxl==3.1.5",
|
|
84
|
-
"pandas==3.0.
|
|
80
|
+
"pandas==3.0.3",
|
|
85
81
|
"pydocstyle==6.3.0",
|
|
86
|
-
"pytest==9.
|
|
82
|
+
"pytest==9.1.1",
|
|
87
83
|
"pytest-cov==7.1.0",
|
|
88
84
|
]
|
|
89
85
|
dev = [
|
|
90
|
-
"ipykernel==7.
|
|
91
|
-
"ipython==9.
|
|
92
|
-
"jupyterlab==4.
|
|
93
|
-
"myst-parser==5.
|
|
94
|
-
"notebook==7.
|
|
95
|
-
"numpy==2.
|
|
86
|
+
"ipykernel==7.3.0",
|
|
87
|
+
"ipython==9.15.0",
|
|
88
|
+
"jupyterlab==4.6.1",
|
|
89
|
+
"myst-parser==5.1.0",
|
|
90
|
+
"notebook==7.6.0",
|
|
91
|
+
"numpy==2.5.1",
|
|
96
92
|
"openpyxl==3.1.5",
|
|
97
|
-
"pandas==3.0.
|
|
98
|
-
"pydoclint==0.
|
|
93
|
+
"pandas==3.0.3",
|
|
94
|
+
"pydoclint==0.9.1",
|
|
99
95
|
"pydocstyle==6.3.0",
|
|
100
|
-
"pyinstaller==6.
|
|
101
|
-
"pytest==9.
|
|
96
|
+
"pyinstaller==6.21.0",
|
|
97
|
+
"pytest==9.1.1",
|
|
102
98
|
"pytest-cov==7.1.0",
|
|
103
|
-
"ruff==0.15.
|
|
99
|
+
"ruff==0.15.21",
|
|
104
100
|
"Sphinx==9.1.0",
|
|
105
101
|
"sphinx_rtd_theme==3.1.0",
|
|
106
102
|
"viztracer==1.1.1",
|
|
@@ -18,10 +18,8 @@ class ActionStateApplication:
|
|
|
18
18
|
active_flow_states,
|
|
19
19
|
engine_state: str = "idle",
|
|
20
20
|
live_runs: dict[str, object] | None = None,
|
|
21
|
-
has_logs: bool,
|
|
22
21
|
has_automated_flows: bool,
|
|
23
22
|
workspace_available: bool = True,
|
|
24
|
-
selected_run_group_present: bool = False,
|
|
25
23
|
local_request_pending: bool = False,
|
|
26
24
|
overlay: PendingWorkspaceActionOverlay | None = None,
|
|
27
25
|
) -> OperatorActionContext:
|
|
@@ -32,7 +30,6 @@ class ActionStateApplication:
|
|
|
32
30
|
runtime_session=runtime_session,
|
|
33
31
|
flow_groups_by_name=flow_groups_by_name,
|
|
34
32
|
active_flow_states=active_flow_states,
|
|
35
|
-
has_logs=has_logs,
|
|
36
33
|
live_runs=live_runs,
|
|
37
34
|
)
|
|
38
35
|
return OperatorActionContext(
|
|
@@ -41,7 +38,6 @@ class ActionStateApplication:
|
|
|
41
38
|
has_automated_flows=has_automated_flows,
|
|
42
39
|
engine_state=engine_state,
|
|
43
40
|
workspace_available=workspace_available,
|
|
44
|
-
selected_run_group_present=selected_run_group_present,
|
|
45
41
|
local_request_pending=local_request_pending,
|
|
46
42
|
overlay=PendingWorkspaceActionOverlay() if overlay is None else overlay,
|
|
47
43
|
)
|
|
@@ -24,6 +24,9 @@ from data_engine.platform.workspace_models import WorkspacePaths, authored_works
|
|
|
24
24
|
from data_engine.services import DaemonService, DaemonStateService, SharedStateService
|
|
25
25
|
|
|
26
26
|
|
|
27
|
+
_FLOW_RESET_TIMEOUT_SECONDS = 120.0
|
|
28
|
+
|
|
29
|
+
|
|
27
30
|
@dataclass(frozen=True)
|
|
28
31
|
class DaemonCommandResult:
|
|
29
32
|
"""Normalized outcome of one daemon command request."""
|
|
@@ -278,6 +281,16 @@ class RuntimeApplication:
|
|
|
278
281
|
"""Request one manual flow stop through the daemon."""
|
|
279
282
|
return self._request(paths, {"command": "stop_flow", "name": name}, timeout=timeout)
|
|
280
283
|
|
|
284
|
+
def reset_flow(
|
|
285
|
+
self,
|
|
286
|
+
paths: WorkspacePaths,
|
|
287
|
+
*,
|
|
288
|
+
name: str,
|
|
289
|
+
timeout: float = _FLOW_RESET_TIMEOUT_SECONDS,
|
|
290
|
+
) -> DaemonCommandResult:
|
|
291
|
+
"""Reset one flow through the daemon that owns shared snapshot publication."""
|
|
292
|
+
return self._request(paths, {"command": "reset_flow", "name": name}, timeout=timeout)
|
|
293
|
+
|
|
281
294
|
def daemon_status(self, paths: WorkspacePaths, *, timeout: float = 0.0) -> DaemonCommandResult:
|
|
282
295
|
"""Request raw daemon status for host/CLI inspection."""
|
|
283
296
|
return self._request(paths, {"command": "daemon_status"}, timeout=timeout)
|
|
@@ -47,7 +47,7 @@ class Flow:
|
|
|
47
47
|
Attributes
|
|
48
48
|
----------
|
|
49
49
|
group : str
|
|
50
|
-
Display group used by the GUI
|
|
50
|
+
Display group used by the GUI and runtime summaries.
|
|
51
51
|
name : str | None
|
|
52
52
|
Stable flow identifier. When omitted in a flow module, the module loader
|
|
53
53
|
can derive it from the module name.
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
"""Containment-first daemon launcher with a gated POSIX second stage."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Callable
|
|
6
|
+
import json
|
|
7
|
+
import os
|
|
8
|
+
import select
|
|
9
|
+
import sys
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
_PACKAGE_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
14
|
+
_BOOTSTRAP_PATH = os.path.abspath(__file__)
|
|
15
|
+
_BOOTSTRAP_DIRECTORY = os.path.dirname(_BOOTSTRAP_PATH)
|
|
16
|
+
_LAUNCH_READY_FD_OPTION = "--launch-ready-fd"
|
|
17
|
+
_LAUNCH_RELEASE_FD_OPTION = "--launch-release-fd"
|
|
18
|
+
_ARMED_WATCHDOG_PID_OPTION = "--armed-watchdog-pid"
|
|
19
|
+
_LAUNCH_RELEASE_TIMEOUT_SECONDS = 30.0
|
|
20
|
+
_MAX_LAUNCH_IDENTITY_BYTES = 16_384
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _containment_nonce_from_argv(argv: list[str]) -> str:
|
|
24
|
+
values: list[str] = []
|
|
25
|
+
index = 0
|
|
26
|
+
while index < len(argv):
|
|
27
|
+
argument = argv[index]
|
|
28
|
+
if argument == "--containment-nonce":
|
|
29
|
+
if index + 1 >= len(argv):
|
|
30
|
+
break
|
|
31
|
+
values.append(argv[index + 1])
|
|
32
|
+
index += 2
|
|
33
|
+
continue
|
|
34
|
+
prefix = "--containment-nonce="
|
|
35
|
+
if argument.startswith(prefix):
|
|
36
|
+
values.append(argument.removeprefix(prefix))
|
|
37
|
+
index += 1
|
|
38
|
+
if len(values) != 1:
|
|
39
|
+
raise SystemExit("The daemon bootstrap requires exactly one --containment-nonce.")
|
|
40
|
+
return values[0]
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _extract_internal_integer_option(
|
|
44
|
+
argv: list[str],
|
|
45
|
+
option: str,
|
|
46
|
+
) -> tuple[int | None, list[str]]:
|
|
47
|
+
values: list[str] = []
|
|
48
|
+
remaining: list[str] = []
|
|
49
|
+
index = 0
|
|
50
|
+
prefix = f"{option}="
|
|
51
|
+
while index < len(argv):
|
|
52
|
+
argument = argv[index]
|
|
53
|
+
if argument == option:
|
|
54
|
+
if index + 1 >= len(argv):
|
|
55
|
+
raise SystemExit(f"The daemon bootstrap requires a value for {option}.")
|
|
56
|
+
values.append(argv[index + 1])
|
|
57
|
+
index += 2
|
|
58
|
+
continue
|
|
59
|
+
if argument.startswith(prefix):
|
|
60
|
+
values.append(argument.removeprefix(prefix))
|
|
61
|
+
index += 1
|
|
62
|
+
continue
|
|
63
|
+
remaining.append(argument)
|
|
64
|
+
index += 1
|
|
65
|
+
if len(values) > 1:
|
|
66
|
+
raise SystemExit(f"The daemon bootstrap accepts at most one {option}.")
|
|
67
|
+
if not values:
|
|
68
|
+
return None, remaining
|
|
69
|
+
try:
|
|
70
|
+
value = int(values[0])
|
|
71
|
+
except ValueError as exc:
|
|
72
|
+
raise SystemExit(f"The daemon bootstrap requires an integer for {option}.") from exc
|
|
73
|
+
if value < 0:
|
|
74
|
+
raise SystemExit(f"The daemon bootstrap requires a nonnegative value for {option}.")
|
|
75
|
+
return value, remaining
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def _verify_current_windows_containment(containment_nonce: str) -> None:
|
|
79
|
+
from data_engine.platform.processes import (
|
|
80
|
+
ProcessInspectionError,
|
|
81
|
+
inspect_process_identity,
|
|
82
|
+
open_verified_windows_kill_on_close_job,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
identity = inspect_process_identity(os.getpid())
|
|
86
|
+
if identity is None:
|
|
87
|
+
raise ProcessInspectionError(
|
|
88
|
+
"Unable to inspect the current Windows daemon process identity."
|
|
89
|
+
)
|
|
90
|
+
job = open_verified_windows_kill_on_close_job(
|
|
91
|
+
identity,
|
|
92
|
+
nonce=containment_nonce,
|
|
93
|
+
)
|
|
94
|
+
job.close()
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def _write_all(fd: int, payload: bytes) -> None:
|
|
98
|
+
offset = 0
|
|
99
|
+
while offset < len(payload):
|
|
100
|
+
written = os.write(fd, payload[offset:])
|
|
101
|
+
if written <= 0:
|
|
102
|
+
raise RuntimeError("The daemon launch readiness pipe closed unexpectedly.")
|
|
103
|
+
offset += written
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def _publish_launch_identity(ready_fd: int) -> None:
|
|
107
|
+
from data_engine.platform.processes import (
|
|
108
|
+
ProcessInspectionError,
|
|
109
|
+
inspect_process_identity,
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
identity = inspect_process_identity(os.getpid())
|
|
113
|
+
if identity is None:
|
|
114
|
+
raise ProcessInspectionError(
|
|
115
|
+
"Unable to inspect the contained daemon bootstrap identity."
|
|
116
|
+
)
|
|
117
|
+
if (
|
|
118
|
+
identity.process_group_id != identity.pid
|
|
119
|
+
or identity.process_session_id != identity.pid
|
|
120
|
+
):
|
|
121
|
+
raise ProcessInspectionError(
|
|
122
|
+
"The contained daemon bootstrap is outside its dedicated session."
|
|
123
|
+
)
|
|
124
|
+
payload = json.dumps(
|
|
125
|
+
{
|
|
126
|
+
"pid": identity.pid,
|
|
127
|
+
"start_key": identity.start_key,
|
|
128
|
+
"executable_path": identity.executable_path,
|
|
129
|
+
"process_group_id": identity.process_group_id,
|
|
130
|
+
"process_session_id": identity.process_session_id,
|
|
131
|
+
},
|
|
132
|
+
ensure_ascii=False,
|
|
133
|
+
separators=(",", ":"),
|
|
134
|
+
).encode("utf-8")
|
|
135
|
+
if len(payload) > _MAX_LAUNCH_IDENTITY_BYTES:
|
|
136
|
+
raise ProcessInspectionError("The daemon launch identity is unexpectedly large.")
|
|
137
|
+
_write_all(ready_fd, payload)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def _await_launch_release(release_fd: int) -> None:
|
|
141
|
+
readable, _, _ = select.select(
|
|
142
|
+
[release_fd],
|
|
143
|
+
[],
|
|
144
|
+
[],
|
|
145
|
+
_LAUNCH_RELEASE_TIMEOUT_SECONDS,
|
|
146
|
+
)
|
|
147
|
+
if not readable:
|
|
148
|
+
raise RuntimeError("Timed out waiting for the daemon launcher release.")
|
|
149
|
+
if os.read(release_fd, 1) != b"1":
|
|
150
|
+
raise RuntimeError("The daemon launcher closed before releasing startup.")
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def _exec_normal_posix_stage(
|
|
154
|
+
arguments: list[str],
|
|
155
|
+
*,
|
|
156
|
+
watchdog_pid: int,
|
|
157
|
+
) -> None:
|
|
158
|
+
exec_arguments = [
|
|
159
|
+
sys.executable,
|
|
160
|
+
"-P",
|
|
161
|
+
"-m",
|
|
162
|
+
"data_engine.daemon_bootstrap",
|
|
163
|
+
_ARMED_WATCHDOG_PID_OPTION,
|
|
164
|
+
str(watchdog_pid),
|
|
165
|
+
*arguments,
|
|
166
|
+
]
|
|
167
|
+
os.execv(sys.executable, exec_arguments)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def _prepare_isolated_package_import_path() -> None:
|
|
171
|
+
"""Expose the package root only for the absolute-script bootstrap stage."""
|
|
172
|
+
bootstrap_directory_identity = os.path.normcase(_BOOTSTRAP_DIRECTORY)
|
|
173
|
+
sys.path[:] = [
|
|
174
|
+
entry
|
|
175
|
+
for entry in sys.path
|
|
176
|
+
if os.path.normcase(os.path.abspath(entry or os.curdir))
|
|
177
|
+
!= bootstrap_directory_identity
|
|
178
|
+
]
|
|
179
|
+
if _PACKAGE_ROOT not in sys.path:
|
|
180
|
+
sys.path.insert(0, _PACKAGE_ROOT)
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def main(
|
|
184
|
+
argv: list[str] | None = None,
|
|
185
|
+
*,
|
|
186
|
+
arm_watchdog_func: Callable[..., object] | None = None,
|
|
187
|
+
adopt_watchdog_func: Callable[..., object] | None = None,
|
|
188
|
+
verify_windows_containment_func: Callable[[str], None] | None = None,
|
|
189
|
+
app_main_func: Callable[[list[str]], Any] | None = None,
|
|
190
|
+
exec_normal_stage_func: Callable[..., None] | None = None,
|
|
191
|
+
) -> int:
|
|
192
|
+
"""Establish platform containment, then import and run the daemon host."""
|
|
193
|
+
arguments = list(sys.argv[1:] if argv is None else argv)
|
|
194
|
+
ready_fd, arguments = _extract_internal_integer_option(
|
|
195
|
+
arguments,
|
|
196
|
+
_LAUNCH_READY_FD_OPTION,
|
|
197
|
+
)
|
|
198
|
+
release_fd, arguments = _extract_internal_integer_option(
|
|
199
|
+
arguments,
|
|
200
|
+
_LAUNCH_RELEASE_FD_OPTION,
|
|
201
|
+
)
|
|
202
|
+
armed_watchdog_pid, arguments = _extract_internal_integer_option(
|
|
203
|
+
arguments,
|
|
204
|
+
_ARMED_WATCHDOG_PID_OPTION,
|
|
205
|
+
)
|
|
206
|
+
if (ready_fd is None) != (release_fd is None):
|
|
207
|
+
raise SystemExit(
|
|
208
|
+
"The daemon bootstrap requires both launch-handshake descriptors."
|
|
209
|
+
)
|
|
210
|
+
if armed_watchdog_pid is not None and ready_fd is not None:
|
|
211
|
+
raise SystemExit(
|
|
212
|
+
"The daemon bootstrap cannot adopt and create a watchdog in one stage."
|
|
213
|
+
)
|
|
214
|
+
containment_nonce = _containment_nonce_from_argv(arguments)
|
|
215
|
+
if os.name == "posix" and armed_watchdog_pid is None:
|
|
216
|
+
_prepare_isolated_package_import_path()
|
|
217
|
+
|
|
218
|
+
if os.name == "posix":
|
|
219
|
+
if armed_watchdog_pid is None:
|
|
220
|
+
if arm_watchdog_func is None:
|
|
221
|
+
from data_engine.platform.posix_watchdog import (
|
|
222
|
+
arm_posix_process_group_watchdog,
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
arm_watchdog_func = arm_posix_process_group_watchdog
|
|
226
|
+
watchdog = arm_watchdog_func(containment_nonce=containment_nonce)
|
|
227
|
+
if ready_fd is not None and release_fd is not None:
|
|
228
|
+
try:
|
|
229
|
+
_publish_launch_identity(ready_fd)
|
|
230
|
+
finally:
|
|
231
|
+
os.close(ready_fd)
|
|
232
|
+
try:
|
|
233
|
+
_await_launch_release(release_fd)
|
|
234
|
+
finally:
|
|
235
|
+
os.close(release_fd)
|
|
236
|
+
watchdog_pid = getattr(watchdog, "pid", None)
|
|
237
|
+
if (
|
|
238
|
+
isinstance(watchdog_pid, bool)
|
|
239
|
+
or not isinstance(watchdog_pid, int)
|
|
240
|
+
or watchdog_pid <= 0
|
|
241
|
+
):
|
|
242
|
+
raise RuntimeError(
|
|
243
|
+
"The armed POSIX watchdog returned an invalid process identifier."
|
|
244
|
+
)
|
|
245
|
+
(exec_normal_stage_func or _exec_normal_posix_stage)(
|
|
246
|
+
arguments,
|
|
247
|
+
watchdog_pid=watchdog_pid,
|
|
248
|
+
)
|
|
249
|
+
raise RuntimeError("The normal daemon interpreter unexpectedly returned.")
|
|
250
|
+
else:
|
|
251
|
+
if adopt_watchdog_func is None:
|
|
252
|
+
from data_engine.platform.posix_watchdog import (
|
|
253
|
+
adopt_posix_process_group_watchdog,
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
adopt_watchdog_func = adopt_posix_process_group_watchdog
|
|
257
|
+
adopt_watchdog_func(
|
|
258
|
+
armed_watchdog_pid,
|
|
259
|
+
containment_nonce=containment_nonce,
|
|
260
|
+
)
|
|
261
|
+
elif os.name == "nt":
|
|
262
|
+
if ready_fd is not None or armed_watchdog_pid is not None:
|
|
263
|
+
raise SystemExit("Windows daemon bootstrap received POSIX launch state.")
|
|
264
|
+
(verify_windows_containment_func or _verify_current_windows_containment)(
|
|
265
|
+
containment_nonce
|
|
266
|
+
)
|
|
267
|
+
if app_main_func is None:
|
|
268
|
+
from data_engine.hosts.daemon.app import main as daemon_main
|
|
269
|
+
|
|
270
|
+
app_main_func = daemon_main
|
|
271
|
+
return int(app_main_func(arguments))
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
if __name__ == "__main__":
|
|
275
|
+
raise SystemExit(main())
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
|
|
15
15
|
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
|
16
|
-
<script src="../../../_static/documentation_options.js?v=
|
|
16
|
+
<script src="../../../_static/documentation_options.js?v=6c02275b"></script>
|
|
17
17
|
<script src="../../../_static/doctools.js?v=fd6eb6e6"></script>
|
|
18
18
|
<script src="../../../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
|
19
19
|
<script src="../../../_static/js/theme.js"></script>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
|
|
15
15
|
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
|
16
|
-
<script src="../../../_static/documentation_options.js?v=
|
|
16
|
+
<script src="../../../_static/documentation_options.js?v=6c02275b"></script>
|
|
17
17
|
<script src="../../../_static/doctools.js?v=fd6eb6e6"></script>
|
|
18
18
|
<script src="../../../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
|
19
19
|
<script src="../../../_static/js/theme.js"></script>
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
<span class="sd"> Attributes</span>
|
|
139
139
|
<span class="sd"> ----------</span>
|
|
140
140
|
<span class="sd"> group : str</span>
|
|
141
|
-
<span class="sd"> Display group used by the GUI
|
|
141
|
+
<span class="sd"> Display group used by the GUI and runtime summaries.</span>
|
|
142
142
|
<span class="sd"> name : str | None</span>
|
|
143
143
|
<span class="sd"> Stable flow identifier. When omitted in a flow module, the module loader</span>
|
|
144
144
|
<span class="sd"> can derive it from the module name.</span>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
|
|
15
15
|
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
|
16
|
-
<script src="../../../_static/documentation_options.js?v=
|
|
16
|
+
<script src="../../../_static/documentation_options.js?v=6c02275b"></script>
|
|
17
17
|
<script src="../../../_static/doctools.js?v=fd6eb6e6"></script>
|
|
18
18
|
<script src="../../../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
|
19
19
|
<script src="../../../_static/js/theme.js"></script>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
|
|
15
15
|
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
|
16
|
-
<script src="../../../_static/documentation_options.js?v=
|
|
16
|
+
<script src="../../../_static/documentation_options.js?v=6c02275b"></script>
|
|
17
17
|
<script src="../../../_static/doctools.js?v=fd6eb6e6"></script>
|
|
18
18
|
<script src="../../../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
|
19
19
|
<script src="../../../_static/js/theme.js"></script>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
|
|
15
15
|
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
|
16
|
-
<script src="../../../../_static/documentation_options.js?v=
|
|
16
|
+
<script src="../../../../_static/documentation_options.js?v=6c02275b"></script>
|
|
17
17
|
<script src="../../../../_static/doctools.js?v=fd6eb6e6"></script>
|
|
18
18
|
<script src="../../../../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
|
19
19
|
<script src="../../../../_static/js/theme.js"></script>
|