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
@@ -1,4 +1,5 @@
1
- from typing import Any, Dict, List, Optional, Literal
1
+ from typing import Any, Literal
2
+
2
3
  from pydantic import BaseModel, Field, model_validator
3
4
 
4
5
 
@@ -12,107 +13,106 @@ class Expression(BaseModel):
12
13
  expression: str # Example attribute
13
14
 
14
15
 
15
- AnalyticTypeLit = Literal['measure', 'dimension']
16
+ AnalyticTypeLit = Literal["measure", "dimension"]
16
17
 
17
18
 
18
19
  class IField(BaseModel):
19
20
  fid: str
20
21
  name: str
21
- basename: Optional[str] = None
22
+ basename: str | None = None
22
23
  semanticType: str
23
24
  analyticType: AnalyticTypeLit
24
- cmp: Optional[str] = None
25
- geoRole: Optional[GeoRole] = None
26
- computed: Optional[bool] = None
27
- expression: Optional[str] = None
28
- timeUnit: Optional[str] = None
29
- path: Optional[List[str]] = None
30
- offset: Optional[int] = None
31
- aggName: Optional[str] = None
32
- aggregated: Optional[bool] = None
33
-
34
- @model_validator(mode='after')
25
+ cmp: str | None = None
26
+ geoRole: GeoRole | None = None
27
+ computed: bool | None = None
28
+ expression: str | None = None
29
+ timeUnit: str | None = None
30
+ path: list[str] | None = None
31
+ offset: int | None = None
32
+ aggName: str | None = None
33
+ aggregated: bool | None = None
34
+
35
+ @model_validator(mode="after")
35
36
  def set_default_aggname(self):
36
- if self.aggName is None and self.analyticType == 'measure':
37
+ if self.aggName is None and self.analyticType == "measure":
37
38
  self.aggName = "sum"
38
39
  return self
39
40
 
40
41
  def model_dump_dict(self):
41
42
  d = self.model_dump(exclude_none=True)
42
- d['offset'] = None
43
+ d["offset"] = None
43
44
  return d
44
45
 
45
46
 
46
47
  class ViewField(IField):
47
- sort: Optional[str] = None
48
+ sort: str | None = None
48
49
 
49
50
 
50
51
  class FilterField(ViewField):
51
52
  rule: Any
52
- enableAgg: Optional[bool] = False
53
+ enableAgg: bool | None = False
53
54
 
54
55
 
55
56
  class DraggableFieldState(BaseModel):
56
- dimensions: List[ViewField]
57
- measures: List[ViewField]
58
- rows: List[ViewField]
59
- columns: List[ViewField]
60
- color: List[ViewField]
61
- opacity: List[ViewField]
62
- size: List[ViewField]
63
- shape: List[ViewField]
64
- theta: List[ViewField]
65
- radius: List[ViewField]
66
- longitude: List[ViewField]
67
- latitude: List[ViewField]
68
- geoId: List[ViewField]
69
- details: List[ViewField]
70
- filters: List[FilterField]
71
- text: List[ViewField]
57
+ dimensions: list[ViewField]
58
+ measures: list[ViewField]
59
+ rows: list[ViewField]
60
+ columns: list[ViewField]
61
+ color: list[ViewField]
62
+ opacity: list[ViewField]
63
+ size: list[ViewField]
64
+ shape: list[ViewField]
65
+ theta: list[ViewField]
66
+ radius: list[ViewField]
67
+ longitude: list[ViewField]
68
+ latitude: list[ViewField]
69
+ geoId: list[ViewField]
70
+ details: list[ViewField]
71
+ filters: list[FilterField]
72
+ text: list[ViewField]
72
73
 
73
74
 
74
75
  class ConfigScale(BaseModel):
75
- rangeMax: Optional[int]
76
- rangeMin: Optional[int]
77
- domainMin: Optional[int]
78
- domainMax: Optional[int]
76
+ rangeMax: int | None
77
+ rangeMin: int | None
78
+ domainMin: int | None
79
+ domainMax: int | None
79
80
 
80
81
 
81
82
  class MutField(BaseModel):
82
83
  fid: str
83
- key: Optional[str] = None
84
- name: Optional[str] = None
85
- basename: Optional[str] = None
86
- disable: Optional[bool] = False
84
+ key: str | None = None
85
+ name: str | None = None
86
+ basename: str | None = None
87
+ disable: bool | None = False
87
88
  semanticType: str
88
89
  analyticType: AnalyticTypeLit
89
- path: Optional[List[str]] = None
90
- offset: Optional[int] = None
90
+ path: list[str] | None = None
91
+ offset: int | None = None
91
92
 
92
93
 
93
94
  class DataModel(BaseModel):
94
- data: List[Dict[str, Any]]
95
- fields: List[MutField]
95
+ data: list[dict[str, Any]]
96
+ fields: list[MutField]
96
97
 
97
98
 
98
- class IVisualConfigNew (BaseModel):
99
+ class IVisualConfigNew(BaseModel):
99
100
  defaultAggregated: bool
100
- geoms: List[str]
101
- coordSystem: Optional[str]
101
+ geoms: list[str]
102
+ coordSystem: str | None
102
103
  limit: int = None
103
- folds: Optional[List[str]] = []
104
- timezoneDisplayOffset: Optional[int] = None
104
+ folds: list[str] | None = []
105
+ timezoneDisplayOffset: int | None = None
105
106
 
106
107
 
107
108
  class Chart(BaseModel):
108
109
  visId: str
109
- name: Optional[str]
110
+ name: str | None
110
111
  encodings: DraggableFieldState
111
112
  config: IVisualConfigNew
112
113
 
113
114
 
114
- class GraphicWalkerInput (BaseModel):
115
+ class GraphicWalkerInput(BaseModel):
115
116
  dataModel: DataModel = Field(default_factory=lambda: DataModel(data=[], fields=[]))
116
117
  is_initial: bool = True
117
- specList: Optional[List[Any]] = None
118
-
118
+ specList: list[Any] | None = None
@@ -1,18 +1,20 @@
1
1
  """Cloud storage connection schemas for S3, ADLS, and other cloud providers."""
2
2
 
3
- from typing import Optional, Literal
4
- import polars as pl
5
3
  import base64
4
+ from typing import Literal
6
5
 
7
- from pydantic import BaseModel, SecretStr, field_validator, Field
6
+ import polars as pl
7
+ from pydantic import BaseModel, SecretStr, field_validator
8
8
 
9
9
  from flowfile_core.secret_manager.secret_manager import encrypt_secret
10
10
 
11
11
  CloudStorageType = Literal["s3", "adls", "gcs"]
12
- AuthMethod = Literal["access_key", "iam_role", "service_principal", "managed_identity", "sas_token", "aws-cli", "env_vars"]
12
+ AuthMethod = Literal[
13
+ "access_key", "iam_role", "service_principal", "managed_identity", "sas_token", "aws-cli", "env_vars"
14
+ ]
13
15
 
14
16
 
15
- def encrypt_for_worker(secret_value: SecretStr|None) -> str|None:
17
+ def encrypt_for_worker(secret_value: SecretStr | None) -> str | None:
16
18
  """
17
19
  Encrypts a secret value for use in worker contexts.
18
20
  This is a placeholder function that simulates encryption.
@@ -27,31 +29,32 @@ class AuthSettingsInput(BaseModel):
27
29
  The information needed for the user to provide the details that are needed to provide how to connect to the
28
30
  Cloud provider
29
31
  """
32
+
30
33
  storage_type: CloudStorageType
31
34
  auth_method: AuthMethod
32
- connection_name: Optional[str] = "None" # This is the reference to the item we will fetch that contains the data
35
+ connection_name: str | None = "None" # This is the reference to the item we will fetch that contains the data
33
36
 
34
37
 
35
38
  class FullCloudStorageConnectionWorkerInterface(AuthSettingsInput):
36
39
  """Internal model with decrypted secrets"""
37
40
 
38
41
  # AWS S3
39
- aws_region: Optional[str] = None
40
- aws_access_key_id: Optional[str] = None
41
- aws_secret_access_key: Optional[str] = None
42
- aws_role_arn: Optional[str] = None
43
- aws_allow_unsafe_html: Optional[bool] = None
44
- aws_session_token: Optional[str] = None
42
+ aws_region: str | None = None
43
+ aws_access_key_id: str | None = None
44
+ aws_secret_access_key: str | None = None
45
+ aws_role_arn: str | None = None
46
+ aws_allow_unsafe_html: bool | None = None
47
+ aws_session_token: str | None = None
45
48
 
46
49
  # Azure ADLS
47
- azure_account_name: Optional[str] = None
48
- azure_account_key: Optional[str] = None
49
- azure_tenant_id: Optional[str] = None
50
- azure_client_id: Optional[str] = None
51
- azure_client_secret: Optional[str] = None
50
+ azure_account_name: str | None = None
51
+ azure_account_key: str | None = None
52
+ azure_tenant_id: str | None = None
53
+ azure_client_id: str | None = None
54
+ azure_client_secret: str | None = None
52
55
 
53
56
  # Common
54
- endpoint_url: Optional[str] = None
57
+ endpoint_url: str | None = None
55
58
  verify_ssl: bool = True
56
59
 
57
60
 
@@ -59,22 +62,22 @@ class FullCloudStorageConnection(AuthSettingsInput):
59
62
  """Internal model with decrypted secrets"""
60
63
 
61
64
  # AWS S3
62
- aws_region: Optional[str] = None
63
- aws_access_key_id: Optional[str] = None
64
- aws_secret_access_key: Optional[SecretStr] = None
65
- aws_role_arn: Optional[str] = None
66
- aws_allow_unsafe_html: Optional[bool] = None
67
- aws_session_token: Optional[SecretStr] = None
65
+ aws_region: str | None = None
66
+ aws_access_key_id: str | None = None
67
+ aws_secret_access_key: SecretStr | None = None
68
+ aws_role_arn: str | None = None
69
+ aws_allow_unsafe_html: bool | None = None
70
+ aws_session_token: SecretStr | None = None
68
71
 
69
72
  # Azure ADLS
70
- azure_account_name: Optional[str] = None
71
- azure_account_key: Optional[SecretStr] = None
72
- azure_tenant_id: Optional[str] = None
73
- azure_client_id: Optional[str] = None
74
- azure_client_secret: Optional[SecretStr] = None
73
+ azure_account_name: str | None = None
74
+ azure_account_key: SecretStr | None = None
75
+ azure_tenant_id: str | None = None
76
+ azure_client_id: str | None = None
77
+ azure_client_secret: SecretStr | None = None
75
78
 
76
79
  # Common
77
- endpoint_url: Optional[str] = None
80
+ endpoint_url: str | None = None
78
81
  verify_ssl: bool = True
79
82
 
80
83
  def get_worker_interface(self) -> "FullCloudStorageConnectionWorkerInterface":
@@ -97,7 +100,7 @@ class FullCloudStorageConnection(AuthSettingsInput):
97
100
  azure_client_id=self.azure_client_id,
98
101
  azure_client_secret=encrypt_for_worker(self.azure_client_secret),
99
102
  endpoint_url=self.endpoint_url,
100
- verify_ssl=self.verify_ssl
103
+ verify_ssl=self.verify_ssl,
101
104
  )
102
105
 
103
106
 
@@ -105,14 +108,14 @@ class FullCloudStorageConnectionInterface(AuthSettingsInput):
105
108
  """API response model - no secrets exposed"""
106
109
 
107
110
  # Public fields only
108
- aws_allow_unsafe_html: Optional[bool] = None
109
- aws_region: Optional[str] = None
110
- aws_access_key_id: Optional[str] = None
111
- aws_role_arn: Optional[str] = None
112
- azure_account_name: Optional[str] = None
113
- azure_tenant_id: Optional[str] = None
114
- azure_client_id: Optional[str] = None
115
- endpoint_url: Optional[str] = None
111
+ aws_allow_unsafe_html: bool | None = None
112
+ aws_region: str | None = None
113
+ aws_access_key_id: str | None = None
114
+ aws_role_arn: str | None = None
115
+ azure_account_name: str | None = None
116
+ azure_tenant_id: str | None = None
117
+ azure_client_id: str | None = None
118
+ endpoint_url: str | None = None
116
119
  verify_ssl: bool = True
117
120
 
118
121
 
@@ -120,7 +123,7 @@ class CloudStorageSettings(BaseModel):
120
123
  """Settings for cloud storage nodes in the visual designer"""
121
124
 
122
125
  auth_mode: AuthMethod = "auto"
123
- connection_name: Optional[str] = None # Required only for 'reference' mode
126
+ connection_name: str | None = None # Required only for 'reference' mode
124
127
  resource_path: str # s3://bucket/path/to/file.csv
125
128
 
126
129
  @field_validator("auth_mode", mode="after")
@@ -136,12 +139,10 @@ class CloudStorageReadSettings(CloudStorageSettings):
136
139
 
137
140
  scan_mode: Literal["single_file", "directory"] = "single_file"
138
141
  file_format: Literal["csv", "parquet", "json", "delta", "iceberg"] = "parquet"
139
- # CSV specific options
140
- csv_has_header: Optional[bool] = True
141
- csv_delimiter: Optional[str] = ","
142
- csv_encoding: Optional[str] = "utf8"
143
- # Deltalake specific settings
144
- delta_version: Optional[int] = None
142
+ csv_has_header: bool | None = True
143
+ csv_delimiter: str | None = ","
144
+ csv_encoding: str | None = "utf8"
145
+ delta_version: int | None = None
145
146
 
146
147
 
147
148
  class CloudStorageReadSettingsInternal(BaseModel):
@@ -151,6 +152,7 @@ class CloudStorageReadSettingsInternal(BaseModel):
151
152
 
152
153
  class WriteSettingsWorkerInterface(BaseModel):
153
154
  """Settings for writing to cloud storage"""
155
+
154
156
  resource_path: str # s3://bucket/path/to/file.csv
155
157
 
156
158
  write_mode: Literal["overwrite", "append"] = "overwrite"
@@ -164,6 +166,7 @@ class WriteSettingsWorkerInterface(BaseModel):
164
166
 
165
167
  class CloudStorageWriteSettings(CloudStorageSettings, WriteSettingsWorkerInterface):
166
168
  """Settings for writing to cloud storage"""
169
+
167
170
  pass
168
171
 
169
172
  def get_write_setting_worker_interface(self) -> WriteSettingsWorkerInterface:
@@ -176,7 +179,7 @@ class CloudStorageWriteSettings(CloudStorageSettings, WriteSettingsWorkerInterfa
176
179
  file_format=self.file_format,
177
180
  parquet_compression=self.parquet_compression,
178
181
  csv_delimiter=self.csv_delimiter,
179
- csv_encoding=self.csv_encoding
182
+ csv_encoding=self.csv_encoding,
180
183
  )
181
184
 
182
185
 
@@ -187,6 +190,7 @@ class CloudStorageWriteSettingsInternal(BaseModel):
187
190
 
188
191
  class CloudStorageWriteSettingsWorkerInterface(BaseModel):
189
192
  """Settings for writing to cloud storage in worker context"""
193
+
190
194
  operation: str
191
195
  write_settings: WriteSettingsWorkerInterface
192
196
  connection: FullCloudStorageConnectionWorkerInterface
@@ -195,12 +199,12 @@ class CloudStorageWriteSettingsWorkerInterface(BaseModel):
195
199
 
196
200
 
197
201
  def get_cloud_storage_write_settings_worker_interface(
198
- write_settings: CloudStorageWriteSettings,
199
- connection: FullCloudStorageConnection,
200
- lf: pl.LazyFrame,
201
- flowfile_flow_id: int = 1,
202
- flowfile_node_id: int | str = -1,
203
- ) -> CloudStorageWriteSettingsWorkerInterface:
202
+ write_settings: CloudStorageWriteSettings,
203
+ connection: FullCloudStorageConnection,
204
+ lf: pl.LazyFrame,
205
+ flowfile_flow_id: int = 1,
206
+ flowfile_node_id: int | str = -1,
207
+ ) -> CloudStorageWriteSettingsWorkerInterface:
204
208
  """
205
209
  Convert to a worker interface model with hashed secrets.
206
210
  """
@@ -211,5 +215,5 @@ def get_cloud_storage_write_settings_worker_interface(
211
215
  write_settings=write_settings.get_write_setting_worker_interface(),
212
216
  connection=connection.get_worker_interface(),
213
217
  flowfile_flow_id=flowfile_flow_id, # Default value, can be overridden
214
- flowfile_node_id=flowfile_node_id # Default value, can be overridden
215
- )
218
+ flowfile_node_id=flowfile_node_id, # Default value, can be overridden
219
+ )