py-data-engine 0.3.10__tar.gz → 0.3.12__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/PKG-INFO +240 -0
- py_data_engine-0.3.12/README.md +166 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/pyproject.toml +55 -56
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/setup.py +1 -32
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/application/control.py +9 -6
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/application/runtime.py +10 -2
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/authoring/flow.py +6 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/core/flow.py +43 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/core/primitives.py +119 -12
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/authoring/flow.html +7 -2
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/core/flow.html +47 -2
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/core/model.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/core/primitives.html +133 -14
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/helpers/duckdb/_dimensions.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/helpers/duckdb/_maintenance.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/helpers/duckdb/_read.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/helpers/duckdb/_replace.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/helpers/excel.html +2 -2
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/helpers/polars.html +238 -70
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/helpers/schema.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/hosts/scheduler.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/runtime/engine.html +5 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/runtime/execution/grouped.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/runtime/execution/single.html +16 -2
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/runtime/file_watch.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/runtime/result_cleanup.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/runtime/stop.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/services/daemon.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/services/daemon_state.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/services/flow_catalog.html +2 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/services/flow_execution.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/services/ledger.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/services/logs.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/services/runtime_binding.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/services/runtime_execution.html +9 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/services/runtime_history.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/services/settings.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/services/shared_state.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/services/theme.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/services/workspace_provisioning.html +3 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/data_engine/services/workspaces.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_modules/index.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/guides/app-runtime-and-workspaces.md.txt +2 -2
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/guides/flow-context.md.txt +66 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/guides/flow-methods.md.txt +60 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/guides/getting-started.md.txt +4 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/guides/polars-helpers.md.txt +30 -9
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/guides/project-inventory.md.txt +173 -104
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/guides/project-map.md.txt +15 -15
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/guides/recipes.md.txt +2 -2
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/documentation_options.js +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/api.html +474 -78
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/genindex.html +56 -7
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/guides/app-runtime-and-workspaces.html +3 -3
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/guides/authoring-flow-modules.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/guides/configuring-flows.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/guides/core-concepts.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/guides/database-methods.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/guides/duckdb-helpers.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/guides/excel-helpers.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/guides/flow-context.html +63 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/guides/flow-methods.html +58 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/guides/getting-started.html +5 -2
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/guides/polars-helpers.html +29 -10
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/guides/project-inventory.html +279 -201
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/guides/project-map.html +34 -34
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/guides/recipes.html +3 -3
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/index.html +4 -1
- py_data_engine-0.3.12/src/data_engine/docs/html/objects.inv +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/py-modindex.html +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/search.html +1 -1
- py_data_engine-0.3.12/src/data_engine/docs/html/searchindex.js +1 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/guides/app-runtime-and-workspaces.md +2 -2
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/guides/flow-context.md +66 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/guides/flow-methods.md +60 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/guides/getting-started.md +4 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/guides/polars-helpers.md +30 -9
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/guides/project-inventory.md +173 -104
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/guides/project-map.md +15 -15
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/guides/recipes.md +2 -2
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/catalog.py +2 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/helpers/__init__.py +2 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/helpers/excel.py +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/helpers/polars.py +225 -66
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/client.py +10 -2
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/commands.py +2 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/runtime_commands.py +24 -8
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/platform/identity.py +1 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/platform/paths.py +6 -5
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/platform/processes.py +8 -3
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/platform/workspace_models.py +2 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/engine.py +4 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/execution/context.py +18 -2
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/execution/single.py +15 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/flow_catalog.py +1 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/runtime_execution.py +8 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/workspace_provisioning.py +2 -0
- py_data_engine-0.3.12/src/data_engine/ui/cli/__init__.py +31 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/cli/app.py +5 -5
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/cli/commands_doctor.py +1 -3
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/cli/commands_start.py +0 -48
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/cli/commands_workspace.py +2 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/cli/parser.py +2 -6
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/controllers/runtime.py +9 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/dialogs/__init__.py +2 -0
- py_data_engine-0.3.12/src/data_engine/ui/gui/dialogs/inputs.py +100 -0
- py_data_engine-0.3.12/src/data_engine/ui/tui/app.py +534 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/tui/theme.py +92 -4
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/tui/widgets.py +11 -1
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/views/models.py +3 -0
- py_data_engine-0.3.12/src/py_data_engine.egg-info/PKG-INFO +240 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/py_data_engine.egg-info/SOURCES.txt +1 -7
- py_data_engine-0.3.12/src/py_data_engine.egg-info/requires.txt +59 -0
- py_data_engine-0.3.10/PKG-INFO +0 -450
- py_data_engine-0.3.10/README.md +0 -378
- py_data_engine-0.3.10/src/data_engine/docs/html/objects.inv +0 -0
- py_data_engine-0.3.10/src/data_engine/docs/html/searchindex.js +0 -1
- py_data_engine-0.3.10/src/data_engine/ui/cli/__init__.py +0 -19
- py_data_engine-0.3.10/src/data_engine/ui/egui/__init__.py +0 -51
- py_data_engine-0.3.10/src/data_engine/ui/egui/_data_engine_egui.pyd +0 -0
- py_data_engine-0.3.10/src/data_engine/ui/egui/app.py +0 -3
- py_data_engine-0.3.10/src/data_engine/ui/egui/bootstrap.py +0 -47
- py_data_engine-0.3.10/src/data_engine/ui/egui/home_state.py +0 -392
- py_data_engine-0.3.10/src/data_engine/ui/egui/launcher.py +0 -29
- py_data_engine-0.3.10/src/data_engine/ui/egui/native.py +0 -45
- py_data_engine-0.3.10/src/data_engine/ui/tui/app.py +0 -237
- py_data_engine-0.3.10/src/py_data_engine.egg-info/PKG-INFO +0 -450
- py_data_engine-0.3.10/src/py_data_engine.egg-info/requires.txt +0 -57
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/LICENSE +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/MANIFEST.in +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/setup.cfg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/application/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/application/actions.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/application/catalog.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/application/details.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/application/workspace.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/authoring/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/authoring/services.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/core/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/core/helpers.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/core/model.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/devtools/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/devtools/project_ast_map.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/devtools/smoke_data.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/api.rst.txt +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/guides/authoring-flow-modules.md.txt +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/guides/configuring-flows.md.txt +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/guides/core-concepts.md.txt +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/guides/database-methods.md.txt +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/guides/duckdb-helpers.md.txt +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/guides/excel-helpers.md.txt +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_sources/index.rst.txt +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/base-stemmer.js +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/basic.css +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/badge_only.css +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/lato-bold-italic.woff +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/lato-bold.woff +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/lato-bold.woff2 +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/lato-normal-italic.woff +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/lato-normal.woff +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/fonts/lato-normal.woff2 +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/css/theme.css +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/custom.css +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/doctools.js +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/english-stemmer.js +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/file.png +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-bold.eot +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-bold.ttf +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-bold.woff +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-italic.eot +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-italic.ttf +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-italic.woff +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-regular.eot +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-regular.ttf +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-regular.woff +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/jquery.js +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/js/badge_only.js +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/js/theme.js +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/js/versions.js +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/language_data.js +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/minus.png +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/plus.png +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/pygments.css +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/searchtools.js +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/html/_static/sphinx_highlight.js +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/_static/custom.css +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/api.rst +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/conf.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/guides/authoring-flow-modules.md +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/guides/configuring-flows.md +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/guides/core-concepts.md +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/guides/database-methods.md +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/guides/duckdb-helpers.md +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/guides/excel-helpers.md +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/docs/sphinx_source/index.rst +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/actions.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/debug_artifacts.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/details.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/diagnostics.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/errors.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/inspection.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/logs.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/operations.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/operator.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/runs.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/runtime.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/source_state.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/support.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/time.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/domain/workspace.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/flow_modules/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/flow_modules/flow_module_compiler.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/flow_modules/flow_module_loader.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/helpers/duckdb/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/helpers/duckdb/_common.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/helpers/duckdb/_dimensions.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/helpers/duckdb/_maintenance.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/helpers/duckdb/_read.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/helpers/duckdb/_replace.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/helpers/schema.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/app.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/bootstrap.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/composition.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/constants.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/entrypoints.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/lifecycle.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/manager.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/ownership.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/runtime_control.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/runtime_events.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/runtime_ledger.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/server.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/shared_state.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/daemon/state_sync.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/hosts/scheduler.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/platform/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/platform/instrumentation.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/platform/interpreters.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/platform/local_settings.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/platform/theme.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/platform/workspace_policy.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/execution/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/execution/app.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/execution/continuous.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/execution/grouped.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/execution/logging.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/execution/polling.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/execution/runner.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/file_watch.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/ledger_models.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/result_cleanup.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/runtime_cache_store.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/runtime_control_store.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/runtime_db.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/shared_state.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/sqlite_store.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/runtime/stop.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/daemon.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/daemon_state.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/debug_artifacts.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/flow_execution.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/ledger.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/logs.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/operator_commands.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/operator_queries.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/reset.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/runtime_binding.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/runtime_history.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/runtime_io.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/runtime_ports.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/runtime_state.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/settings.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/shared_state.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/theme.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/workspace_io.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/services/workspaces.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/cli/commands_run.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/cli/dependencies.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/app.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/app_binding.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/bootstrap.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/cache_models.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/control_support.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/controllers/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/controllers/flows.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/dialogs/messages.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/dialogs/previews.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/helpers/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/helpers/inspection.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/helpers/lifecycle.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/helpers/scroll.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/helpers/theming.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/check-mark-dark.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/check-mark-light.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/dark_light.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/dataframe.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/debug.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/documentation.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/down-chevron-dark.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/down-chevron-light.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/failed.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/group.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/home.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/manual.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/poll.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/schedule.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/select-all-all.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/select-all-none.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/select-all-partial.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/settings.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/sort-ascending.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/sort-descending.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/started.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/success.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/up-chevron-dark.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/up-chevron-light.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons/view-log.svg +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/icons.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/launcher.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/presenters/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/presenters/dataframes.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/presenters/debug.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/presenters/docs.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/presenters/logs.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/presenters/runtime_projection.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/presenters/sidebar.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/presenters/steps.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/presenters/workspace.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/presenters/workspace_binding.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/presenters/workspace_settings.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/preview_models.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/render_support.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/rendering/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/rendering/artifacts.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/rendering/icons.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/rendering/preview_filters.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/runtime.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/state_support.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/support.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/surface.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/theme.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/widgets/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/widgets/config.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/widgets/log_list.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/widgets/logs.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/widgets/panels.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/widgets/sidebar.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/gui/widgets/steps.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/tui/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/tui/app_binding.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/tui/bootstrap.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/tui/controllers/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/tui/controllers/flows.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/tui/controllers/runtime.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/tui/runtime.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/tui/state_support.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/ui/tui/support.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/views/__init__.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/views/actions.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/views/artifacts.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/views/flow_display.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/views/logs.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/views/presentation.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/views/runs.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/views/selection.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/views/state.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/views/status.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/data_engine/views/text.py +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/py_data_engine.egg-info/dependency_links.txt +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/py_data_engine.egg-info/entry_points.txt +0 -0
- {py_data_engine-0.3.10 → py_data_engine-0.3.12}/src/py_data_engine.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: py-data-engine
|
|
3
|
+
Version: 0.3.12
|
|
4
|
+
Summary: GUI orchestrator for python-based dataframe transform pipelines.
|
|
5
|
+
Author: Data Engine contributors
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/bj-data-eng/data-engine
|
|
8
|
+
Project-URL: Repository, https://github.com/bj-data-eng/data-engine
|
|
9
|
+
Project-URL: Issues, https://github.com/bj-data-eng/data-engine/issues
|
|
10
|
+
Keywords: duckdb,excel,parquet,flow,polars,notebook
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
15
|
+
Classifier: Topic :: Database
|
|
16
|
+
Classifier: Topic :: Office/Business :: Financial :: Spreadsheet
|
|
17
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
18
|
+
Requires-Python: >=3.14
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
License-File: LICENSE
|
|
21
|
+
Requires-Dist: APScheduler==3.11.2
|
|
22
|
+
Requires-Dist: duckdb==1.5.1
|
|
23
|
+
Requires-Dist: fastexcel==0.19.0
|
|
24
|
+
Requires-Dist: numpy==2.4.4
|
|
25
|
+
Requires-Dist: openpyxl==3.1.5
|
|
26
|
+
Requires-Dist: polars==1.39.3
|
|
27
|
+
Requires-Dist: pyarrow==23.0.1
|
|
28
|
+
Requires-Dist: PySide6==6.11.0
|
|
29
|
+
Requires-Dist: textual==8.2.3
|
|
30
|
+
Requires-Dist: xlsxwriter==3.2.9
|
|
31
|
+
Provides-Extra: polars-lts
|
|
32
|
+
Requires-Dist: polars-lts-cpu==1.33.1; extra == "polars-lts"
|
|
33
|
+
Provides-Extra: synthetic
|
|
34
|
+
Requires-Dist: openpyxl==3.1.5; extra == "synthetic"
|
|
35
|
+
Requires-Dist: pandas==3.0.2; extra == "synthetic"
|
|
36
|
+
Provides-Extra: notebook
|
|
37
|
+
Requires-Dist: ipykernel==7.2.0; extra == "notebook"
|
|
38
|
+
Requires-Dist: ipython==9.12.0; extra == "notebook"
|
|
39
|
+
Requires-Dist: jupyterlab==4.5.7; extra == "notebook"
|
|
40
|
+
Requires-Dist: notebook==7.5.6; extra == "notebook"
|
|
41
|
+
Provides-Extra: docs
|
|
42
|
+
Requires-Dist: myst-parser==5.0.0; extra == "docs"
|
|
43
|
+
Requires-Dist: Sphinx==9.1.0; extra == "docs"
|
|
44
|
+
Requires-Dist: sphinx_rtd_theme==3.1.0; extra == "docs"
|
|
45
|
+
Provides-Extra: package
|
|
46
|
+
Requires-Dist: build==1.4.2; extra == "package"
|
|
47
|
+
Requires-Dist: pyinstaller==6.19.0; extra == "package"
|
|
48
|
+
Requires-Dist: twine==6.2.0; extra == "package"
|
|
49
|
+
Provides-Extra: test
|
|
50
|
+
Requires-Dist: openpyxl==3.1.5; extra == "test"
|
|
51
|
+
Requires-Dist: pandas==3.0.2; extra == "test"
|
|
52
|
+
Requires-Dist: pydocstyle==6.3.0; extra == "test"
|
|
53
|
+
Requires-Dist: pytest==9.0.3; extra == "test"
|
|
54
|
+
Requires-Dist: pytest-cov==7.1.0; extra == "test"
|
|
55
|
+
Provides-Extra: dev
|
|
56
|
+
Requires-Dist: ipykernel==7.2.0; extra == "dev"
|
|
57
|
+
Requires-Dist: ipython==9.12.0; extra == "dev"
|
|
58
|
+
Requires-Dist: jupyterlab==4.5.7; extra == "dev"
|
|
59
|
+
Requires-Dist: myst-parser==5.0.0; extra == "dev"
|
|
60
|
+
Requires-Dist: notebook==7.5.6; extra == "dev"
|
|
61
|
+
Requires-Dist: numpy==2.4.4; extra == "dev"
|
|
62
|
+
Requires-Dist: openpyxl==3.1.5; extra == "dev"
|
|
63
|
+
Requires-Dist: pandas==3.0.2; extra == "dev"
|
|
64
|
+
Requires-Dist: pydoclint==0.8.3; extra == "dev"
|
|
65
|
+
Requires-Dist: pydocstyle==6.3.0; extra == "dev"
|
|
66
|
+
Requires-Dist: pyinstaller==6.19.0; extra == "dev"
|
|
67
|
+
Requires-Dist: pytest==9.0.3; extra == "dev"
|
|
68
|
+
Requires-Dist: pytest-cov==7.1.0; extra == "dev"
|
|
69
|
+
Requires-Dist: ruff==0.15.10; extra == "dev"
|
|
70
|
+
Requires-Dist: Sphinx==9.1.0; extra == "dev"
|
|
71
|
+
Requires-Dist: sphinx_rtd_theme==3.1.0; extra == "dev"
|
|
72
|
+
Requires-Dist: viztracer==1.1.1; extra == "dev"
|
|
73
|
+
Dynamic: license-file
|
|
74
|
+
|
|
75
|
+
# Data Engine
|
|
76
|
+
|
|
77
|
+
Data Engine is a GUI orchestrator for Python dataframe workflows. It lets you
|
|
78
|
+
author flows as plain Python modules, run them manually or automatically, and
|
|
79
|
+
inspect parquet-first outputs from the desktop app.
|
|
80
|
+
|
|
81
|
+
The runtime is built around:
|
|
82
|
+
|
|
83
|
+
- workspace-based flow discovery
|
|
84
|
+
- manual, poll, and schedule execution modes
|
|
85
|
+
- Polars and DuckDB-friendly flow steps
|
|
86
|
+
- mirrored output paths for source-driven runs
|
|
87
|
+
- saved run, log, and dataframe inspection state
|
|
88
|
+
- desktop and terminal operator surfaces
|
|
89
|
+
|
|
90
|
+
## Install
|
|
91
|
+
|
|
92
|
+
Use the installer for your environment:
|
|
93
|
+
|
|
94
|
+
- macOS: [INSTALL/INSTALL MAC.command](INSTALL/INSTALL%20MAC.command)
|
|
95
|
+
- 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
|
+
|
|
98
|
+
For local development:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
python -m pip install --constraint requirements/constraints.txt -e ".[dev]"
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
For a published package install:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
python -m pip install py-data-engine
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Data Engine requires Python `>=3.14`.
|
|
111
|
+
|
|
112
|
+
Dependency pinning, constrained installs, and hash-locked runtime installs are
|
|
113
|
+
documented in [SECURITY.md](SECURITY.md).
|
|
114
|
+
|
|
115
|
+
## Start
|
|
116
|
+
|
|
117
|
+
Desktop GUI:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
data-engine start gui
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Terminal UI:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
data-engine start tui
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Headless commands:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
data-engine list
|
|
133
|
+
data-engine show example_summary
|
|
134
|
+
data-engine run --once example_summary
|
|
135
|
+
data-engine run
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Minimal Flow
|
|
139
|
+
|
|
140
|
+
```python
|
|
141
|
+
from data_engine import Flow
|
|
142
|
+
import polars as pl
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def read_docs(context):
|
|
146
|
+
return pl.read_excel(context.source.path)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def keep_open(context):
|
|
150
|
+
return context.current.filter(pl.col("status") == "OPEN")
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def write_parquet(context):
|
|
154
|
+
output = context.mirror.with_suffix(".parquet")
|
|
155
|
+
context.current.write_parquet(output)
|
|
156
|
+
return output
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def build():
|
|
160
|
+
return (
|
|
161
|
+
Flow(group="Docs")
|
|
162
|
+
.watch(
|
|
163
|
+
mode="poll",
|
|
164
|
+
source="../../../example_data/Input/docs_flat",
|
|
165
|
+
interval="5s",
|
|
166
|
+
extensions=[".xlsx", ".xls", ".xlsm"],
|
|
167
|
+
settle=1,
|
|
168
|
+
)
|
|
169
|
+
.mirror(root="../../../example_data/Output/example_mirror")
|
|
170
|
+
.step(read_docs, save_as="raw_df")
|
|
171
|
+
.step(keep_open, use="raw_df", save_as="filtered_df")
|
|
172
|
+
.step(write_parquet, use="filtered_df")
|
|
173
|
+
)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Each authored flow module exports `build() -> Flow`. The module filename is the
|
|
177
|
+
flow identity.
|
|
178
|
+
|
|
179
|
+
## Workspaces
|
|
180
|
+
|
|
181
|
+
Data Engine discovers workspaces from a collection root. Each workspace keeps
|
|
182
|
+
authored flows under:
|
|
183
|
+
|
|
184
|
+
```text
|
|
185
|
+
workspaces/<workspace_id>/flow_modules/
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Shared workspace state lives under:
|
|
189
|
+
|
|
190
|
+
```text
|
|
191
|
+
workspaces/<workspace_id>/.workspace_state/
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Machine-local runtime artifacts are stored outside the authored workspace.
|
|
195
|
+
|
|
196
|
+
## Useful APIs
|
|
197
|
+
|
|
198
|
+
```python
|
|
199
|
+
from data_engine import Flow, FlowContext, discover_flows, load_flow, run
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Common `Flow` methods:
|
|
203
|
+
|
|
204
|
+
- `.watch(...)`
|
|
205
|
+
- `.mirror(...)`
|
|
206
|
+
- `.date_range_input(...)`
|
|
207
|
+
- `.step(...)`
|
|
208
|
+
- `.collect(...)`
|
|
209
|
+
- `.map(...)`
|
|
210
|
+
- `.step_each(...)`
|
|
211
|
+
- `.preview(...)`
|
|
212
|
+
- `.run_once()`
|
|
213
|
+
- `.run()`
|
|
214
|
+
|
|
215
|
+
Common `FlowContext` values:
|
|
216
|
+
|
|
217
|
+
- `context.source`
|
|
218
|
+
- `context.mirror`
|
|
219
|
+
- `context.current`
|
|
220
|
+
- `context.objects`
|
|
221
|
+
- `context.metadata`
|
|
222
|
+
- `context.database("analytics.duckdb")`
|
|
223
|
+
- `context.template("reports/base.xlsx")`
|
|
224
|
+
- `context.debug`
|
|
225
|
+
|
|
226
|
+
The full authoring guide and helper reference live in
|
|
227
|
+
`src/data_engine/docs/sphinx_source/guides/`.
|
|
228
|
+
|
|
229
|
+
## Testing
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
python -m pytest -q
|
|
233
|
+
python -m build
|
|
234
|
+
python -m twine check dist/*
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## Status
|
|
238
|
+
|
|
239
|
+
This project is pre-alpha. Internal architecture is still moving quickly, and
|
|
240
|
+
backwards compatibility is not a current goal.
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Data Engine
|
|
2
|
+
|
|
3
|
+
Data Engine is a GUI orchestrator for Python dataframe workflows. It lets you
|
|
4
|
+
author flows as plain Python modules, run them manually or automatically, and
|
|
5
|
+
inspect parquet-first outputs from the desktop app.
|
|
6
|
+
|
|
7
|
+
The runtime is built around:
|
|
8
|
+
|
|
9
|
+
- workspace-based flow discovery
|
|
10
|
+
- manual, poll, and schedule execution modes
|
|
11
|
+
- Polars and DuckDB-friendly flow steps
|
|
12
|
+
- mirrored output paths for source-driven runs
|
|
13
|
+
- saved run, log, and dataframe inspection state
|
|
14
|
+
- desktop and terminal operator surfaces
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
Use the installer for your environment:
|
|
19
|
+
|
|
20
|
+
- macOS: [INSTALL/INSTALL MAC.command](INSTALL/INSTALL%20MAC.command)
|
|
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
|
+
|
|
24
|
+
For local development:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
python -m pip install --constraint requirements/constraints.txt -e ".[dev]"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
For a published package install:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
python -m pip install py-data-engine
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Data Engine requires Python `>=3.14`.
|
|
37
|
+
|
|
38
|
+
Dependency pinning, constrained installs, and hash-locked runtime installs are
|
|
39
|
+
documented in [SECURITY.md](SECURITY.md).
|
|
40
|
+
|
|
41
|
+
## Start
|
|
42
|
+
|
|
43
|
+
Desktop GUI:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
data-engine start gui
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Terminal UI:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
data-engine start tui
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Headless commands:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
data-engine list
|
|
59
|
+
data-engine show example_summary
|
|
60
|
+
data-engine run --once example_summary
|
|
61
|
+
data-engine run
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Minimal Flow
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
from data_engine import Flow
|
|
68
|
+
import polars as pl
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def read_docs(context):
|
|
72
|
+
return pl.read_excel(context.source.path)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def keep_open(context):
|
|
76
|
+
return context.current.filter(pl.col("status") == "OPEN")
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def write_parquet(context):
|
|
80
|
+
output = context.mirror.with_suffix(".parquet")
|
|
81
|
+
context.current.write_parquet(output)
|
|
82
|
+
return output
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def build():
|
|
86
|
+
return (
|
|
87
|
+
Flow(group="Docs")
|
|
88
|
+
.watch(
|
|
89
|
+
mode="poll",
|
|
90
|
+
source="../../../example_data/Input/docs_flat",
|
|
91
|
+
interval="5s",
|
|
92
|
+
extensions=[".xlsx", ".xls", ".xlsm"],
|
|
93
|
+
settle=1,
|
|
94
|
+
)
|
|
95
|
+
.mirror(root="../../../example_data/Output/example_mirror")
|
|
96
|
+
.step(read_docs, save_as="raw_df")
|
|
97
|
+
.step(keep_open, use="raw_df", save_as="filtered_df")
|
|
98
|
+
.step(write_parquet, use="filtered_df")
|
|
99
|
+
)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Each authored flow module exports `build() -> Flow`. The module filename is the
|
|
103
|
+
flow identity.
|
|
104
|
+
|
|
105
|
+
## Workspaces
|
|
106
|
+
|
|
107
|
+
Data Engine discovers workspaces from a collection root. Each workspace keeps
|
|
108
|
+
authored flows under:
|
|
109
|
+
|
|
110
|
+
```text
|
|
111
|
+
workspaces/<workspace_id>/flow_modules/
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Shared workspace state lives under:
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
workspaces/<workspace_id>/.workspace_state/
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Machine-local runtime artifacts are stored outside the authored workspace.
|
|
121
|
+
|
|
122
|
+
## Useful APIs
|
|
123
|
+
|
|
124
|
+
```python
|
|
125
|
+
from data_engine import Flow, FlowContext, discover_flows, load_flow, run
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Common `Flow` methods:
|
|
129
|
+
|
|
130
|
+
- `.watch(...)`
|
|
131
|
+
- `.mirror(...)`
|
|
132
|
+
- `.date_range_input(...)`
|
|
133
|
+
- `.step(...)`
|
|
134
|
+
- `.collect(...)`
|
|
135
|
+
- `.map(...)`
|
|
136
|
+
- `.step_each(...)`
|
|
137
|
+
- `.preview(...)`
|
|
138
|
+
- `.run_once()`
|
|
139
|
+
- `.run()`
|
|
140
|
+
|
|
141
|
+
Common `FlowContext` values:
|
|
142
|
+
|
|
143
|
+
- `context.source`
|
|
144
|
+
- `context.mirror`
|
|
145
|
+
- `context.current`
|
|
146
|
+
- `context.objects`
|
|
147
|
+
- `context.metadata`
|
|
148
|
+
- `context.database("analytics.duckdb")`
|
|
149
|
+
- `context.template("reports/base.xlsx")`
|
|
150
|
+
- `context.debug`
|
|
151
|
+
|
|
152
|
+
The full authoring guide and helper reference live in
|
|
153
|
+
`src/data_engine/docs/sphinx_source/guides/`.
|
|
154
|
+
|
|
155
|
+
## Testing
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
python -m pytest -q
|
|
159
|
+
python -m build
|
|
160
|
+
python -m twine check dist/*
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Status
|
|
164
|
+
|
|
165
|
+
This project is pre-alpha. Internal architecture is still moving quickly, and
|
|
166
|
+
backwards compatibility is not a current goal.
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
[build-system]
|
|
2
2
|
requires = [
|
|
3
|
-
"setuptools
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"numpy
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"Sphinx
|
|
11
|
-
"sphinx_rtd_theme
|
|
12
|
-
"xlsxwriter
|
|
3
|
+
"setuptools==82.0.1",
|
|
4
|
+
"APScheduler==3.11.2",
|
|
5
|
+
"duckdb==1.5.1",
|
|
6
|
+
"myst-parser==5.0.0",
|
|
7
|
+
"numpy==2.4.4",
|
|
8
|
+
"openpyxl==3.1.5",
|
|
9
|
+
"polars==1.39.3",
|
|
10
|
+
"Sphinx==9.1.0",
|
|
11
|
+
"sphinx_rtd_theme==3.1.0",
|
|
12
|
+
"xlsxwriter==3.2.9",
|
|
13
13
|
]
|
|
14
14
|
build-backend = "setuptools.build_meta"
|
|
15
15
|
|
|
@@ -35,16 +35,16 @@ classifiers = [
|
|
|
35
35
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
36
36
|
]
|
|
37
37
|
dependencies = [
|
|
38
|
-
"APScheduler
|
|
39
|
-
"duckdb
|
|
40
|
-
"fastexcel
|
|
41
|
-
"numpy
|
|
42
|
-
"openpyxl
|
|
43
|
-
"polars
|
|
44
|
-
"pyarrow
|
|
45
|
-
"PySide6
|
|
46
|
-
"textual
|
|
47
|
-
"xlsxwriter
|
|
38
|
+
"APScheduler==3.11.2",
|
|
39
|
+
"duckdb==1.5.1",
|
|
40
|
+
"fastexcel==0.19.0",
|
|
41
|
+
"numpy==2.4.4",
|
|
42
|
+
"openpyxl==3.1.5",
|
|
43
|
+
"polars==1.39.3",
|
|
44
|
+
"pyarrow==23.0.1",
|
|
45
|
+
"PySide6==6.11.0",
|
|
46
|
+
"textual==8.2.3",
|
|
47
|
+
"xlsxwriter==3.2.9",
|
|
48
48
|
]
|
|
49
49
|
|
|
50
50
|
[project.urls]
|
|
@@ -57,51 +57,53 @@ data-engine = "data_engine.ui.cli.app:main"
|
|
|
57
57
|
|
|
58
58
|
[project.optional-dependencies]
|
|
59
59
|
polars-lts = [
|
|
60
|
-
"polars-lts-cpu
|
|
60
|
+
"polars-lts-cpu==1.33.1",
|
|
61
61
|
]
|
|
62
62
|
synthetic = [
|
|
63
|
-
"openpyxl
|
|
64
|
-
"pandas
|
|
63
|
+
"openpyxl==3.1.5",
|
|
64
|
+
"pandas==3.0.2",
|
|
65
65
|
]
|
|
66
66
|
notebook = [
|
|
67
|
-
"ipykernel
|
|
68
|
-
"ipython
|
|
69
|
-
"jupyterlab
|
|
70
|
-
"notebook
|
|
67
|
+
"ipykernel==7.2.0",
|
|
68
|
+
"ipython==9.12.0",
|
|
69
|
+
"jupyterlab==4.5.7",
|
|
70
|
+
"notebook==7.5.6",
|
|
71
71
|
]
|
|
72
72
|
docs = [
|
|
73
|
-
"myst-parser
|
|
74
|
-
"Sphinx
|
|
75
|
-
"sphinx_rtd_theme
|
|
73
|
+
"myst-parser==5.0.0",
|
|
74
|
+
"Sphinx==9.1.0",
|
|
75
|
+
"sphinx_rtd_theme==3.1.0",
|
|
76
76
|
]
|
|
77
77
|
package = [
|
|
78
|
-
"
|
|
78
|
+
"build==1.4.2",
|
|
79
|
+
"pyinstaller==6.19.0",
|
|
80
|
+
"twine==6.2.0",
|
|
79
81
|
]
|
|
80
82
|
test = [
|
|
81
|
-
"openpyxl
|
|
82
|
-
"pandas
|
|
83
|
-
"pydocstyle
|
|
84
|
-
"pytest
|
|
85
|
-
"pytest-cov
|
|
83
|
+
"openpyxl==3.1.5",
|
|
84
|
+
"pandas==3.0.2",
|
|
85
|
+
"pydocstyle==6.3.0",
|
|
86
|
+
"pytest==9.0.3",
|
|
87
|
+
"pytest-cov==7.1.0",
|
|
86
88
|
]
|
|
87
89
|
dev = [
|
|
88
|
-
"ipykernel
|
|
89
|
-
"ipython
|
|
90
|
-
"jupyterlab
|
|
91
|
-
"myst-parser
|
|
92
|
-
"notebook
|
|
93
|
-
"numpy
|
|
94
|
-
"openpyxl
|
|
95
|
-
"pandas
|
|
96
|
-
"pydoclint
|
|
97
|
-
"pydocstyle
|
|
98
|
-
"pyinstaller
|
|
99
|
-
"pytest
|
|
100
|
-
"pytest-cov
|
|
101
|
-
"ruff
|
|
102
|
-
"Sphinx
|
|
103
|
-
"sphinx_rtd_theme
|
|
104
|
-
"viztracer
|
|
90
|
+
"ipykernel==7.2.0",
|
|
91
|
+
"ipython==9.12.0",
|
|
92
|
+
"jupyterlab==4.5.7",
|
|
93
|
+
"myst-parser==5.0.0",
|
|
94
|
+
"notebook==7.5.6",
|
|
95
|
+
"numpy==2.4.4",
|
|
96
|
+
"openpyxl==3.1.5",
|
|
97
|
+
"pandas==3.0.2",
|
|
98
|
+
"pydoclint==0.8.3",
|
|
99
|
+
"pydocstyle==6.3.0",
|
|
100
|
+
"pyinstaller==6.19.0",
|
|
101
|
+
"pytest==9.0.3",
|
|
102
|
+
"pytest-cov==7.1.0",
|
|
103
|
+
"ruff==0.15.10",
|
|
104
|
+
"Sphinx==9.1.0",
|
|
105
|
+
"sphinx_rtd_theme==3.1.0",
|
|
106
|
+
"viztracer==1.1.1",
|
|
105
107
|
]
|
|
106
108
|
|
|
107
109
|
[tool.setuptools]
|
|
@@ -115,9 +117,6 @@ include = ["data_engine*"]
|
|
|
115
117
|
[tool.setuptools.package-data]
|
|
116
118
|
data_engine = [
|
|
117
119
|
"ui/gui/icons/*.svg",
|
|
118
|
-
"ui/egui/*.pyd",
|
|
119
|
-
"ui/egui/*.so",
|
|
120
|
-
"ui/egui/*.dylib",
|
|
121
120
|
"docs/sphinx_source/conf.py",
|
|
122
121
|
"docs/sphinx_source/*.rst",
|
|
123
122
|
"docs/sphinx_source/guides/*.md",
|
|
@@ -5,7 +5,6 @@ import sys
|
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
|
|
7
7
|
from setuptools import setup
|
|
8
|
-
from setuptools.command.bdist_wheel import bdist_wheel as _bdist_wheel
|
|
9
8
|
from setuptools.command.build_py import build_py as _build_py
|
|
10
9
|
from setuptools.command.sdist import sdist as _sdist
|
|
11
10
|
|
|
@@ -14,14 +13,6 @@ ROOT = Path(__file__).resolve().parent
|
|
|
14
13
|
DOCS_SOURCE_DIR = ROOT / "src" / "data_engine" / "docs" / "sphinx_source"
|
|
15
14
|
DOCS_OUTPUT_DIR = ROOT / "src" / "data_engine" / "docs" / "html"
|
|
16
15
|
PROJECT_AST_MAP_SCRIPT = ROOT / "src" / "data_engine" / "devtools" / "project_ast_map.py"
|
|
17
|
-
EGUI_PACKAGE_DIR = ROOT / "src" / "data_engine" / "ui" / "egui"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def _vendored_native_modules() -> list[Path]:
|
|
21
|
-
native_modules: list[Path] = []
|
|
22
|
-
for suffix in (".pyd", ".so", ".dylib"):
|
|
23
|
-
native_modules.extend(EGUI_PACKAGE_DIR.glob(f"_data_engine_egui*{suffix}"))
|
|
24
|
-
return sorted(native_modules)
|
|
25
16
|
|
|
26
17
|
|
|
27
18
|
def _build_packaged_docs() -> None:
|
|
@@ -63,26 +54,4 @@ class sdist(_sdist):
|
|
|
63
54
|
super().run()
|
|
64
55
|
|
|
65
56
|
|
|
66
|
-
|
|
67
|
-
def finalize_options(self) -> None:
|
|
68
|
-
super().finalize_options()
|
|
69
|
-
if _vendored_native_modules():
|
|
70
|
-
self.root_is_pure = False
|
|
71
|
-
|
|
72
|
-
def get_tag(self) -> tuple[str, str, str]:
|
|
73
|
-
python_tag, abi_tag, platform_tag = super().get_tag()
|
|
74
|
-
if _vendored_native_modules():
|
|
75
|
-
python_tag = f"cp{sys.version_info.major}{sys.version_info.minor}"
|
|
76
|
-
abi_tag = "abi3"
|
|
77
|
-
return python_tag, abi_tag, platform_tag
|
|
78
|
-
|
|
79
|
-
def run(self) -> None:
|
|
80
|
-
if sys.platform == "win32" and not _vendored_native_modules():
|
|
81
|
-
raise RuntimeError(
|
|
82
|
-
"Windows wheel build requires the vendored egui native module. "
|
|
83
|
-
"Run scripts/build_egui_native.py first."
|
|
84
|
-
)
|
|
85
|
-
super().run()
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
setup(cmdclass={"bdist_wheel": bdist_wheel, "build_py": build_py, "sdist": sdist})
|
|
57
|
+
setup(cmdclass={"build_py": build_py, "sdist": sdist})
|
|
@@ -55,6 +55,7 @@ class OperatorControlApplication:
|
|
|
55
55
|
selected_flow_valid: bool,
|
|
56
56
|
blocked_status_text: str,
|
|
57
57
|
timeout: float = 2.0,
|
|
58
|
+
inputs: dict[str, object] | None = None,
|
|
58
59
|
) -> OperatorActionResult:
|
|
59
60
|
"""Validate and request one manual run for the selected flow."""
|
|
60
61
|
if not authored_workspace_is_available(paths):
|
|
@@ -76,12 +77,14 @@ class OperatorControlApplication:
|
|
|
76
77
|
return OperatorActionResult(requested=False)
|
|
77
78
|
if not action_context.control_available:
|
|
78
79
|
return OperatorActionResult(requested=False, status_text=blocked_status_text)
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
run_kwargs: dict[str, object] = {
|
|
81
|
+
"name": selected_flow_name,
|
|
82
|
+
"wait": False,
|
|
83
|
+
"timeout": timeout,
|
|
84
|
+
}
|
|
85
|
+
if inputs is not None:
|
|
86
|
+
run_kwargs["inputs"] = inputs
|
|
87
|
+
result = self.runtime_application.run_flow(paths, **run_kwargs)
|
|
85
88
|
if not result.ok:
|
|
86
89
|
return OperatorActionResult(
|
|
87
90
|
requested=False,
|
|
@@ -242,13 +242,21 @@ class RuntimeApplication:
|
|
|
242
242
|
signature=signature,
|
|
243
243
|
)
|
|
244
244
|
|
|
245
|
-
def run_flow(
|
|
245
|
+
def run_flow(
|
|
246
|
+
self,
|
|
247
|
+
paths: WorkspacePaths,
|
|
248
|
+
*,
|
|
249
|
+
name: str,
|
|
250
|
+
wait: bool = False,
|
|
251
|
+
timeout: float = 2.0,
|
|
252
|
+
inputs: dict[str, object] | None = None,
|
|
253
|
+
) -> DaemonCommandResult:
|
|
246
254
|
"""Request one manual flow run through the daemon."""
|
|
247
255
|
if not authored_workspace_is_available(paths):
|
|
248
256
|
return DaemonCommandResult(ok=False, error="Workspace root is no longer available.")
|
|
249
257
|
return self._spawn_and_request(
|
|
250
258
|
paths,
|
|
251
|
-
{"command": "run_flow", "name": name, "wait": wait},
|
|
259
|
+
{"command": "run_flow", "name": name, "wait": wait, "inputs": dict(inputs or {})},
|
|
252
260
|
timeout=timeout,
|
|
253
261
|
)
|
|
254
262
|
|
|
@@ -86,6 +86,7 @@ class Flow(_CoreFlow):
|
|
|
86
86
|
def run_once(
|
|
87
87
|
self,
|
|
88
88
|
*,
|
|
89
|
+
inputs: dict[str, object] | None = None,
|
|
89
90
|
authoring_services: AuthoringServices | None = None,
|
|
90
91
|
runtime_execution_service: RuntimeExecutionService | None = None,
|
|
91
92
|
) -> list[FlowContext]:
|
|
@@ -93,6 +94,8 @@ class Flow(_CoreFlow):
|
|
|
93
94
|
|
|
94
95
|
Parameters
|
|
95
96
|
----------
|
|
97
|
+
inputs : dict[str, object] | None
|
|
98
|
+
Submitted manual-run input values for flows that declare them.
|
|
96
99
|
authoring_services : AuthoringServices | None
|
|
97
100
|
Optional service bundle used by tests or embedded hosts.
|
|
98
101
|
runtime_execution_service : RuntimeExecutionService | None
|
|
@@ -108,7 +111,9 @@ class Flow(_CoreFlow):
|
|
|
108
111
|
authoring_services=authoring_services,
|
|
109
112
|
runtime_execution_service=runtime_execution_service,
|
|
110
113
|
).runtime_execution_service
|
|
111
|
-
|
|
114
|
+
if inputs is None:
|
|
115
|
+
return service.run_once(flow)
|
|
116
|
+
return service.run_once(flow, inputs=inputs)
|
|
112
117
|
|
|
113
118
|
def preview(
|
|
114
119
|
self,
|