py-data-engine 0.1.2__tar.gz → 0.1.3__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.1.2/src/py_data_engine.egg-info → py_data_engine-0.1.3}/PKG-INFO +3 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/pyproject.toml +6 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/setup.py +11 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/__init__.py +12 -12
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/__init__.py +5 -2
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/execution/context.py +4 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/execution/continuous.py +1 -3
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/execution/polling.py +4 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/execution/single.py +0 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/flow.py +224 -7
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/primitives.py +47 -3
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/devtools/project_ast_map.py +94 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_modules/data_engine/authoring/flow.html +239 -22
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_modules/data_engine/authoring/model.html +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_modules/data_engine/authoring/primitives.html +104 -33
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_modules/data_engine/runtime/file_watch.html +4 -6
- py_data_engine-0.1.3/src/data_engine/docs/html/_modules/data_engine/services/daemon.html +193 -0
- py_data_engine-0.1.3/src/data_engine/docs/html/_modules/data_engine/services/daemon_state.html +169 -0
- py_data_engine-0.1.3/src/data_engine/docs/html/_modules/data_engine/services/flow_catalog.html +226 -0
- py_data_engine-0.1.3/src/data_engine/docs/html/_modules/data_engine/services/flow_execution.html +174 -0
- py_data_engine-0.1.3/src/data_engine/docs/html/_modules/data_engine/services/ledger.html +224 -0
- py_data_engine-0.1.3/src/data_engine/docs/html/_modules/data_engine/services/logs.html +203 -0
- py_data_engine-0.1.3/src/data_engine/docs/html/_modules/data_engine/services/runtime_binding.html +289 -0
- py_data_engine-0.1.3/src/data_engine/docs/html/_modules/data_engine/services/runtime_execution.html +260 -0
- py_data_engine-0.1.3/src/data_engine/docs/html/_modules/data_engine/services/runtime_history.html +185 -0
- py_data_engine-0.1.3/src/data_engine/docs/html/_modules/data_engine/services/settings.html +199 -0
- py_data_engine-0.1.3/src/data_engine/docs/html/_modules/data_engine/services/shared_state.html +154 -0
- py_data_engine-0.1.3/src/data_engine/docs/html/_modules/data_engine/services/theme.html +191 -0
- py_data_engine-0.1.3/src/data_engine/docs/html/_modules/data_engine/services/workspace_provisioning.html +384 -0
- py_data_engine-0.1.3/src/data_engine/docs/html/_modules/data_engine/services/workspaces.html +197 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_modules/index.html +15 -1
- py_data_engine-0.1.3/src/data_engine/docs/html/_sources/api.rst.txt +115 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_sources/guides/project-inventory.md.txt +336 -55
- py_data_engine-0.1.3/src/data_engine/docs/html/_sources/guides/project-map.md.txt +74 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/documentation_options.js +1 -1
- py_data_engine-0.1.3/src/data_engine/docs/html/api.html +2951 -0
- py_data_engine-0.1.3/src/data_engine/docs/html/genindex.html +914 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/guides/app-runtime-and-workspaces.html +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/guides/authoring-flow-modules.html +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/guides/configuring-flows.html +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/guides/core-concepts.html +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/guides/database-methods.html +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/guides/duckdb-helpers.html +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/guides/flow-context.html +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/guides/flow-methods.html +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/guides/getting-started.html +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/guides/project-inventory.html +622 -71
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/guides/project-map.html +79 -132
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/guides/recipes.html +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/index.html +4 -5
- py_data_engine-0.1.3/src/data_engine/docs/html/objects.inv +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/py-modindex.html +73 -3
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/search.html +1 -1
- py_data_engine-0.1.3/src/data_engine/docs/html/searchindex.js +1 -0
- py_data_engine-0.1.3/src/data_engine/docs/sphinx_source/api.rst +115 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/sphinx_source/conf.py +4 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/sphinx_source/guides/project-inventory.md +336 -55
- py_data_engine-0.1.3/src/data_engine/docs/sphinx_source/guides/project-map.md +74 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/actions.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/workspace.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/flow_modules/flow_module_loader.py +2 -2
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/helpers/__init__.py +8 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/helpers/duckdb.py +303 -28
- py_data_engine-0.1.3/src/data_engine/helpers/schema.py +295 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/app.py +1 -3
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/client.py +11 -66
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/constants.py +2 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/manager.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/server.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/platform/identity.py +2 -0
- py_data_engine-0.1.3/src/data_engine/platform/interpreters.py +50 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/platform/local_settings.py +9 -8
- py_data_engine-0.1.3/src/data_engine/platform/paths.py +57 -0
- py_data_engine-0.1.3/src/data_engine/platform/processes.py +213 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/platform/workspace_models.py +8 -33
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/platform/workspace_policy.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/runtime/file_watch.py +3 -5
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/runtime/runtime_db.py +13 -116
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/services/flow_catalog.py +3 -2
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/services/ledger.py +4 -4
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/services/runtime_execution.py +0 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/services/workspace_provisioning.py +2 -5
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/cli/app.py +0 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/cli/commands_doctor.py +9 -89
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/cli/commands_run.py +4 -3
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/cli/commands_start.py +5 -31
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/cli/commands_workspace.py +0 -2
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/app.py +2 -4
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/bootstrap.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/bootstrapper.py +2 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/control_support.py +2 -2
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/controllers/runtime.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/dialogs/previews.py +0 -2
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/helpers/inspection.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/launcher.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/presenters/workspace_settings.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/runtime.py +1 -2
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/state_support.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/support.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/widgets/panels.py +0 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/tui/app.py +2 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/tui/bootstrap.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/tui/controllers/flows.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/tui/controllers/runtime.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/tui/state_support.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/views/state.py +3 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3/src/py_data_engine.egg-info}/PKG-INFO +3 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/py_data_engine.egg-info/SOURCES.txt +19 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/py_data_engine.egg-info/requires.txt +2 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_builder.py +3 -14
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_cli.py +3 -3
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_cli_helpers.py +0 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_daemon.py +3 -4
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_domain_actions.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_domain_details.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_domain_inspection.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_flow_module_loader.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_helpers_duckdb.py +52 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_integration.py +3 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_live_runtime_suite.py +9 -73
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_local_settings.py +0 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_project_ast_map.py +36 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_runtime_db.py +5 -15
- py_data_engine-0.1.3/tests/test_schema_helper.py +145 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_services.py +5 -6
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_tui.py +6 -6
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_tui_widgets.py +2 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_ui_bootstrap.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_ui_models.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_views_helpers.py +1 -1
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_workspace_provisioning.py +0 -1
- py_data_engine-0.1.2/src/data_engine/docs/html/_sources/api.rst.txt +0 -42
- py_data_engine-0.1.2/src/data_engine/docs/html/_sources/guides/project-map.md.txt +0 -118
- py_data_engine-0.1.2/src/data_engine/docs/html/api.html +0 -1093
- py_data_engine-0.1.2/src/data_engine/docs/html/genindex.html +0 -483
- py_data_engine-0.1.2/src/data_engine/docs/html/objects.inv +0 -0
- py_data_engine-0.1.2/src/data_engine/docs/html/searchindex.js +0 -1
- py_data_engine-0.1.2/src/data_engine/docs/sphinx_source/api.rst +0 -42
- py_data_engine-0.1.2/src/data_engine/docs/sphinx_source/guides/project-map.md +0 -118
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/LICENSE +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/README.md +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/setup.cfg +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/application/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/application/actions.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/application/catalog.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/application/control.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/application/details.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/application/runtime.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/application/workspace.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/builder.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/execution/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/execution/app.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/execution/grouped.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/execution/logging.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/execution/runner.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/helpers.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/model.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/services.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/devtools/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/devtools/smoke_data.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_sources/guides/app-runtime-and-workspaces.md.txt +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_sources/guides/authoring-flow-modules.md.txt +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_sources/guides/configuring-flows.md.txt +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_sources/guides/core-concepts.md.txt +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_sources/guides/database-methods.md.txt +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_sources/guides/duckdb-helpers.md.txt +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_sources/guides/flow-context.md.txt +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_sources/guides/flow-methods.md.txt +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_sources/guides/getting-started.md.txt +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_sources/guides/recipes.md.txt +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_sources/index.rst.txt +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/base-stemmer.js +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/basic.css +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/badge_only.css +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/lato-bold-italic.woff +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/lato-bold.woff +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/lato-bold.woff2 +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/lato-normal-italic.woff +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/lato-normal.woff +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/fonts/lato-normal.woff2 +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/css/theme.css +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/custom.css +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/doctools.js +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/english-stemmer.js +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/file.png +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-bold.eot +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-bold.ttf +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-bold.woff +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-italic.eot +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-italic.ttf +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-italic.woff +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-regular.eot +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-regular.ttf +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-regular.woff +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/jquery.js +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/js/badge_only.js +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/js/theme.js +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/js/versions.js +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/language_data.js +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/minus.png +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/plus.png +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/pygments.css +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/searchtools.js +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/html/_static/sphinx_highlight.js +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/sphinx_source/_static/custom.css +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/sphinx_source/guides/app-runtime-and-workspaces.md +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/sphinx_source/guides/authoring-flow-modules.md +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/sphinx_source/guides/configuring-flows.md +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/sphinx_source/guides/core-concepts.md +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/sphinx_source/guides/database-methods.md +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/sphinx_source/guides/duckdb-helpers.md +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/sphinx_source/guides/flow-context.md +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/sphinx_source/guides/flow-methods.md +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/sphinx_source/guides/getting-started.md +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/sphinx_source/guides/recipes.md +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/docs/sphinx_source/index.rst +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/catalog.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/details.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/diagnostics.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/errors.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/inspection.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/logs.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/operations.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/operator.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/runs.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/runtime.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/source_state.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/support.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/domain/time.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/flow_modules/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/flow_modules/flow_module_compiler.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/bootstrap.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/commands.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/composition.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/entrypoints.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/lifecycle.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/ownership.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/runtime_commands.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/runtime_control.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/shared_state.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/hosts/daemon/state_sync.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/platform/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/platform/theme.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/runtime/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/runtime/ledger_models.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/runtime/shared_state.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/services/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/services/daemon.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/services/daemon_state.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/services/flow_execution.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/services/logs.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/services/runtime_binding.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/services/runtime_history.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/services/settings.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/services/shared_state.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/services/theme.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/services/workspaces.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/cli/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/cli/dependencies.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/cli/parser.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/cache_models.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/controllers/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/controllers/flows.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/dialogs/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/dialogs/messages.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/helpers/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/helpers/lifecycle.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/helpers/scroll.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/helpers/theming.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/icons/dark_light.svg +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/icons/documentation.svg +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/icons/failed.svg +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/icons/group.svg +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/icons/home.svg +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/icons/manual.svg +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/icons/poll.svg +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/icons/schedule.svg +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/icons/settings.svg +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/icons/started.svg +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/icons/success.svg +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/icons/view-log.svg +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/icons.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/presenters/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/presenters/docs.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/presenters/logs.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/presenters/runtime_projection.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/presenters/sidebar.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/presenters/steps.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/presenters/workspace.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/presenters/workspace_binding.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/preview_models.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/render_support.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/rendering/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/rendering/artifacts.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/rendering/icons.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/surface.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/theme.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/widgets/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/widgets/config.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/widgets/logs.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/widgets/sidebar.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/gui/widgets/steps.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/tui/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/tui/bootstrapper.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/tui/controllers/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/tui/runtime.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/tui/support.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/tui/theme.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/ui/tui/widgets.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/views/__init__.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/views/actions.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/views/artifacts.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/views/flow_display.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/views/logs.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/views/models.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/views/presentation.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/views/runs.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/views/status.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/views/text.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/py_data_engine.egg-info/dependency_links.txt +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/py_data_engine.egg-info/entry_points.txt +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/py_data_engine.egg-info/top_level.txt +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_application.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_authoring_helpers.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_authoring_services.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_domain_catalog.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_domain_errors.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_domain_logs.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_domain_operations.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_domain_operator.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_domain_runs.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_domain_runtime.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_domain_support.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_domain_workspace.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_export_project_bundle_script.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_flow_module_compiler.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_logs.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_platform_identity.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_qt_ui.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_runtime_history_service.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_shared_state.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_smoke_data.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_sources.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_theme.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_ui_runtime_theme.py +0 -0
- {py_data_engine-0.1.2 → py_data_engine-0.1.3}/tests/test_ui_state.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: py-data-engine
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: Workbook-driven workflow jobs with strict filename parsing and DuckDB-backed processing.
|
|
5
5
|
Author: Data Engine contributors
|
|
6
6
|
License-Expression: MIT
|
|
@@ -57,10 +57,12 @@ Requires-Dist: notebook>=7.4.0; extra == "dev"
|
|
|
57
57
|
Requires-Dist: numpy>=2.4.0; extra == "dev"
|
|
58
58
|
Requires-Dist: openpyxl>=3.1.0; extra == "dev"
|
|
59
59
|
Requires-Dist: pandas>=3.0.0; extra == "dev"
|
|
60
|
+
Requires-Dist: pydoclint>=0.7.6; extra == "dev"
|
|
60
61
|
Requires-Dist: pydocstyle>=6.3.0; extra == "dev"
|
|
61
62
|
Requires-Dist: pyinstaller>=6.15.0; extra == "dev"
|
|
62
63
|
Requires-Dist: pytest>=9.0.0; extra == "dev"
|
|
63
64
|
Requires-Dist: pytest-cov>=7.0.0; extra == "dev"
|
|
65
|
+
Requires-Dist: ruff>=0.15.10; extra == "dev"
|
|
64
66
|
Requires-Dist: Sphinx>=9.1.0; extra == "dev"
|
|
65
67
|
Requires-Dist: sphinx_rtd_theme>=3.1.0; extra == "dev"
|
|
66
68
|
Dynamic: license-file
|
|
@@ -11,7 +11,7 @@ build-backend = "setuptools.build_meta"
|
|
|
11
11
|
|
|
12
12
|
[project]
|
|
13
13
|
name = "py-data-engine"
|
|
14
|
-
|
|
14
|
+
dynamic = ["version"]
|
|
15
15
|
description = "Workbook-driven workflow jobs with strict filename parsing and DuckDB-backed processing."
|
|
16
16
|
readme = "README.md"
|
|
17
17
|
requires-python = ">=3.14"
|
|
@@ -87,10 +87,12 @@ dev = [
|
|
|
87
87
|
"numpy>=2.4.0",
|
|
88
88
|
"openpyxl>=3.1.0",
|
|
89
89
|
"pandas>=3.0.0",
|
|
90
|
+
"pydoclint>=0.7.6",
|
|
90
91
|
"pydocstyle>=6.3.0",
|
|
91
92
|
"pyinstaller>=6.15.0",
|
|
92
93
|
"pytest>=9.0.0",
|
|
93
94
|
"pytest-cov>=7.0.0",
|
|
95
|
+
"ruff>=0.15.10",
|
|
94
96
|
"Sphinx>=9.1.0",
|
|
95
97
|
"sphinx_rtd_theme>=3.1.0",
|
|
96
98
|
]
|
|
@@ -114,6 +116,9 @@ data_engine = [
|
|
|
114
116
|
"docs/html/**/*",
|
|
115
117
|
]
|
|
116
118
|
|
|
119
|
+
[tool.setuptools.dynamic]
|
|
120
|
+
version = {attr = "data_engine.platform.identity.APP_VERSION"}
|
|
121
|
+
|
|
117
122
|
[tool.pytest.ini_options]
|
|
118
123
|
pythonpath = ["src"]
|
|
119
124
|
testpaths = ["tests"]
|
|
@@ -12,11 +12,22 @@ from setuptools.command.sdist import sdist as _sdist
|
|
|
12
12
|
ROOT = Path(__file__).resolve().parent
|
|
13
13
|
DOCS_SOURCE_DIR = ROOT / "src" / "data_engine" / "docs" / "sphinx_source"
|
|
14
14
|
DOCS_OUTPUT_DIR = ROOT / "src" / "data_engine" / "docs" / "html"
|
|
15
|
+
PROJECT_AST_MAP_SCRIPT = ROOT / "src" / "data_engine" / "devtools" / "project_ast_map.py"
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
def _build_packaged_docs() -> None:
|
|
18
19
|
if not DOCS_SOURCE_DIR.is_dir():
|
|
19
20
|
raise FileNotFoundError(f"Packaged docs source directory is missing: {DOCS_SOURCE_DIR}")
|
|
21
|
+
subprocess.run(
|
|
22
|
+
[
|
|
23
|
+
sys.executable,
|
|
24
|
+
str(PROJECT_AST_MAP_SCRIPT),
|
|
25
|
+
str(ROOT / "src" / "data_engine"),
|
|
26
|
+
"--write-docs",
|
|
27
|
+
str(DOCS_SOURCE_DIR / "guides"),
|
|
28
|
+
],
|
|
29
|
+
check=True,
|
|
30
|
+
)
|
|
20
31
|
subprocess.run(
|
|
21
32
|
[
|
|
22
33
|
sys.executable,
|
|
@@ -5,11 +5,11 @@ from __future__ import annotations
|
|
|
5
5
|
from typing import TYPE_CHECKING
|
|
6
6
|
|
|
7
7
|
if TYPE_CHECKING:
|
|
8
|
-
from data_engine.authoring.
|
|
9
|
-
from data_engine.authoring.
|
|
10
|
-
from data_engine.authoring.
|
|
11
|
-
from data_engine.authoring.
|
|
12
|
-
from data_engine.authoring.
|
|
8
|
+
from data_engine.authoring.flow import Flow
|
|
9
|
+
from data_engine.authoring.flow import discover_flows, load_flow, run
|
|
10
|
+
from data_engine.authoring.primitives import Batch
|
|
11
|
+
from data_engine.authoring.primitives import FileRef
|
|
12
|
+
from data_engine.authoring.primitives import FlowContext
|
|
13
13
|
|
|
14
14
|
__all__ = ["Batch", "FileRef", "Flow", "FlowContext", "discover_flows", "load_flow", "run"]
|
|
15
15
|
|
|
@@ -17,13 +17,13 @@ __all__ = ["Batch", "FileRef", "Flow", "FlowContext", "discover_flows", "load_fl
|
|
|
17
17
|
def __getattr__(name: str):
|
|
18
18
|
"""Lazy-load runtime symbols so lightweight helpers can import package submodules safely."""
|
|
19
19
|
if name in {"Batch", "FileRef", "Flow", "FlowContext", "discover_flows", "load_flow", "run"}:
|
|
20
|
-
from data_engine.authoring.
|
|
21
|
-
from data_engine.authoring.
|
|
22
|
-
from data_engine.authoring.
|
|
23
|
-
from data_engine.authoring.
|
|
24
|
-
from data_engine.authoring.
|
|
25
|
-
from data_engine.authoring.
|
|
26
|
-
from data_engine.authoring.
|
|
20
|
+
from data_engine.authoring.flow import Flow
|
|
21
|
+
from data_engine.authoring.flow import discover_flows
|
|
22
|
+
from data_engine.authoring.flow import load_flow
|
|
23
|
+
from data_engine.authoring.flow import run
|
|
24
|
+
from data_engine.authoring.primitives import Batch
|
|
25
|
+
from data_engine.authoring.primitives import FileRef
|
|
26
|
+
from data_engine.authoring.primitives import FlowContext
|
|
27
27
|
|
|
28
28
|
return {
|
|
29
29
|
"Batch": Batch,
|
|
@@ -10,5 +10,8 @@ __all__ = ["Batch", "FileRef", "Flow", "FlowContext", "discover_flows", "load_fl
|
|
|
10
10
|
def __getattr__(name: str):
|
|
11
11
|
if name not in __all__:
|
|
12
12
|
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
if name in {"Flow", "discover_flows", "load_flow", "run"}:
|
|
14
|
+
module = import_module("data_engine.authoring.flow")
|
|
15
|
+
return getattr(module, name)
|
|
16
|
+
module = import_module("data_engine.authoring.primitives")
|
|
17
|
+
return getattr(module, name)
|
{py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/execution/context.py
RENAMED
|
@@ -5,12 +5,16 @@ from __future__ import annotations
|
|
|
5
5
|
from dataclasses import dataclass
|
|
6
6
|
import hashlib
|
|
7
7
|
from pathlib import Path
|
|
8
|
+
from typing import TYPE_CHECKING
|
|
8
9
|
from uuid import uuid4
|
|
9
10
|
|
|
10
11
|
from data_engine.authoring.primitives import FlowContext, MirrorContext, SourceContext, WatchSpec, WorkspaceConfigContext
|
|
11
12
|
from data_engine.domain.source_state import SourceSignature
|
|
12
13
|
from data_engine.domain.time import utcnow_text
|
|
13
14
|
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from data_engine.authoring.flow import Flow
|
|
17
|
+
|
|
14
18
|
|
|
15
19
|
@dataclass(frozen=True)
|
|
16
20
|
class _QueuedJob:
|
{py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/execution/continuous.py
RENAMED
|
@@ -8,6 +8,7 @@ from time import monotonic, sleep
|
|
|
8
8
|
from typing import TYPE_CHECKING
|
|
9
9
|
|
|
10
10
|
from data_engine.authoring.execution.context import _QueuedJob
|
|
11
|
+
from data_engine.authoring.model import FlowStoppedError
|
|
11
12
|
from data_engine.authoring.primitives import WatchSpec
|
|
12
13
|
from data_engine.runtime.file_watch import PollingWatcher
|
|
13
14
|
|
|
@@ -170,7 +171,4 @@ class ContinuousRuntimeLoop:
|
|
|
170
171
|
entry["pending"] = True
|
|
171
172
|
entry["last_run_date"] = current_dt.date()
|
|
172
173
|
|
|
173
|
-
|
|
174
|
-
from data_engine.authoring.model import FlowStoppedError
|
|
175
|
-
|
|
176
174
|
__all__ = ["ContinuousRuntimeLoop"]
|
{py_data_engine-0.1.2 → py_data_engine-0.1.3}/src/data_engine/authoring/execution/polling.py
RENAMED
|
@@ -4,6 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from collections import deque
|
|
6
6
|
from pathlib import Path
|
|
7
|
+
from typing import TYPE_CHECKING
|
|
7
8
|
|
|
8
9
|
from data_engine.authoring.primitives import WatchSpec
|
|
9
10
|
from data_engine.authoring.execution.context import _QueuedJob
|
|
@@ -11,6 +12,9 @@ from data_engine.domain.source_state import SourceSignature
|
|
|
11
12
|
from data_engine.runtime.file_watch import PollingWatcher, iter_candidate_paths
|
|
12
13
|
from data_engine.runtime.runtime_db import RuntimeLedger
|
|
13
14
|
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from data_engine.authoring.flow import Flow
|
|
17
|
+
|
|
14
18
|
|
|
15
19
|
class RuntimePollingSupport:
|
|
16
20
|
"""Own watcher creation, queueing, and stale-source detection."""
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
from dataclasses import dataclass, replace
|
|
6
6
|
import inspect
|
|
7
7
|
from pathlib import Path
|
|
8
|
+
from typing import Callable
|
|
8
9
|
|
|
9
10
|
from data_engine.authoring.helpers import (
|
|
10
11
|
_callable_identifier,
|
|
@@ -45,7 +46,28 @@ def _resolve_authoring_services(
|
|
|
45
46
|
|
|
46
47
|
@dataclass(frozen=True)
|
|
47
48
|
class Flow:
|
|
48
|
-
"""Immutable fluent builder for generic runtime flows.
|
|
49
|
+
"""Immutable fluent builder for generic runtime flows.
|
|
50
|
+
|
|
51
|
+
Attributes
|
|
52
|
+
----------
|
|
53
|
+
group : str
|
|
54
|
+
Display group used by the GUI, TUI, and runtime summaries.
|
|
55
|
+
name : str | None
|
|
56
|
+
Stable flow identifier. When omitted in a flow module, the module loader
|
|
57
|
+
can derive it from the module name.
|
|
58
|
+
label : str | None
|
|
59
|
+
Optional human-readable display label.
|
|
60
|
+
trigger : WatchSpec | None
|
|
61
|
+
Runtime trigger configuration.
|
|
62
|
+
mirror_spec : MirrorSpec | None
|
|
63
|
+
Mirrored output path configuration.
|
|
64
|
+
steps : tuple[StepSpec, ...]
|
|
65
|
+
Ordered callable steps to run.
|
|
66
|
+
|
|
67
|
+
Notes
|
|
68
|
+
-----
|
|
69
|
+
Builder methods return a new ``Flow`` instance, so calls can be chained.
|
|
70
|
+
"""
|
|
49
71
|
|
|
50
72
|
group: str
|
|
51
73
|
name: str | None = None
|
|
@@ -80,6 +102,38 @@ class Flow:
|
|
|
80
102
|
extensions: tuple[str, ...] | list[str] | set[str] | None = None,
|
|
81
103
|
settle: int = 1,
|
|
82
104
|
) -> "Flow":
|
|
105
|
+
"""Configure how this flow is triggered.
|
|
106
|
+
|
|
107
|
+
Parameters
|
|
108
|
+
----------
|
|
109
|
+
mode : str
|
|
110
|
+
Trigger mode: ``"manual"``, ``"poll"``, or ``"schedule"``.
|
|
111
|
+
run_as : str
|
|
112
|
+
``"individual"`` to run once per source file, or ``"batch"`` to run
|
|
113
|
+
once for the full source set.
|
|
114
|
+
source : str | Path | None
|
|
115
|
+
File or directory watched by poll/schedule triggers.
|
|
116
|
+
interval : str | None
|
|
117
|
+
Duration string such as ``"10s"`` or ``"5m"`` for poll intervals or
|
|
118
|
+
recurring schedules.
|
|
119
|
+
time : str | tuple[str, ...] | list[str] | set[str] | None
|
|
120
|
+
One or more ``HH:MM`` daily schedule times.
|
|
121
|
+
extensions : tuple[str, ...] | list[str] | set[str] | None
|
|
122
|
+
Optional file extensions used when discovering source files.
|
|
123
|
+
settle : int
|
|
124
|
+
Polling settle window in seconds before a changed file is queued.
|
|
125
|
+
|
|
126
|
+
Returns
|
|
127
|
+
-------
|
|
128
|
+
Flow
|
|
129
|
+
A new flow with the trigger configuration attached.
|
|
130
|
+
|
|
131
|
+
Raises
|
|
132
|
+
------
|
|
133
|
+
FlowValidationError
|
|
134
|
+
If the trigger mode, source, schedule, or polling options are
|
|
135
|
+
inconsistent.
|
|
136
|
+
"""
|
|
83
137
|
normalized_mode = str(mode).strip().lower()
|
|
84
138
|
if normalized_mode not in {"manual", "poll", "schedule"}:
|
|
85
139
|
raise FlowValidationError("watch() mode must be one of 'manual', 'poll', or 'schedule'.")
|
|
@@ -157,17 +211,53 @@ class Flow:
|
|
|
157
211
|
)
|
|
158
212
|
|
|
159
213
|
def mirror(self, *, root: str | Path) -> "Flow":
|
|
160
|
-
"""Bind a mirrored output namespace rooted at one directory.
|
|
214
|
+
"""Bind a mirrored output namespace rooted at one directory.
|
|
215
|
+
|
|
216
|
+
Parameters
|
|
217
|
+
----------
|
|
218
|
+
root : str | Path
|
|
219
|
+
Directory used by ``context.mirror`` helpers when writing outputs.
|
|
220
|
+
|
|
221
|
+
Returns
|
|
222
|
+
-------
|
|
223
|
+
Flow
|
|
224
|
+
A new flow with mirror output helpers enabled.
|
|
225
|
+
"""
|
|
161
226
|
return self._clone(mirror_spec=MirrorSpec(root=_resolve_flow_path(root)))
|
|
162
227
|
|
|
163
228
|
def step(
|
|
164
229
|
self,
|
|
165
|
-
fn,
|
|
230
|
+
fn: Callable[[FlowContext], object],
|
|
166
231
|
*,
|
|
167
232
|
use: str | None = None,
|
|
168
233
|
save_as: str | None = None,
|
|
169
234
|
label: str | None = None,
|
|
170
235
|
) -> "Flow":
|
|
236
|
+
"""Append one callable step to the flow.
|
|
237
|
+
|
|
238
|
+
Parameters
|
|
239
|
+
----------
|
|
240
|
+
fn : Callable[[FlowContext], object]
|
|
241
|
+
Callable that accepts a single ``FlowContext`` and returns the next
|
|
242
|
+
value for ``context.current``.
|
|
243
|
+
use : str | None
|
|
244
|
+
Optional named object slot to load into ``context.current`` before
|
|
245
|
+
the step runs.
|
|
246
|
+
save_as : str | None
|
|
247
|
+
Optional named object slot to store the step result in.
|
|
248
|
+
label : str | None
|
|
249
|
+
Optional display label for logs and UI step summaries.
|
|
250
|
+
|
|
251
|
+
Returns
|
|
252
|
+
-------
|
|
253
|
+
Flow
|
|
254
|
+
A new flow with the step appended.
|
|
255
|
+
|
|
256
|
+
Raises
|
|
257
|
+
------
|
|
258
|
+
FlowValidationError
|
|
259
|
+
If ``fn`` is not callable or does not accept exactly one argument.
|
|
260
|
+
"""
|
|
171
261
|
if not callable(fn):
|
|
172
262
|
raise FlowValidationError("step() fn must be callable")
|
|
173
263
|
normalized_use = _validate_slot_name(method_name="step", slot_name="use", value=use)
|
|
@@ -188,12 +278,36 @@ class Flow:
|
|
|
188
278
|
|
|
189
279
|
def map(
|
|
190
280
|
self,
|
|
191
|
-
fn,
|
|
281
|
+
fn: Callable[..., object],
|
|
192
282
|
*,
|
|
193
283
|
use: str | None = None,
|
|
194
284
|
save_as: str | None = None,
|
|
195
285
|
label: str | None = None,
|
|
196
286
|
) -> "Flow":
|
|
287
|
+
"""Append a step that maps a callable over the current iterable value.
|
|
288
|
+
|
|
289
|
+
Parameters
|
|
290
|
+
----------
|
|
291
|
+
fn : Callable[..., object]
|
|
292
|
+
Callable accepting either ``item`` or ``context, item``.
|
|
293
|
+
use : str | None
|
|
294
|
+
Optional named object slot to map instead of the current value.
|
|
295
|
+
save_as : str | None
|
|
296
|
+
Optional named object slot to store the mapped ``Batch`` result in.
|
|
297
|
+
label : str | None
|
|
298
|
+
Optional display label for logs and UI step summaries.
|
|
299
|
+
|
|
300
|
+
Returns
|
|
301
|
+
-------
|
|
302
|
+
Flow
|
|
303
|
+
A new flow with the mapping step appended.
|
|
304
|
+
|
|
305
|
+
Raises
|
|
306
|
+
------
|
|
307
|
+
FlowValidationError
|
|
308
|
+
If ``fn`` is not callable, has an unsupported signature, or the
|
|
309
|
+
mapped current value is not iterable.
|
|
310
|
+
"""
|
|
197
311
|
if not callable(fn):
|
|
198
312
|
raise FlowValidationError("map() fn must be callable")
|
|
199
313
|
normalized_use = _validate_slot_name(method_name="map", slot_name="use", value=use)
|
|
@@ -241,6 +355,28 @@ class Flow:
|
|
|
241
355
|
save_as: str | None = None,
|
|
242
356
|
label: str | None = None,
|
|
243
357
|
) -> "Flow":
|
|
358
|
+
"""Append a step that collects source files into a ``Batch``.
|
|
359
|
+
|
|
360
|
+
Parameters
|
|
361
|
+
----------
|
|
362
|
+
extensions : tuple[str, ...] | list[str] | set[str]
|
|
363
|
+
File extensions to include, such as ``(".xlsx", ".csv")``.
|
|
364
|
+
root : str | Path | None
|
|
365
|
+
Optional search root. Defaults to the active source root.
|
|
366
|
+
recursive : bool
|
|
367
|
+
Whether to search child directories.
|
|
368
|
+
use : str | None
|
|
369
|
+
Optional named object slot to load before collecting.
|
|
370
|
+
save_as : str | None
|
|
371
|
+
Optional named object slot to store the collected batch in.
|
|
372
|
+
label : str | None
|
|
373
|
+
Optional display label for logs and UI step summaries.
|
|
374
|
+
|
|
375
|
+
Returns
|
|
376
|
+
-------
|
|
377
|
+
Flow
|
|
378
|
+
A new flow with the collection step appended.
|
|
379
|
+
"""
|
|
244
380
|
normalized_use = _validate_slot_name(method_name="collect", slot_name="use", value=use)
|
|
245
381
|
normalized_save_as = _validate_slot_name(method_name="collect", slot_name="save_as", value=save_as)
|
|
246
382
|
normalized_label = _validate_label(method_name="collect", label=label)
|
|
@@ -253,12 +389,30 @@ class Flow:
|
|
|
253
389
|
|
|
254
390
|
def step_each(
|
|
255
391
|
self,
|
|
256
|
-
fn,
|
|
392
|
+
fn: Callable[..., object],
|
|
257
393
|
*,
|
|
258
394
|
use: str | None = None,
|
|
259
395
|
save_as: str | None = None,
|
|
260
396
|
label: str | None = None,
|
|
261
397
|
) -> "Flow":
|
|
398
|
+
"""Alias for ``map`` that reads naturally in step chains.
|
|
399
|
+
|
|
400
|
+
Parameters
|
|
401
|
+
----------
|
|
402
|
+
fn : Callable[..., object]
|
|
403
|
+
Callable accepting either ``item`` or ``context, item``.
|
|
404
|
+
use : str | None
|
|
405
|
+
Optional named object slot to map instead of the current value.
|
|
406
|
+
save_as : str | None
|
|
407
|
+
Optional named object slot to store the mapped ``Batch`` result in.
|
|
408
|
+
label : str | None
|
|
409
|
+
Optional display label for logs and UI step summaries.
|
|
410
|
+
|
|
411
|
+
Returns
|
|
412
|
+
-------
|
|
413
|
+
Flow
|
|
414
|
+
A new flow with the per-item step appended.
|
|
415
|
+
"""
|
|
262
416
|
return self.map(fn, use=use, save_as=save_as, label=label)
|
|
263
417
|
|
|
264
418
|
@property
|
|
@@ -273,6 +427,20 @@ class Flow:
|
|
|
273
427
|
authoring_services: AuthoringServices | None = None,
|
|
274
428
|
runtime_execution_service: RuntimeExecutionService | None = None,
|
|
275
429
|
) -> list[FlowContext]:
|
|
430
|
+
"""Run this flow once and return completed runtime contexts.
|
|
431
|
+
|
|
432
|
+
Parameters
|
|
433
|
+
----------
|
|
434
|
+
authoring_services : AuthoringServices | None
|
|
435
|
+
Optional service bundle used by tests or embedded hosts.
|
|
436
|
+
runtime_execution_service : RuntimeExecutionService | None
|
|
437
|
+
Optional runtime execution service override.
|
|
438
|
+
|
|
439
|
+
Returns
|
|
440
|
+
-------
|
|
441
|
+
list[FlowContext]
|
|
442
|
+
One context per executed source.
|
|
443
|
+
"""
|
|
276
444
|
service = _resolve_authoring_services(
|
|
277
445
|
authoring_services=authoring_services,
|
|
278
446
|
runtime_execution_service=runtime_execution_service,
|
|
@@ -285,7 +453,29 @@ class Flow:
|
|
|
285
453
|
use: str | None = None,
|
|
286
454
|
authoring_services: AuthoringServices | None = None,
|
|
287
455
|
runtime_execution_service: RuntimeExecutionService | None = None,
|
|
288
|
-
):
|
|
456
|
+
) -> object:
|
|
457
|
+
"""Run this flow in preview mode and return one preview value.
|
|
458
|
+
|
|
459
|
+
Parameters
|
|
460
|
+
----------
|
|
461
|
+
use : str | None
|
|
462
|
+
Optional named object slot to preview instead of the final current
|
|
463
|
+
value.
|
|
464
|
+
authoring_services : AuthoringServices | None
|
|
465
|
+
Optional service bundle used by tests or embedded hosts.
|
|
466
|
+
runtime_execution_service : RuntimeExecutionService | None
|
|
467
|
+
Optional runtime execution service override.
|
|
468
|
+
|
|
469
|
+
Returns
|
|
470
|
+
-------
|
|
471
|
+
object
|
|
472
|
+
Preview value returned by the runtime execution service.
|
|
473
|
+
|
|
474
|
+
Raises
|
|
475
|
+
------
|
|
476
|
+
FlowValidationError
|
|
477
|
+
If preview is requested from inside a compiled flow module.
|
|
478
|
+
"""
|
|
289
479
|
if in_compiled_flow_module_context():
|
|
290
480
|
raise FlowValidationError("preview() is not available inside compiled flow modules.")
|
|
291
481
|
normalized_use = _validate_slot_name(method_name="preview", slot_name="use", value=use)
|
|
@@ -295,7 +485,20 @@ class Flow:
|
|
|
295
485
|
).runtime_execution_service
|
|
296
486
|
return service.preview(self, use=normalized_use)
|
|
297
487
|
|
|
298
|
-
def show(self):
|
|
488
|
+
def show(self) -> object:
|
|
489
|
+
"""Run this flow once and return the single final current value.
|
|
490
|
+
|
|
491
|
+
Returns
|
|
492
|
+
-------
|
|
493
|
+
object
|
|
494
|
+
Final ``context.current`` value.
|
|
495
|
+
|
|
496
|
+
Raises
|
|
497
|
+
------
|
|
498
|
+
FlowValidationError
|
|
499
|
+
If called from a compiled flow module or the flow produces anything
|
|
500
|
+
other than one result.
|
|
501
|
+
"""
|
|
299
502
|
if in_compiled_flow_module_context():
|
|
300
503
|
raise FlowValidationError("show() is not available inside compiled flow modules.")
|
|
301
504
|
results = self.run_once()
|
|
@@ -309,6 +512,20 @@ class Flow:
|
|
|
309
512
|
authoring_services: AuthoringServices | None = None,
|
|
310
513
|
runtime_execution_service: RuntimeExecutionService | None = None,
|
|
311
514
|
) -> list[FlowContext]:
|
|
515
|
+
"""Run this flow continuously according to its trigger.
|
|
516
|
+
|
|
517
|
+
Parameters
|
|
518
|
+
----------
|
|
519
|
+
authoring_services : AuthoringServices | None
|
|
520
|
+
Optional service bundle used by tests or embedded hosts.
|
|
521
|
+
runtime_execution_service : RuntimeExecutionService | None
|
|
522
|
+
Optional runtime execution service override.
|
|
523
|
+
|
|
524
|
+
Returns
|
|
525
|
+
-------
|
|
526
|
+
list[FlowContext]
|
|
527
|
+
Completed contexts collected before the runtime exits.
|
|
528
|
+
"""
|
|
312
529
|
service = _resolve_authoring_services(
|
|
313
530
|
authoring_services=authoring_services,
|
|
314
531
|
runtime_execution_service=runtime_execution_service,
|
|
@@ -276,7 +276,27 @@ class SourceContext:
|
|
|
276
276
|
|
|
277
277
|
@dataclass
|
|
278
278
|
class FlowContext:
|
|
279
|
-
"""Mutable runtime state shared across steps during one flow execution.
|
|
279
|
+
"""Mutable runtime state shared across steps during one flow execution.
|
|
280
|
+
|
|
281
|
+
Attributes
|
|
282
|
+
----------
|
|
283
|
+
flow_name : str
|
|
284
|
+
Name of the flow currently executing.
|
|
285
|
+
group : str
|
|
286
|
+
Display group for the active flow.
|
|
287
|
+
source : SourceContext | None
|
|
288
|
+
Source-file path helpers when the flow is bound to a source.
|
|
289
|
+
mirror : MirrorContext | None
|
|
290
|
+
Output path helpers when the flow configured ``Flow.mirror(...)``.
|
|
291
|
+
current : object | None
|
|
292
|
+
Value passed from the previous step to the current step.
|
|
293
|
+
objects : dict[str, object]
|
|
294
|
+
Named values saved by steps with ``save_as=``.
|
|
295
|
+
metadata : dict[str, object]
|
|
296
|
+
Runtime metadata such as run ids and source hashes.
|
|
297
|
+
config : WorkspaceConfigContext
|
|
298
|
+
Workspace-local TOML config accessor.
|
|
299
|
+
"""
|
|
280
300
|
|
|
281
301
|
flow_name: str
|
|
282
302
|
group: str
|
|
@@ -288,7 +308,14 @@ class FlowContext:
|
|
|
288
308
|
config: WorkspaceConfigContext = field(default_factory=WorkspaceConfigContext)
|
|
289
309
|
|
|
290
310
|
def source_metadata(self) -> SourceMetadata | None:
|
|
291
|
-
"""Return filesystem metadata for the current source file when available.
|
|
311
|
+
"""Return filesystem metadata for the current source file when available.
|
|
312
|
+
|
|
313
|
+
Returns
|
|
314
|
+
-------
|
|
315
|
+
SourceMetadata | None
|
|
316
|
+
File path, name, size, and modified timestamp, or ``None`` when the
|
|
317
|
+
runtime is not executing a concrete source file.
|
|
318
|
+
"""
|
|
292
319
|
source_path = self.source.path if self.source is not None else None
|
|
293
320
|
if source_path is None:
|
|
294
321
|
return None
|
|
@@ -301,7 +328,24 @@ class FlowContext:
|
|
|
301
328
|
)
|
|
302
329
|
|
|
303
330
|
def database(self, name: str | Path) -> Path:
|
|
304
|
-
"""Return a write-ready path beneath the
|
|
331
|
+
"""Return a write-ready path beneath the workspace databases directory.
|
|
332
|
+
|
|
333
|
+
Parameters
|
|
334
|
+
----------
|
|
335
|
+
name : str | Path
|
|
336
|
+
Relative database file name, for example ``"warehouse.duckdb"``.
|
|
337
|
+
|
|
338
|
+
Returns
|
|
339
|
+
-------
|
|
340
|
+
Path
|
|
341
|
+
Absolute path under ``<workspace>/databases`` with parent
|
|
342
|
+
directories created.
|
|
343
|
+
|
|
344
|
+
Raises
|
|
345
|
+
------
|
|
346
|
+
FlowValidationError
|
|
347
|
+
If no authored workspace is active or ``name`` is empty or absolute.
|
|
348
|
+
"""
|
|
305
349
|
if self.config.workspace_root is None:
|
|
306
350
|
raise FlowValidationError("context.database() is only available for authored workspace flows.")
|
|
307
351
|
candidate = Path(name)
|