py-data-engine 0.3.12__tar.gz → 0.4.0__tar.gz

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