Flowfile 0.4.1__py3-none-any.whl → 0.5.3__py3-none-any.whl

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 (332) hide show
  1. build_backends/main.py +25 -22
  2. build_backends/main_prd.py +10 -19
  3. flowfile/__init__.py +179 -73
  4. flowfile/__main__.py +10 -7
  5. flowfile/api.py +52 -59
  6. flowfile/web/__init__.py +14 -9
  7. flowfile/web/static/assets/AdminView-49392a9a.js +713 -0
  8. flowfile/web/static/assets/AdminView-f53bad23.css +129 -0
  9. flowfile/web/static/assets/CloudConnectionView-36bcd6df.css +72 -0
  10. flowfile/web/static/assets/{CloudConnectionManager-d3248f8d.js → CloudConnectionView-f13f202b.js} +11 -11
  11. flowfile/web/static/assets/{CloudStorageReader-d65bf041.js → CloudStorageReader-0023d4a5.js} +10 -8
  12. flowfile/web/static/assets/{CloudStorageReader-29d14fcc.css → CloudStorageReader-24c54524.css} +27 -27
  13. flowfile/web/static/assets/{CloudStorageWriter-b0ee067f.css → CloudStorageWriter-60547855.css} +26 -26
  14. flowfile/web/static/assets/{CloudStorageWriter-e83be3ed.js → CloudStorageWriter-8e781e11.js} +10 -8
  15. flowfile/web/static/assets/{ColumnSelector-47996a16.css → ColumnSelector-371637fb.css} +2 -2
  16. flowfile/web/static/assets/{ColumnSelector-cce661cf.js → ColumnSelector-8ad68ea9.js} +3 -5
  17. flowfile/web/static/assets/{ContextMenu-c13f91d0.css → ContextMenu-26d4dd27.css} +6 -6
  18. flowfile/web/static/assets/{ContextMenu-11a4652a.js → ContextMenu-31ee57f0.js} +3 -3
  19. flowfile/web/static/assets/{ContextMenu-160afb08.js → ContextMenu-69a74055.js} +3 -3
  20. flowfile/web/static/assets/{ContextMenu-cf18d2cc.js → ContextMenu-8e2051c6.js} +3 -3
  21. flowfile/web/static/assets/{ContextMenu-4c74eef1.css → ContextMenu-8ec1729e.css} +6 -6
  22. flowfile/web/static/assets/{ContextMenu-63cfa99b.css → ContextMenu-9b310c60.css} +6 -6
  23. flowfile/web/static/assets/{CrossJoin-d395d38c.js → CrossJoin-03df6938.js} +12 -10
  24. flowfile/web/static/assets/{CrossJoin-1119d18e.css → CrossJoin-71b4cc10.css} +20 -20
  25. flowfile/web/static/assets/CustomNode-59e99a86.css +32 -0
  26. flowfile/web/static/assets/{CustomNode-b812dc0b.js → CustomNode-8479239b.js} +36 -24
  27. flowfile/web/static/assets/{DatabaseConnectionSettings-7000bf2c.js → DatabaseConnectionSettings-869e3efd.js} +5 -4
  28. flowfile/web/static/assets/{DatabaseConnectionSettings-0c04b2e5.css → DatabaseConnectionSettings-e91df89a.css} +13 -13
  29. flowfile/web/static/assets/{DatabaseReader-ae61773c.css → DatabaseReader-36898a00.css} +24 -24
  30. flowfile/web/static/assets/{DatabaseReader-4f035d0c.js → DatabaseReader-c58b9552.js} +25 -15
  31. flowfile/web/static/assets/DatabaseView-6655afd6.css +57 -0
  32. flowfile/web/static/assets/{DatabaseManager-9662ec5b.js → DatabaseView-d26a9140.js} +11 -11
  33. flowfile/web/static/assets/{DatabaseWriter-2f570e53.css → DatabaseWriter-217a99f1.css} +19 -19
  34. flowfile/web/static/assets/{DatabaseWriter-f65dcd54.js → DatabaseWriter-4d05ddc7.js} +17 -10
  35. flowfile/web/static/assets/{designer-e3c150ec.css → DesignerView-a6d0ee84.css} +629 -538
  36. flowfile/web/static/assets/{designer-f3656d8c.js → DesignerView-e6f5c0e8.js} +1214 -3209
  37. flowfile/web/static/assets/{documentation-52b241e7.js → DocumentationView-2e78ef1b.js} +5 -5
  38. flowfile/web/static/assets/{documentation-12216a74.css → DocumentationView-fd46c656.css} +7 -7
  39. flowfile/web/static/assets/{ExploreData-2d0cf4db.css → ExploreData-10c5acc8.css} +13 -12
  40. flowfile/web/static/assets/{ExploreData-94c43dfc.js → ExploreData-7b54caca.js} +18 -9
  41. flowfile/web/static/assets/{ExternalSource-ac04b3cc.js → ExternalSource-3fa399b2.js} +9 -7
  42. flowfile/web/static/assets/{ExternalSource-e37b6275.css → ExternalSource-47ab05a3.css} +17 -17
  43. flowfile/web/static/assets/Filter-7494ea97.css +48 -0
  44. flowfile/web/static/assets/Filter-8cbbdbf3.js +287 -0
  45. flowfile/web/static/assets/{Formula-bb96803d.css → Formula-53d58c43.css} +7 -7
  46. flowfile/web/static/assets/{Formula-71472193.js → Formula-aac42b1e.js} +13 -11
  47. flowfile/web/static/assets/{FuzzyMatch-1010f966.css → FuzzyMatch-ad6361d6.css} +68 -69
  48. flowfile/web/static/assets/{FuzzyMatch-b317f631.js → FuzzyMatch-cd9bbfca.js} +12 -10
  49. flowfile/web/static/assets/{Pivot-cf333e3d.css → GraphSolver-c24dec17.css} +5 -5
  50. flowfile/web/static/assets/{GraphSolver-754a234f.js → GraphSolver-c7e6780e.js} +13 -11
  51. flowfile/web/static/assets/{GroupBy-6c6f9802.js → GroupBy-93c5d22b.js} +9 -7
  52. flowfile/web/static/assets/{GroupBy-b9505323.css → GroupBy-be7ac0bf.css} +10 -10
  53. flowfile/web/static/assets/{Join-fd79b451.css → Join-28b5e18f.css} +22 -22
  54. flowfile/web/static/assets/{Join-a1b800be.js → Join-a19b2de2.js} +13 -11
  55. flowfile/web/static/assets/LoginView-0df4ed0a.js +134 -0
  56. flowfile/web/static/assets/LoginView-d325d632.css +172 -0
  57. flowfile/web/static/assets/ManualInput-3702e677.css +293 -0
  58. flowfile/web/static/assets/{ManualInput-a9640276.js → ManualInput-8d3374b2.js} +170 -116
  59. flowfile/web/static/assets/{MultiSelect-97213888.js → MultiSelect-ad1b6243.js} +2 -2
  60. flowfile/web/static/assets/{MultiSelect.vue_vue_type_script_setup_true_lang-6ffe088a.js → MultiSelect.vue_vue_type_script_setup_true_lang-e278950d.js} +1 -1
  61. flowfile/web/static/assets/NodeDesigner-40b647c9.js +2610 -0
  62. flowfile/web/static/assets/NodeDesigner-5f53be3f.css +1429 -0
  63. flowfile/web/static/assets/{NumericInput-e638088a.js → NumericInput-7100234c.js} +2 -2
  64. flowfile/web/static/assets/{NumericInput.vue_vue_type_script_setup_true_lang-90eb2cba.js → NumericInput.vue_vue_type_script_setup_true_lang-5130219f.js} +5 -2
  65. flowfile/web/static/assets/{Output-ddc9079f.css → Output-35e97000.css} +6 -6
  66. flowfile/web/static/assets/{Output-76750610.js → Output-f5efd2aa.js} +60 -38
  67. flowfile/web/static/assets/{GraphSolver-f0cb7bfb.css → Pivot-0eda81b4.css} +5 -5
  68. flowfile/web/static/assets/{Pivot-7814803f.js → Pivot-d981d23c.js} +11 -9
  69. flowfile/web/static/assets/PivotValidation-0e905b1a.css +13 -0
  70. flowfile/web/static/assets/{PivotValidation-f92137d2.js → PivotValidation-39386e95.js} +3 -3
  71. flowfile/web/static/assets/PivotValidation-41b57ad6.css +13 -0
  72. flowfile/web/static/assets/{PivotValidation-76dd431a.js → PivotValidation-63de1f73.js} +3 -3
  73. flowfile/web/static/assets/{PolarsCode-650322d1.css → PolarsCode-2b1f1f23.css} +4 -4
  74. flowfile/web/static/assets/{PolarsCode-889c3008.js → PolarsCode-f9d69217.js} +18 -9
  75. flowfile/web/static/assets/PopOver-b22f049e.js +939 -0
  76. flowfile/web/static/assets/PopOver-d96599db.css +33 -0
  77. flowfile/web/static/assets/{Read-6b17491f.css → Read-36e7bd51.css} +12 -12
  78. flowfile/web/static/assets/{Read-637b72a7.js → Read-aec2e377.js} +83 -105
  79. flowfile/web/static/assets/{RecordCount-2b050c41.js → RecordCount-78ed6845.js} +6 -4
  80. flowfile/web/static/assets/{RecordId-81df7784.js → RecordId-2156e890.js} +8 -6
  81. flowfile/web/static/assets/{SQLQueryComponent-36cef432.css → SQLQueryComponent-1c2f26b4.css} +5 -5
  82. flowfile/web/static/assets/{SQLQueryComponent-88dcfe53.js → SQLQueryComponent-48c72f5b.js} +3 -3
  83. flowfile/web/static/assets/{Sample-258ad2a9.js → Sample-1352ca74.js} +6 -4
  84. flowfile/web/static/assets/SecretSelector-22b5ff89.js +113 -0
  85. flowfile/web/static/assets/SecretSelector-6329f743.css +43 -0
  86. flowfile/web/static/assets/{SecretManager-2a2cb7e2.js → SecretsView-17df66ee.js} +35 -36
  87. flowfile/web/static/assets/SecretsView-aa291340.css +38 -0
  88. flowfile/web/static/assets/{Select-850215fd.js → Select-0aee4c54.js} +9 -7
  89. flowfile/web/static/assets/{SettingsSection-55bae608.js → SettingsSection-0784e157.js} +3 -3
  90. flowfile/web/static/assets/{SettingsSection-71e6b7e3.css → SettingsSection-07fbbc39.css} +4 -4
  91. flowfile/web/static/assets/{SettingsSection-5c696bee.css → SettingsSection-26fe48d4.css} +4 -4
  92. flowfile/web/static/assets/{SettingsSection-2e4d03c4.css → SettingsSection-8f980839.css} +4 -4
  93. flowfile/web/static/assets/{SettingsSection-0e8d9123.js → SettingsSection-cd341bb6.js} +3 -3
  94. flowfile/web/static/assets/{SettingsSection-29b4fa6b.js → SettingsSection-f2002a6d.js} +3 -3
  95. flowfile/web/static/assets/{SingleSelect-bebd408b.js → SingleSelect-460cc0ea.js} +2 -2
  96. flowfile/web/static/assets/{SingleSelect.vue_vue_type_script_setup_true_lang-6093741c.js → SingleSelect.vue_vue_type_script_setup_true_lang-30741bb2.js} +1 -1
  97. flowfile/web/static/assets/{SliderInput-6a05ab61.js → SliderInput-5d926864.js} +7 -4
  98. flowfile/web/static/assets/SliderInput-f2e4f23c.css +4 -0
  99. flowfile/web/static/assets/{Sort-10ab48ed.js → Sort-3cdc971b.js} +9 -7
  100. flowfile/web/static/assets/{Unique-f9fb0809.css → Sort-8a871341.css} +10 -10
  101. flowfile/web/static/assets/{TextInput-df9d6259.js → TextInput-a2d0bfbd.js} +2 -2
  102. flowfile/web/static/assets/{TextInput.vue_vue_type_script_setup_true_lang-000e1178.js → TextInput.vue_vue_type_script_setup_true_lang-abad1ca2.js} +5 -2
  103. flowfile/web/static/assets/{TextToRows-5d2c1190.css → TextToRows-12afb4f4.css} +10 -10
  104. flowfile/web/static/assets/{TextToRows-6c2d93d8.js → TextToRows-918945f7.js} +11 -10
  105. flowfile/web/static/assets/{ToggleSwitch-0ff7ac52.js → ToggleSwitch-f0ef5196.js} +2 -2
  106. flowfile/web/static/assets/{ToggleSwitch.vue_vue_type_script_setup_true_lang-c6dc3029.js → ToggleSwitch.vue_vue_type_script_setup_true_lang-5605c793.js} +1 -1
  107. flowfile/web/static/assets/{UnavailableFields-5edd5322.css → UnavailableFields-54d2f518.css} +6 -6
  108. flowfile/web/static/assets/{UnavailableFields-1bab97cb.js → UnavailableFields-bdad6144.js} +4 -4
  109. flowfile/web/static/assets/{Union-af6c3d9b.css → Union-d6a8d7d5.css} +7 -7
  110. flowfile/web/static/assets/{Union-b563478a.js → Union-e8ab8c86.js} +8 -6
  111. flowfile/web/static/assets/{Unique-f90db5db.js → Unique-8cd4f976.js} +13 -22
  112. flowfile/web/static/assets/{Sort-3643d625.css → Unique-9fb2f567.css} +10 -10
  113. flowfile/web/static/assets/{Unpivot-1e422df3.css → Unpivot-710a2948.css} +7 -7
  114. flowfile/web/static/assets/{Unpivot-bcb0025f.js → Unpivot-8da14095.js} +10 -8
  115. flowfile/web/static/assets/{UnpivotValidation-c4e73b04.js → UnpivotValidation-6f7d89ff.js} +3 -3
  116. flowfile/web/static/assets/UnpivotValidation-d5ca3b7b.css +13 -0
  117. flowfile/web/static/assets/{VueGraphicWalker-bb8535e2.js → VueGraphicWalker-3fb312e1.js} +4 -4
  118. flowfile/web/static/assets/{VueGraphicWalker-ed5ab88b.css → VueGraphicWalker-430f0b86.css} +1 -1
  119. flowfile/web/static/assets/{api-4c8e3822.js → api-24483f0d.js} +1 -1
  120. flowfile/web/static/assets/{api-2d6adc4f.js → api-8b81fa73.js} +1 -1
  121. flowfile/web/static/assets/{dropDown-35135ba8.css → dropDown-3d8dc5fa.css} +40 -40
  122. flowfile/web/static/assets/{dropDown-1bca8a74.js → dropDown-ac0fda9d.js} +3 -3
  123. flowfile/web/static/assets/{fullEditor-2985687e.js → fullEditor-5497a84a.js} +11 -10
  124. flowfile/web/static/assets/{fullEditor-178376bb.css → fullEditor-a0be62b3.css} +74 -62
  125. flowfile/web/static/assets/{genericNodeSettings-924759c7.css → genericNodeSettings-3b2507ea.css} +10 -10
  126. flowfile/web/static/assets/{genericNodeSettings-0476ba4e.js → genericNodeSettings-99014e1d.js} +5 -5
  127. flowfile/web/static/assets/index-07dda503.js +38 -0
  128. flowfile/web/static/assets/index-3ba44389.js +2696 -0
  129. flowfile/web/static/assets/{index-50508d4d.css → index-e6289dd0.css} +1945 -569
  130. flowfile/web/static/assets/{index-246f201c.js → index-fb6493ae.js} +41626 -40869
  131. flowfile/web/static/assets/node.types-2c15bb7e.js +82 -0
  132. flowfile/web/static/assets/nodeInput-0eb13f1a.js +2 -0
  133. flowfile/web/static/assets/{outputCsv-d686eeaf.js → outputCsv-8f8ba42d.js} +3 -3
  134. flowfile/web/static/assets/outputCsv-b9a072af.css +2499 -0
  135. flowfile/web/static/assets/{outputExcel-8809ea2f.js → outputExcel-393f4fef.js} +3 -3
  136. flowfile/web/static/assets/{outputExcel-b41305c0.css → outputExcel-f5d272b2.css} +26 -26
  137. flowfile/web/static/assets/{outputParquet-53ba645a.js → outputParquet-07c81f65.js} +4 -4
  138. flowfile/web/static/assets/outputParquet-54597c3c.css +4 -0
  139. flowfile/web/static/assets/{readCsv-053bf97b.js → readCsv-07f6d9ad.js} +21 -20
  140. flowfile/web/static/assets/{readCsv-bca3ed53.css → readCsv-3bfac4c3.css} +15 -15
  141. flowfile/web/static/assets/{readExcel-e1b381ea.css → readExcel-3db6b763.css} +13 -13
  142. flowfile/web/static/assets/{readExcel-ad531eab.js → readExcel-ed69bc8f.js} +10 -12
  143. flowfile/web/static/assets/{readParquet-cee068e2.css → readParquet-c5244ad5.css} +4 -4
  144. flowfile/web/static/assets/{readParquet-58e899a1.js → readParquet-e3ed4528.js} +4 -7
  145. flowfile/web/static/assets/secrets.api-002e7d7e.js +65 -0
  146. flowfile/web/static/assets/{selectDynamic-b38de2ba.js → selectDynamic-80b92899.js} +5 -5
  147. flowfile/web/static/assets/{selectDynamic-aa913ff4.css → selectDynamic-f2fb394f.css} +21 -20
  148. flowfile/web/static/assets/{vue-codemirror.esm-db9b8936.js → vue-codemirror.esm-0965f39f.js} +31 -637
  149. flowfile/web/static/assets/{vue-content-loader.es-b5f3ac30.js → vue-content-loader.es-c506ad97.js} +1 -1
  150. flowfile/web/static/index.html +2 -2
  151. {flowfile-0.4.1.dist-info → flowfile-0.5.3.dist-info}/METADATA +4 -4
  152. flowfile-0.5.3.dist-info/RECORD +402 -0
  153. {flowfile-0.4.1.dist-info → flowfile-0.5.3.dist-info}/WHEEL +1 -1
  154. {flowfile-0.4.1.dist-info → flowfile-0.5.3.dist-info}/entry_points.txt +1 -0
  155. flowfile_core/__init__.py +13 -3
  156. flowfile_core/auth/jwt.py +51 -16
  157. flowfile_core/auth/models.py +32 -7
  158. flowfile_core/auth/password.py +89 -0
  159. flowfile_core/auth/secrets.py +8 -6
  160. flowfile_core/configs/__init__.py +9 -7
  161. flowfile_core/configs/flow_logger.py +15 -14
  162. flowfile_core/configs/node_store/__init__.py +72 -4
  163. flowfile_core/configs/node_store/nodes.py +155 -172
  164. flowfile_core/configs/node_store/user_defined_node_registry.py +108 -27
  165. flowfile_core/configs/settings.py +28 -15
  166. flowfile_core/database/connection.py +7 -6
  167. flowfile_core/database/init_db.py +96 -2
  168. flowfile_core/database/models.py +3 -1
  169. flowfile_core/fileExplorer/__init__.py +17 -0
  170. flowfile_core/fileExplorer/funcs.py +123 -57
  171. flowfile_core/fileExplorer/utils.py +10 -11
  172. flowfile_core/flowfile/_extensions/real_time_interface.py +10 -8
  173. flowfile_core/flowfile/analytics/analytics_processor.py +27 -24
  174. flowfile_core/flowfile/analytics/graphic_walker.py +11 -12
  175. flowfile_core/flowfile/analytics/utils.py +1 -1
  176. flowfile_core/flowfile/code_generator/code_generator.py +391 -279
  177. flowfile_core/flowfile/connection_manager/_connection_manager.py +6 -5
  178. flowfile_core/flowfile/connection_manager/models.py +1 -1
  179. flowfile_core/flowfile/database_connection_manager/db_connections.py +60 -44
  180. flowfile_core/flowfile/database_connection_manager/models.py +1 -1
  181. flowfile_core/flowfile/extensions.py +17 -12
  182. flowfile_core/flowfile/flow_data_engine/cloud_storage_reader.py +34 -32
  183. flowfile_core/flowfile/flow_data_engine/create/funcs.py +152 -103
  184. flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +526 -477
  185. flowfile_core/flowfile/flow_data_engine/flow_file_column/interface.py +2 -2
  186. flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +92 -52
  187. flowfile_core/flowfile/flow_data_engine/flow_file_column/polars_type.py +12 -11
  188. flowfile_core/flowfile/flow_data_engine/flow_file_column/type_registry.py +6 -6
  189. flowfile_core/flowfile/flow_data_engine/flow_file_column/utils.py +26 -30
  190. flowfile_core/flowfile/flow_data_engine/fuzzy_matching/prepare_for_fuzzy_match.py +43 -32
  191. flowfile_core/flowfile/flow_data_engine/join/__init__.py +1 -1
  192. flowfile_core/flowfile/flow_data_engine/join/utils.py +11 -9
  193. flowfile_core/flowfile/flow_data_engine/join/verify_integrity.py +15 -11
  194. flowfile_core/flowfile/flow_data_engine/pivot_table.py +5 -7
  195. flowfile_core/flowfile/flow_data_engine/polars_code_parser.py +95 -82
  196. flowfile_core/flowfile/flow_data_engine/read_excel_tables.py +66 -65
  197. flowfile_core/flowfile/flow_data_engine/sample_data.py +27 -21
  198. flowfile_core/flowfile/flow_data_engine/subprocess_operations/__init__.py +1 -1
  199. flowfile_core/flowfile/flow_data_engine/subprocess_operations/models.py +13 -11
  200. flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +360 -191
  201. flowfile_core/flowfile/flow_data_engine/threaded_processes.py +8 -8
  202. flowfile_core/flowfile/flow_data_engine/utils.py +101 -67
  203. flowfile_core/flowfile/flow_graph.py +1011 -561
  204. flowfile_core/flowfile/flow_graph_utils.py +31 -49
  205. flowfile_core/flowfile/flow_node/flow_node.py +332 -232
  206. flowfile_core/flowfile/flow_node/models.py +54 -41
  207. flowfile_core/flowfile/flow_node/schema_callback.py +14 -19
  208. flowfile_core/flowfile/graph_tree/graph_tree.py +41 -41
  209. flowfile_core/flowfile/handler.py +82 -32
  210. flowfile_core/flowfile/manage/compatibility_enhancements.py +493 -47
  211. flowfile_core/flowfile/manage/io_flowfile.py +391 -0
  212. flowfile_core/flowfile/node_designer/__init__.py +15 -13
  213. flowfile_core/flowfile/node_designer/_type_registry.py +34 -37
  214. flowfile_core/flowfile/node_designer/custom_node.py +162 -36
  215. flowfile_core/flowfile/node_designer/ui_components.py +136 -35
  216. flowfile_core/flowfile/schema_callbacks.py +77 -54
  217. flowfile_core/flowfile/setting_generator/__init__.py +0 -1
  218. flowfile_core/flowfile/setting_generator/setting_generator.py +6 -5
  219. flowfile_core/flowfile/setting_generator/settings.py +72 -55
  220. flowfile_core/flowfile/sources/external_sources/base_class.py +12 -10
  221. flowfile_core/flowfile/sources/external_sources/custom_external_sources/external_source.py +27 -17
  222. flowfile_core/flowfile/sources/external_sources/custom_external_sources/sample_users.py +9 -9
  223. flowfile_core/flowfile/sources/external_sources/factory.py +0 -1
  224. flowfile_core/flowfile/sources/external_sources/sql_source/models.py +45 -31
  225. flowfile_core/flowfile/sources/external_sources/sql_source/sql_source.py +198 -73
  226. flowfile_core/flowfile/sources/external_sources/sql_source/utils.py +250 -196
  227. flowfile_core/flowfile/util/calculate_layout.py +9 -13
  228. flowfile_core/flowfile/util/execution_orderer.py +25 -17
  229. flowfile_core/flowfile/util/node_skipper.py +4 -4
  230. flowfile_core/flowfile/utils.py +19 -21
  231. flowfile_core/main.py +26 -19
  232. flowfile_core/routes/auth.py +284 -11
  233. flowfile_core/routes/cloud_connections.py +25 -25
  234. flowfile_core/routes/logs.py +21 -29
  235. flowfile_core/routes/public.py +3 -3
  236. flowfile_core/routes/routes.py +77 -43
  237. flowfile_core/routes/secrets.py +25 -27
  238. flowfile_core/routes/user_defined_components.py +483 -4
  239. flowfile_core/run_lock.py +0 -1
  240. flowfile_core/schemas/__init__.py +4 -6
  241. flowfile_core/schemas/analysis_schemas/graphic_walker_schemas.py +55 -55
  242. flowfile_core/schemas/cloud_storage_schemas.py +59 -55
  243. flowfile_core/schemas/input_schema.py +398 -154
  244. flowfile_core/schemas/output_model.py +50 -35
  245. flowfile_core/schemas/schemas.py +207 -67
  246. flowfile_core/schemas/transform_schema.py +1360 -435
  247. flowfile_core/schemas/yaml_types.py +117 -0
  248. flowfile_core/secret_manager/secret_manager.py +17 -13
  249. flowfile_core/{flowfile/node_designer/data_types.py → types.py} +33 -3
  250. flowfile_core/utils/arrow_reader.py +7 -6
  251. flowfile_core/utils/excel_file_manager.py +3 -3
  252. flowfile_core/utils/fileManager.py +7 -7
  253. flowfile_core/utils/fl_executor.py +8 -10
  254. flowfile_core/utils/utils.py +4 -4
  255. flowfile_core/utils/validate_setup.py +5 -4
  256. flowfile_frame/__init__.py +107 -50
  257. flowfile_frame/adapters.py +2 -9
  258. flowfile_frame/adding_expr.py +73 -32
  259. flowfile_frame/cloud_storage/frame_helpers.py +27 -23
  260. flowfile_frame/cloud_storage/secret_manager.py +12 -26
  261. flowfile_frame/config.py +2 -5
  262. flowfile_frame/expr.py +311 -218
  263. flowfile_frame/expr.pyi +160 -159
  264. flowfile_frame/expr_name.py +23 -23
  265. flowfile_frame/flow_frame.py +581 -489
  266. flowfile_frame/flow_frame.pyi +123 -104
  267. flowfile_frame/flow_frame_methods.py +236 -252
  268. flowfile_frame/group_frame.py +50 -20
  269. flowfile_frame/join.py +2 -2
  270. flowfile_frame/lazy.py +129 -87
  271. flowfile_frame/lazy_methods.py +83 -30
  272. flowfile_frame/list_name_space.py +55 -50
  273. flowfile_frame/selectors.py +148 -68
  274. flowfile_frame/series.py +9 -7
  275. flowfile_frame/utils.py +19 -21
  276. flowfile_worker/__init__.py +12 -4
  277. flowfile_worker/configs.py +11 -19
  278. flowfile_worker/create/__init__.py +14 -27
  279. flowfile_worker/create/funcs.py +143 -94
  280. flowfile_worker/create/models.py +139 -68
  281. flowfile_worker/create/pl_types.py +14 -15
  282. flowfile_worker/create/read_excel_tables.py +34 -41
  283. flowfile_worker/create/utils.py +22 -19
  284. flowfile_worker/external_sources/s3_source/main.py +18 -51
  285. flowfile_worker/external_sources/s3_source/models.py +34 -27
  286. flowfile_worker/external_sources/sql_source/main.py +8 -5
  287. flowfile_worker/external_sources/sql_source/models.py +13 -9
  288. flowfile_worker/flow_logger.py +10 -8
  289. flowfile_worker/funcs.py +214 -155
  290. flowfile_worker/main.py +11 -17
  291. flowfile_worker/models.py +35 -28
  292. flowfile_worker/process_manager.py +2 -3
  293. flowfile_worker/routes.py +121 -93
  294. flowfile_worker/secrets.py +9 -6
  295. flowfile_worker/spawner.py +80 -49
  296. flowfile_worker/utils.py +3 -2
  297. shared/__init__.py +2 -7
  298. shared/storage_config.py +25 -13
  299. test_utils/postgres/commands.py +3 -2
  300. test_utils/postgres/fixtures.py +9 -9
  301. test_utils/s3/commands.py +1 -1
  302. test_utils/s3/data_generator.py +3 -4
  303. test_utils/s3/demo_data_generator.py +4 -7
  304. test_utils/s3/fixtures.py +7 -5
  305. tools/migrate/README.md +56 -0
  306. tools/migrate/__init__.py +12 -0
  307. tools/migrate/__main__.py +118 -0
  308. tools/migrate/legacy_schemas.py +682 -0
  309. tools/migrate/migrate.py +610 -0
  310. tools/migrate/tests/__init__.py +0 -0
  311. tools/migrate/tests/conftest.py +21 -0
  312. tools/migrate/tests/test_migrate.py +622 -0
  313. tools/migrate/tests/test_migration_e2e.py +1009 -0
  314. tools/migrate/tests/test_node_migrations.py +843 -0
  315. flowfile/web/static/assets/CloudConnectionManager-2dfdce2f.css +0 -86
  316. flowfile/web/static/assets/CustomNode-74a37f74.css +0 -32
  317. flowfile/web/static/assets/DatabaseManager-30fa27e5.css +0 -64
  318. flowfile/web/static/assets/Filter-812dcbca.js +0 -164
  319. flowfile/web/static/assets/Filter-f62091b3.css +0 -20
  320. flowfile/web/static/assets/ManualInput-3246a08d.css +0 -96
  321. flowfile/web/static/assets/PivotValidation-891ddfb0.css +0 -13
  322. flowfile/web/static/assets/PivotValidation-c46cd420.css +0 -13
  323. flowfile/web/static/assets/SliderInput-b8fb6a8c.css +0 -4
  324. flowfile/web/static/assets/UnpivotValidation-0d240eeb.css +0 -13
  325. flowfile/web/static/assets/outputCsv-9cc59e0b.css +0 -2499
  326. flowfile/web/static/assets/outputParquet-cf8cf3f2.css +0 -4
  327. flowfile/web/static/assets/secretApi-538058f3.js +0 -46
  328. flowfile/web/static/assets/vue-codemirror-bccfde04.css +0 -32
  329. flowfile-0.4.1.dist-info/RECORD +0 -376
  330. flowfile_core/flowfile/manage/open_flowfile.py +0 -143
  331. {flowfile-0.4.1.dist-info → flowfile-0.5.3.dist-info}/licenses/LICENSE +0 -0
  332. /flowfile_core/flowfile/manage/manage_flowfile.py → /tools/__init__.py +0 -0
build_backends/main.py CHANGED
@@ -1,12 +1,11 @@
1
1
  import os
2
- import subprocess
3
2
  import platform
4
3
  import shutil
4
+ import subprocess
5
5
  from pathlib import Path
6
- from typing import List
7
6
 
8
7
 
9
- def merge_directories(directories: List[str], target_dir: str, cleanup_after_merge: bool = True):
8
+ def merge_directories(directories: list[str], target_dir: str, cleanup_after_merge: bool = True):
10
9
  """
11
10
  Merge all files from two folders into a new target directory.
12
11
  After successful merge, removes the original folders.
@@ -16,9 +15,9 @@ def merge_directories(directories: List[str], target_dir: str, cleanup_after_mer
16
15
  for directory in directories:
17
16
  if os.path.exists(directory):
18
17
  shutil.copytree(directory, target_dir, dirs_exist_ok=True)
19
- print('Merged directories:', directories, 'into', target_dir)
18
+ print("Merged directories:", directories, "into", target_dir)
20
19
  if cleanup_after_merge:
21
- print('Cleaning up directories:', directories)
20
+ print("Cleaning up directories:", directories)
22
21
  for directory in directories:
23
22
  if os.path.exists(directory):
24
23
  shutil.rmtree(directory)
@@ -197,25 +196,28 @@ coll = COLLECT(
197
196
  name='{output_name}'
198
197
  )
199
198
  '''
200
- spec_path = f'{output_name}.spec'
201
- with open(spec_path, 'w') as f:
199
+ spec_path = f"{output_name}.spec"
200
+ with open(spec_path, "w") as f:
202
201
  f.write(spec_content)
203
202
  return spec_path
204
203
 
204
+
205
205
  def build_backend(directory, script_name, output_name, hidden_imports=None):
206
206
  try:
207
207
  spec_path = create_spec_file(directory, script_name, output_name, hidden_imports)
208
208
 
209
209
  env = os.environ.copy()
210
- env['PYTHONOPTIMIZE'] = "1"
210
+ env["PYTHONOPTIMIZE"] = "1"
211
211
 
212
212
  command = [
213
213
  "pyinstaller",
214
214
  "--clean",
215
215
  "-y",
216
- "--dist", "./services_dist",
217
- "--workpath", "/tmp" if platform.system() != "Windows" else os.path.join(os.getenv('TEMP'), 'pyinstaller'),
218
- spec_path
216
+ "--dist",
217
+ "./services_dist",
218
+ "--workpath",
219
+ "/tmp" if platform.system() != "Windows" else os.path.join(os.getenv("TEMP"), "pyinstaller"),
220
+ spec_path,
219
221
  ]
220
222
 
221
223
  print(f"Building {output_name}...")
@@ -247,7 +249,7 @@ def combine_packages():
247
249
  exe_name = project + ".exe" if platform.system() == "Windows" else project
248
250
  src_exe = os.path.join(src_dir, exe_name)
249
251
  temp_target_exe = os.path.join(dist_dir, "_" + exe_name)
250
- target_exe = os.path.join(dist_dir, exe_name)
252
+ target_exe = os.path.join(dist_dir, exe_name)
251
253
  if os.path.exists(src_exe) and os.path.isfile(src_exe):
252
254
  # Instead of removing, overwrite the target
253
255
  shutil.move(src_exe, temp_target_exe)
@@ -257,9 +259,10 @@ def combine_packages():
257
259
  if platform.system() == "Windows" and os.path.exists(os.path.join(dist_dir, project)):
258
260
  shutil.rmtree(os.path.join(dist_dir, project))
259
261
 
262
+
260
263
  def main():
261
264
  # Clean previous builds
262
- for dir_name in ['services_dist']:
265
+ for dir_name in ["services_dist"]:
263
266
  if os.path.exists(dir_name):
264
267
  shutil.rmtree(dir_name)
265
268
 
@@ -286,20 +289,20 @@ def main():
286
289
  # Build flowfile_worker
287
290
 
288
291
  if not build_backend(
289
- directory=os.path.join("flowfile_worker", "flowfile_worker"),
290
- script_name="main.py",
291
- output_name="flowfile_worker",
292
- hidden_imports=common_imports
292
+ directory=os.path.join("flowfile_worker", "flowfile_worker"),
293
+ script_name="main.py",
294
+ output_name="flowfile_worker",
295
+ hidden_imports=common_imports,
293
296
  ):
294
297
  builds_successful = False
295
298
 
296
299
  # Build flowfile_core
297
300
 
298
301
  if not build_backend(
299
- directory=os.path.join("flowfile_core", "flowfile_core"),
300
- script_name="main.py",
301
- output_name="flowfile_core",
302
- hidden_imports=common_imports
302
+ directory=os.path.join("flowfile_core", "flowfile_core"),
303
+ script_name="main.py",
304
+ output_name="flowfile_core",
305
+ hidden_imports=common_imports,
303
306
  ):
304
307
  builds_successful = False
305
308
 
@@ -310,4 +313,4 @@ def main():
310
313
 
311
314
 
312
315
  # if __name__ == "__main__":
313
- # main()
316
+ # main()
@@ -1,14 +1,9 @@
1
- import os
2
- import subprocess
3
- import platform
4
- from concurrent.futures import ProcessPoolExecutor, wait
5
-
6
1
  import subprocess
7
2
  import time
8
- import requests
9
- from statistics import mean, stdev
10
- import sys
11
3
  from datetime import datetime
4
+ from statistics import mean, stdev
5
+
6
+ import requests
12
7
 
13
8
 
14
9
  def wait_for_endpoint(url, timeout=60):
@@ -27,11 +22,7 @@ def wait_for_endpoint(url, timeout=60):
27
22
  def shutdown_service():
28
23
  """Shutdown the service gracefully using the shutdown endpoint."""
29
24
  try:
30
- response = requests.post(
31
- 'http://0.0.0.0:63578/shutdown',
32
- headers={'accept': 'application/json'},
33
- data=''
34
- )
25
+ response = requests.post("http://0.0.0.0:63578/shutdown", headers={"accept": "application/json"}, data="")
35
26
  print("Shutdown request sent, waiting for service to stop...")
36
27
  time.sleep(1) # Wait 10 seconds to ensure the service is fully stopped
37
28
  return True
@@ -97,14 +88,14 @@ def run_comparison_test(old_exe, new_exe, num_runs=3):
97
88
  print("\nResults:")
98
89
  print("-" * 50)
99
90
  if old_times:
100
- print(f"Old executable:")
91
+ print("Old executable:")
101
92
  print(f" Average: {mean(old_times):.3f} seconds")
102
93
  print(f" Std Dev: {stdev(old_times):.3f} seconds" if len(old_times) > 1 else " Std Dev: N/A")
103
94
  print(f" Min: {min(old_times):.3f} seconds")
104
95
  print(f" Max: {max(old_times):.3f} seconds")
105
96
 
106
97
  if new_times:
107
- print(f"\nNew executable:")
98
+ print("\nNew executable:")
108
99
  print(f" Average: {mean(new_times):.3f} seconds")
109
100
  print(f" Std Dev: {stdev(new_times):.3f} seconds" if len(new_times) > 1 else " Std Dev: N/A")
110
101
  print(f" Min: {min(new_times):.3f} seconds")
@@ -112,13 +103,13 @@ def run_comparison_test(old_exe, new_exe, num_runs=3):
112
103
 
113
104
  if old_times and new_times:
114
105
  improvement = (mean(old_times) - mean(new_times)) / mean(old_times) * 100
115
- print(f"\nPerformance difference:")
106
+ print("\nPerformance difference:")
116
107
  print(f" {improvement:.1f}% {'faster' if improvement > 0 else 'slower'} than old version")
117
108
 
118
109
 
119
110
  if __name__ == "__main__":
120
- old_exe = '/Users/edwardvanechoud/personal_dev/Flowfile/dist/flowfile_core/flowfile_core'
121
- new_exe = '/Users/edwardvanechoud/personal_dev/Flowfile/dist_flowfile_core/flowfile_core'
111
+ old_exe = "/Users/edwardvanechoud/personal_dev/Flowfile/dist/flowfile_core/flowfile_core"
112
+ new_exe = "/Users/edwardvanechoud/personal_dev/Flowfile/dist_flowfile_core/flowfile_core"
122
113
 
123
114
  run_comparison_test(old_exe, old_exe)
124
115
 
@@ -199,4 +190,4 @@ if __name__ == "__main__":
199
190
  #
200
191
  #
201
192
  # if __name__ == "__main__":
202
- # main()
193
+ # main()
flowfile/__init__.py CHANGED
@@ -7,100 +7,206 @@ This package ties together the FlowFile ecosystem components:
7
7
  - flowfile_worker: Computation engine
8
8
  """
9
9
 
10
- __version__ = "0.4.1"
10
+ from importlib.metadata import PackageNotFoundError, version
11
+
12
+ try:
13
+ __version__ = version("Flowfile")
14
+ except PackageNotFoundError:
15
+ __version__ = "0.5.0"
11
16
 
12
- import os
13
17
  import logging
18
+ import os
14
19
 
15
- os.environ['FLOWFILE_WORKER_PORT'] = "63578"
16
- os.environ['FLOWFILE_SINGLE_FILE_MODE'] = "1"
20
+ os.environ["FLOWFILE_WORKER_PORT"] = "63578"
21
+ os.environ["FLOWFILE_SINGLE_FILE_MODE"] = "1"
17
22
 
18
- from flowfile.web import start_server as start_web_ui
19
- from flowfile.api import (open_graph_in_editor)
20
- from flowfile_frame.flow_frame import (
21
- FlowFrame
23
+ from polars.datatypes import (
24
+ Array,
25
+ Binary,
26
+ Boolean,
27
+ Categorical,
28
+ DataType,
29
+ DataTypeClass,
30
+ Date,
31
+ Datetime,
32
+ Decimal,
33
+ Duration,
34
+ Enum,
35
+ Field,
36
+ Float32,
37
+ Float64,
38
+ Int8,
39
+ Int16,
40
+ Int32,
41
+ Int64,
42
+ Int128,
43
+ List,
44
+ Null,
45
+ Object,
46
+ String,
47
+ Struct,
48
+ Time,
49
+ UInt8,
50
+ UInt16,
51
+ UInt32,
52
+ UInt64,
53
+ Unknown,
54
+ Utf8,
22
55
  )
23
- from flowfile_core.schemas.cloud_storage_schemas import FullCloudStorageConnection
24
- from flowfile_core.flowfile.flow_graph import FlowGraph
56
+
57
+ from flowfile.api import open_graph_in_editor
58
+ from flowfile.web import start_server as start_web_ui
59
+ from flowfile_core.flowfile import node_designer
25
60
  from flowfile_core.flowfile.flow_data_engine.flow_data_engine import FlowDataEngine
26
- from flowfile_core.flowfile.flow_node.flow_node import FlowNode
27
61
  from flowfile_core.flowfile.flow_data_engine.flow_file_column.main import FlowfileColumn
62
+ from flowfile_core.flowfile.flow_graph import FlowGraph
63
+ from flowfile_core.flowfile.flow_node.flow_node import FlowNode
28
64
  from flowfile_core.schemas import input_schema as node_interface
29
- from flowfile_core.schemas.schemas import FlowSettings, FlowInformation
30
65
  from flowfile_core.schemas import transform_schema
31
- from flowfile_frame import (read_csv, read_parquet, from_dict, concat, scan_csv, scan_parquet,
32
- scan_delta,
33
- scan_parquet_from_cloud_storage,
34
- scan_json_from_cloud_storage,
35
- scan_csv_from_cloud_storage,
36
- get_all_available_cloud_storage_connections,
37
- create_cloud_storage_connection,
38
- del_cloud_storage_connection,
39
- create_cloud_storage_connection_if_not_exists,
40
- FuzzyMapping)
41
- from flowfile_frame.expr import (
42
- col, lit, column, cum_count, len,
43
- sum, min, max, mean, count, when
66
+ from flowfile_core.schemas.cloud_storage_schemas import FullCloudStorageConnection
67
+ from flowfile_core.schemas.schemas import FlowInformation, FlowSettings
68
+ from flowfile_frame import (
69
+ FuzzyMapping,
70
+ concat,
71
+ create_cloud_storage_connection,
72
+ create_cloud_storage_connection_if_not_exists,
73
+ del_cloud_storage_connection,
74
+ from_dict,
75
+ get_all_available_cloud_storage_connections,
76
+ read_csv,
77
+ read_parquet,
78
+ scan_csv,
79
+ scan_csv_from_cloud_storage,
80
+ scan_delta,
81
+ scan_json_from_cloud_storage,
82
+ scan_parquet,
83
+ scan_parquet_from_cloud_storage,
44
84
  )
85
+ from flowfile_frame.expr import col, column, count, cum_count, len, lit, max, mean, min, sum, when
86
+ from flowfile_frame.flow_frame import FlowFrame
45
87
  from flowfile_frame.group_frame import GroupByFrame
46
- from flowfile_frame.utils import create_flow_graph
47
88
  from flowfile_frame.selectors import (
48
- numeric, float_, integer, string, temporal,
49
- datetime, date, time, duration, boolean,
50
- categorical, object_, list_, struct, all_,
51
- by_dtype, contains, starts_with, ends_with, matches
52
- )
53
-
54
- from polars.datatypes import (
55
- Int8, Int16, Int32, Int64, Int128,
56
- UInt8, UInt16, UInt32, UInt64,
57
- Float32, Float64,
58
- Boolean, String, Utf8, Binary, Null,
59
- List, Array, Struct, Object,
60
- Date, Time, Datetime, Duration,
61
- Categorical, Decimal, Enum, Unknown,
62
- DataType, DataTypeClass, Field
89
+ all_,
90
+ boolean,
91
+ by_dtype,
92
+ categorical,
93
+ contains,
94
+ date,
95
+ datetime,
96
+ duration,
97
+ ends_with,
98
+ float_,
99
+ integer,
100
+ list_,
101
+ matches,
102
+ numeric,
103
+ object_,
104
+ starts_with,
105
+ string,
106
+ struct,
107
+ temporal,
108
+ time,
63
109
  )
64
-
65
- from flowfile_core.flowfile import node_designer
66
-
110
+ from flowfile_frame.utils import create_flow_graph
67
111
 
68
112
  __all__ = [
69
113
  # Core FlowFrame classes
70
- 'FlowFrame', 'GroupByFrame', 'FullCloudStorageConnection',
71
-
114
+ "FlowFrame",
115
+ "GroupByFrame",
116
+ "FullCloudStorageConnection",
72
117
  # Main creation functions
73
- 'read_csv', 'read_parquet', 'from_dict', 'concat', 'scan_csv', 'scan_parquet', 'scan_delta',
74
- 'scan_parquet_from_cloud_storage', 'scan_json_from_cloud_storage',
75
- 'scan_csv_from_cloud_storage', 'get_all_available_cloud_storage_connections', 'create_cloud_storage_connection',
76
- 'del_cloud_storage_connection', 'create_cloud_storage_connection_if_not_exists',
77
- 'FlowGraph', 'FlowDataEngine', 'node_interface', 'FlowSettings', 'transform_schema',
78
- 'FlowNode', 'FlowfileColumn', 'FlowInformation', "FuzzyMapping",
79
-
118
+ "read_csv",
119
+ "read_parquet",
120
+ "from_dict",
121
+ "concat",
122
+ "scan_csv",
123
+ "scan_parquet",
124
+ "scan_delta",
125
+ "scan_parquet_from_cloud_storage",
126
+ "scan_json_from_cloud_storage",
127
+ "scan_csv_from_cloud_storage",
128
+ "get_all_available_cloud_storage_connections",
129
+ "create_cloud_storage_connection",
130
+ "del_cloud_storage_connection",
131
+ "create_cloud_storage_connection_if_not_exists",
132
+ "FlowGraph",
133
+ "FlowDataEngine",
134
+ "node_interface",
135
+ "FlowSettings",
136
+ "transform_schema",
137
+ "FlowNode",
138
+ "FlowfileColumn",
139
+ "FlowInformation",
140
+ "FuzzyMapping",
80
141
  # Expression API
81
- 'col', 'lit', 'column', 'cum_count', 'len',
82
- 'sum', 'min', 'max', 'mean', 'count', 'when',
83
-
142
+ "col",
143
+ "lit",
144
+ "column",
145
+ "cum_count",
146
+ "len",
147
+ "sum",
148
+ "min",
149
+ "max",
150
+ "mean",
151
+ "count",
152
+ "when",
84
153
  # Selector utilities
85
- 'numeric', 'float_', 'integer', 'string', 'temporal',
86
- 'datetime', 'date', 'time', 'duration', 'boolean',
87
- 'categorical', 'object_', 'list_', 'struct', 'all_',
88
- 'by_dtype', 'contains', 'starts_with', 'ends_with', 'matches',
89
-
154
+ "numeric",
155
+ "float_",
156
+ "integer",
157
+ "string",
158
+ "temporal",
159
+ "datetime",
160
+ "date",
161
+ "time",
162
+ "duration",
163
+ "boolean",
164
+ "categorical",
165
+ "object_",
166
+ "list_",
167
+ "struct",
168
+ "all_",
169
+ "by_dtype",
170
+ "contains",
171
+ "starts_with",
172
+ "ends_with",
173
+ "matches",
90
174
  "node_designer",
91
-
92
175
  # Utilities
93
- 'create_flow_graph', 'open_graph_in_editor',
94
-
176
+ "create_flow_graph",
177
+ "open_graph_in_editor",
95
178
  # Data types from Polars
96
- 'Int8', 'Int16', 'Int32', 'Int64', 'Int128',
97
- 'UInt8', 'UInt16', 'UInt32', 'UInt64',
98
- 'Float32', 'Float64',
99
- 'Boolean', 'String', 'Utf8', 'Binary', 'Null',
100
- 'List', 'Array', 'Struct', 'Object',
101
- 'Date', 'Time', 'Datetime', 'Duration',
102
- 'Categorical', 'Decimal', 'Enum', 'Unknown',
103
- 'DataType', 'DataTypeClass', 'Field',
104
- 'start_web_ui'
179
+ "Int8",
180
+ "Int16",
181
+ "Int32",
182
+ "Int64",
183
+ "Int128",
184
+ "UInt8",
185
+ "UInt16",
186
+ "UInt32",
187
+ "UInt64",
188
+ "Float32",
189
+ "Float64",
190
+ "Boolean",
191
+ "String",
192
+ "Utf8",
193
+ "Binary",
194
+ "Null",
195
+ "List",
196
+ "Array",
197
+ "Struct",
198
+ "Object",
199
+ "Date",
200
+ "Time",
201
+ "Datetime",
202
+ "Duration",
203
+ "Categorical",
204
+ "Decimal",
205
+ "Enum",
206
+ "Unknown",
207
+ "DataType",
208
+ "DataTypeClass",
209
+ "Field",
210
+ "start_web_ui",
105
211
  ]
106
212
  logging.getLogger("PipelineHandler").setLevel(logging.WARNING)
flowfile/__main__.py CHANGED
@@ -1,16 +1,19 @@
1
1
  # flowfile/__main__.py
2
2
 
3
+
3
4
  def main():
4
5
  """
5
6
  Display information about FlowFile when run directly as a module.
6
7
  """
7
- import flowfile
8
8
  import argparse
9
9
 
10
+ import flowfile
11
+
10
12
  parser = argparse.ArgumentParser(description="FlowFile: A visual ETL tool with a Polars-like API")
11
13
  parser.add_argument("command", nargs="?", choices=["run"], help="Command to execute")
12
- parser.add_argument("component", nargs="?", choices=["ui", "core", "worker"],
13
- help="Component to run (ui, core, or worker)")
14
+ parser.add_argument(
15
+ "component", nargs="?", choices=["ui", "core", "worker"], help="Component to run (ui, core, or worker)"
16
+ )
14
17
  parser.add_argument("--host", default="127.0.0.1", help="Host to bind the server to")
15
18
  parser.add_argument("--port", type=int, default=63578, help="Port to bind the server to")
16
19
  parser.add_argument("--no-browser", action="store_true", help="Don't open a browser window")
@@ -21,18 +24,18 @@ def main():
21
24
  if args.command == "run" and args.component:
22
25
  if args.component == "ui":
23
26
  try:
24
- flowfile.start_web_ui(
25
- open_browser=not args.no_browser
26
- )
27
+ flowfile.start_web_ui(open_browser=not args.no_browser)
27
28
  except KeyboardInterrupt:
28
29
  print("\nFlowFile service stopped.")
29
30
  elif args.component == "core":
30
31
  # Only for direct core service usage
31
32
  from flowfile_core.main import run as run_core
33
+
32
34
  run_core(host=args.host, port=args.port)
33
35
  elif args.component == "worker":
34
36
  # Only for direct worker service usage
35
37
  from flowfile_worker.main import run as run_worker
38
+
36
39
  run_worker(host=args.host, port=args.port)
37
40
  else:
38
41
  # Default action - show info
@@ -54,4 +57,4 @@ def main():
54
57
  print(" import flowfile as ff")
55
58
  print(" df = ff.read_csv('data.csv')")
56
59
  print(" result = df.filter(ff.col('value') > 10)")
57
- print(" ff.open_graph_in_editor(result)")
60
+ print(" ff.open_graph_in_editor(result)")