Flowfile 0.5.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 (329) hide show
  1. build_backends/main.py +25 -22
  2. build_backends/main_prd.py +10 -19
  3. flowfile/__init__.py +178 -74
  4. flowfile/__main__.py +10 -7
  5. flowfile/api.py +51 -57
  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-0dfba9f2.js → CloudConnectionView-f13f202b.js} +11 -11
  11. flowfile/web/static/assets/{CloudStorageReader-d5b1b6c9.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-00d87aad.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-4685e75d.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-23e909da.js → ContextMenu-31ee57f0.js} +3 -3
  19. flowfile/web/static/assets/{ContextMenu-70ae0c79.js → ContextMenu-69a74055.js} +3 -3
  20. flowfile/web/static/assets/{ContextMenu-f149cf7c.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-702a3edd.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-b1519993.js → CustomNode-8479239b.js} +36 -24
  27. flowfile/web/static/assets/{DatabaseConnectionSettings-6f3e4ea5.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-d38c7295.js → DatabaseReader-c58b9552.js} +25 -15
  31. flowfile/web/static/assets/DatabaseView-6655afd6.css +57 -0
  32. flowfile/web/static/assets/{DatabaseManager-cf5ef661.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-b04ef46a.js → DatabaseWriter-4d05ddc7.js} +17 -10
  35. flowfile/web/static/assets/{designer-8da3ba3a.css → DesignerView-a6d0ee84.css} +614 -546
  36. flowfile/web/static/assets/{designer-9633482a.js → DesignerView-e6f5c0e8.js} +1107 -3170
  37. flowfile/web/static/assets/{documentation-ca400224.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-5fa10ed8.js → ExploreData-7b54caca.js} +18 -9
  41. flowfile/web/static/assets/{ExternalSource-d39af878.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-6b04fb1d.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-999521f4.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-17dd2198.js → GraphSolver-c7e6780e.js} +13 -11
  51. flowfile/web/static/assets/{GroupBy-6b039e18.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-24d0f113.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-34639209.js → ManualInput-8d3374b2.js} +170 -116
  59. flowfile/web/static/assets/{MultiSelect-0e8724a3.js → MultiSelect-ad1b6243.js} +2 -2
  60. flowfile/web/static/assets/{MultiSelect.vue_vue_type_script_setup_true_lang-b0e538c2.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-3d63a470.js → NumericInput-7100234c.js} +2 -2
  64. flowfile/web/static/assets/{NumericInput.vue_vue_type_script_setup_true_lang-e0edeccc.js → NumericInput.vue_vue_type_script_setup_true_lang-5130219f.js} +5 -2
  65. flowfile/web/static/assets/{Output-283fe388.css → Output-35e97000.css} +6 -6
  66. flowfile/web/static/assets/{Output-edea9802.js → Output-f5efd2aa.js} +12 -9
  67. flowfile/web/static/assets/{GraphSolver-f0cb7bfb.css → Pivot-0eda81b4.css} +5 -5
  68. flowfile/web/static/assets/{Pivot-61d19301.js → Pivot-d981d23c.js} +11 -9
  69. flowfile/web/static/assets/PivotValidation-0e905b1a.css +13 -0
  70. flowfile/web/static/assets/{PivotValidation-f97fec5b.js → PivotValidation-39386e95.js} +3 -3
  71. flowfile/web/static/assets/PivotValidation-41b57ad6.css +13 -0
  72. flowfile/web/static/assets/{PivotValidation-de9f43fe.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-bc3c9984.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-e808b239.css → Read-36e7bd51.css} +12 -12
  78. flowfile/web/static/assets/{Read-64a3f259.js → Read-aec2e377.js} +14 -11
  79. flowfile/web/static/assets/{RecordCount-3d5039be.js → RecordCount-78ed6845.js} +6 -4
  80. flowfile/web/static/assets/{RecordId-597510e0.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-df51adbe.js → SQLQueryComponent-48c72f5b.js} +3 -3
  83. flowfile/web/static/assets/{Sample-4be0a507.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-4839be57.js → SecretsView-17df66ee.js} +35 -36
  87. flowfile/web/static/assets/SecretsView-aa291340.css +38 -0
  88. flowfile/web/static/assets/{Select-9b72f201.js → Select-0aee4c54.js} +9 -7
  89. flowfile/web/static/assets/{SettingsSection-f0f75a42.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-e1e9c953.js → SettingsSection-cd341bb6.js} +3 -3
  94. flowfile/web/static/assets/{SettingsSection-7ded385d.js → SettingsSection-f2002a6d.js} +3 -3
  95. flowfile/web/static/assets/{SingleSelect-6c777aac.js → SingleSelect-460cc0ea.js} +2 -2
  96. flowfile/web/static/assets/{SingleSelect.vue_vue_type_script_setup_true_lang-33e3ff9b.js → SingleSelect.vue_vue_type_script_setup_true_lang-30741bb2.js} +1 -1
  97. flowfile/web/static/assets/{SliderInput-7cb93e62.js → SliderInput-5d926864.js} +7 -4
  98. flowfile/web/static/assets/SliderInput-f2e4f23c.css +4 -0
  99. flowfile/web/static/assets/{Sort-6cbde21a.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-d9a40c11.js → TextInput-a2d0bfbd.js} +2 -2
  102. flowfile/web/static/assets/{TextInput.vue_vue_type_script_setup_true_lang-5896c375.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-c4fcbf4d.js → TextToRows-918945f7.js} +11 -10
  105. flowfile/web/static/assets/{ToggleSwitch-4ef91d19.js → ToggleSwitch-f0ef5196.js} +2 -2
  106. flowfile/web/static/assets/{ToggleSwitch.vue_vue_type_script_setup_true_lang-38478c20.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-a03f512c.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-bfe9b996.js → Union-e8ab8c86.js} +8 -6
  111. flowfile/web/static/assets/{Unique-5d023a27.js → Unique-8cd4f976.js} +13 -10
  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-91cc5354.js → Unpivot-8da14095.js} +10 -8
  115. flowfile/web/static/assets/{UnpivotValidation-7ee2de44.js → UnpivotValidation-6f7d89ff.js} +3 -3
  116. flowfile/web/static/assets/UnpivotValidation-d5ca3b7b.css +13 -0
  117. flowfile/web/static/assets/{VueGraphicWalker-e51b9924.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-cf1221f0.js → api-24483f0d.js} +1 -1
  120. flowfile/web/static/assets/{api-c1bad5ca.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-614b998d.js → dropDown-ac0fda9d.js} +3 -3
  123. flowfile/web/static/assets/{fullEditor-f7971590.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-4fe5f36b.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-5429bbf8.js → index-fb6493ae.js} +41626 -40867
  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-076b85ab.js → outputCsv-8f8ba42d.js} +3 -3
  134. flowfile/web/static/assets/outputCsv-b9a072af.css +2499 -0
  135. flowfile/web/static/assets/{outputExcel-0fd17dbe.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-b61e0847.js → outputParquet-07c81f65.js} +4 -4
  138. flowfile/web/static/assets/outputParquet-54597c3c.css +4 -0
  139. flowfile/web/static/assets/{readCsv-a8bb8b61.js → readCsv-07f6d9ad.js} +3 -3
  140. flowfile/web/static/assets/{readCsv-c767cb37.css → readCsv-3bfac4c3.css} +15 -15
  141. flowfile/web/static/assets/{readExcel-806d2826.css → readExcel-3db6b763.css} +13 -13
  142. flowfile/web/static/assets/{readExcel-67b4aee0.js → readExcel-ed69bc8f.js} +5 -5
  143. flowfile/web/static/assets/{readParquet-48c81530.css → readParquet-c5244ad5.css} +4 -4
  144. flowfile/web/static/assets/{readParquet-92ce1dbc.js → readParquet-e3ed4528.js} +3 -3
  145. flowfile/web/static/assets/secrets.api-002e7d7e.js +65 -0
  146. flowfile/web/static/assets/{selectDynamic-92e25ee3.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-41b0e0d7.js → vue-codemirror.esm-0965f39f.js} +31 -640
  149. flowfile/web/static/assets/{vue-content-loader.es-2c8e608f.js → vue-content-loader.es-c506ad97.js} +1 -1
  150. flowfile/web/static/index.html +2 -2
  151. {flowfile-0.5.1.dist-info → flowfile-0.5.3.dist-info}/METADATA +2 -3
  152. flowfile-0.5.3.dist-info/RECORD +402 -0
  153. flowfile_core/__init__.py +13 -6
  154. flowfile_core/auth/jwt.py +51 -16
  155. flowfile_core/auth/models.py +32 -7
  156. flowfile_core/auth/password.py +89 -0
  157. flowfile_core/auth/secrets.py +8 -6
  158. flowfile_core/configs/__init__.py +9 -7
  159. flowfile_core/configs/flow_logger.py +15 -14
  160. flowfile_core/configs/node_store/__init__.py +72 -4
  161. flowfile_core/configs/node_store/nodes.py +155 -172
  162. flowfile_core/configs/node_store/user_defined_node_registry.py +108 -27
  163. flowfile_core/configs/settings.py +28 -15
  164. flowfile_core/database/connection.py +7 -6
  165. flowfile_core/database/init_db.py +96 -2
  166. flowfile_core/database/models.py +3 -1
  167. flowfile_core/fileExplorer/__init__.py +17 -0
  168. flowfile_core/fileExplorer/funcs.py +123 -57
  169. flowfile_core/fileExplorer/utils.py +10 -11
  170. flowfile_core/flowfile/_extensions/real_time_interface.py +10 -8
  171. flowfile_core/flowfile/analytics/analytics_processor.py +26 -24
  172. flowfile_core/flowfile/analytics/graphic_walker.py +11 -12
  173. flowfile_core/flowfile/analytics/utils.py +1 -1
  174. flowfile_core/flowfile/code_generator/code_generator.py +358 -244
  175. flowfile_core/flowfile/connection_manager/_connection_manager.py +6 -5
  176. flowfile_core/flowfile/connection_manager/models.py +1 -1
  177. flowfile_core/flowfile/database_connection_manager/db_connections.py +60 -44
  178. flowfile_core/flowfile/database_connection_manager/models.py +1 -1
  179. flowfile_core/flowfile/extensions.py +17 -12
  180. flowfile_core/flowfile/flow_data_engine/cloud_storage_reader.py +34 -32
  181. flowfile_core/flowfile/flow_data_engine/create/funcs.py +115 -83
  182. flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +481 -423
  183. flowfile_core/flowfile/flow_data_engine/flow_file_column/interface.py +2 -2
  184. flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +92 -52
  185. flowfile_core/flowfile/flow_data_engine/flow_file_column/polars_type.py +12 -11
  186. flowfile_core/flowfile/flow_data_engine/flow_file_column/type_registry.py +6 -6
  187. flowfile_core/flowfile/flow_data_engine/flow_file_column/utils.py +26 -30
  188. flowfile_core/flowfile/flow_data_engine/fuzzy_matching/prepare_for_fuzzy_match.py +31 -20
  189. flowfile_core/flowfile/flow_data_engine/join/__init__.py +1 -1
  190. flowfile_core/flowfile/flow_data_engine/join/utils.py +11 -9
  191. flowfile_core/flowfile/flow_data_engine/join/verify_integrity.py +14 -15
  192. flowfile_core/flowfile/flow_data_engine/pivot_table.py +5 -7
  193. flowfile_core/flowfile/flow_data_engine/polars_code_parser.py +95 -82
  194. flowfile_core/flowfile/flow_data_engine/read_excel_tables.py +66 -65
  195. flowfile_core/flowfile/flow_data_engine/sample_data.py +27 -21
  196. flowfile_core/flowfile/flow_data_engine/subprocess_operations/__init__.py +1 -1
  197. flowfile_core/flowfile/flow_data_engine/subprocess_operations/models.py +13 -11
  198. flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +190 -127
  199. flowfile_core/flowfile/flow_data_engine/threaded_processes.py +8 -8
  200. flowfile_core/flowfile/flow_data_engine/utils.py +99 -67
  201. flowfile_core/flowfile/flow_graph.py +918 -571
  202. flowfile_core/flowfile/flow_graph_utils.py +31 -49
  203. flowfile_core/flowfile/flow_node/flow_node.py +330 -233
  204. flowfile_core/flowfile/flow_node/models.py +53 -41
  205. flowfile_core/flowfile/flow_node/schema_callback.py +14 -19
  206. flowfile_core/flowfile/graph_tree/graph_tree.py +41 -41
  207. flowfile_core/flowfile/handler.py +80 -30
  208. flowfile_core/flowfile/manage/compatibility_enhancements.py +209 -126
  209. flowfile_core/flowfile/manage/io_flowfile.py +54 -57
  210. flowfile_core/flowfile/node_designer/__init__.py +15 -13
  211. flowfile_core/flowfile/node_designer/_type_registry.py +34 -37
  212. flowfile_core/flowfile/node_designer/custom_node.py +162 -36
  213. flowfile_core/flowfile/node_designer/ui_components.py +135 -34
  214. flowfile_core/flowfile/schema_callbacks.py +71 -51
  215. flowfile_core/flowfile/setting_generator/__init__.py +0 -1
  216. flowfile_core/flowfile/setting_generator/setting_generator.py +6 -5
  217. flowfile_core/flowfile/setting_generator/settings.py +64 -53
  218. flowfile_core/flowfile/sources/external_sources/base_class.py +12 -10
  219. flowfile_core/flowfile/sources/external_sources/custom_external_sources/external_source.py +27 -17
  220. flowfile_core/flowfile/sources/external_sources/custom_external_sources/sample_users.py +9 -9
  221. flowfile_core/flowfile/sources/external_sources/factory.py +0 -1
  222. flowfile_core/flowfile/sources/external_sources/sql_source/models.py +45 -31
  223. flowfile_core/flowfile/sources/external_sources/sql_source/sql_source.py +198 -73
  224. flowfile_core/flowfile/sources/external_sources/sql_source/utils.py +250 -196
  225. flowfile_core/flowfile/util/calculate_layout.py +9 -13
  226. flowfile_core/flowfile/util/execution_orderer.py +25 -17
  227. flowfile_core/flowfile/util/node_skipper.py +4 -4
  228. flowfile_core/flowfile/utils.py +19 -21
  229. flowfile_core/main.py +26 -19
  230. flowfile_core/routes/auth.py +284 -11
  231. flowfile_core/routes/cloud_connections.py +25 -25
  232. flowfile_core/routes/logs.py +21 -29
  233. flowfile_core/routes/public.py +3 -3
  234. flowfile_core/routes/routes.py +70 -34
  235. flowfile_core/routes/secrets.py +25 -27
  236. flowfile_core/routes/user_defined_components.py +483 -4
  237. flowfile_core/run_lock.py +0 -1
  238. flowfile_core/schemas/__init__.py +4 -6
  239. flowfile_core/schemas/analysis_schemas/graphic_walker_schemas.py +55 -55
  240. flowfile_core/schemas/cloud_storage_schemas.py +59 -53
  241. flowfile_core/schemas/input_schema.py +231 -144
  242. flowfile_core/schemas/output_model.py +49 -34
  243. flowfile_core/schemas/schemas.py +116 -89
  244. flowfile_core/schemas/transform_schema.py +518 -263
  245. flowfile_core/schemas/yaml_types.py +21 -7
  246. flowfile_core/secret_manager/secret_manager.py +17 -13
  247. flowfile_core/types.py +29 -9
  248. flowfile_core/utils/arrow_reader.py +7 -6
  249. flowfile_core/utils/excel_file_manager.py +3 -3
  250. flowfile_core/utils/fileManager.py +7 -7
  251. flowfile_core/utils/fl_executor.py +8 -10
  252. flowfile_core/utils/utils.py +4 -4
  253. flowfile_core/utils/validate_setup.py +5 -4
  254. flowfile_frame/__init__.py +106 -51
  255. flowfile_frame/adapters.py +2 -9
  256. flowfile_frame/adding_expr.py +73 -32
  257. flowfile_frame/cloud_storage/frame_helpers.py +27 -23
  258. flowfile_frame/cloud_storage/secret_manager.py +12 -26
  259. flowfile_frame/config.py +2 -5
  260. flowfile_frame/expr.py +311 -218
  261. flowfile_frame/expr.pyi +160 -159
  262. flowfile_frame/expr_name.py +23 -23
  263. flowfile_frame/flow_frame.py +571 -476
  264. flowfile_frame/flow_frame.pyi +123 -104
  265. flowfile_frame/flow_frame_methods.py +227 -246
  266. flowfile_frame/group_frame.py +50 -20
  267. flowfile_frame/join.py +2 -2
  268. flowfile_frame/lazy.py +129 -87
  269. flowfile_frame/lazy_methods.py +83 -30
  270. flowfile_frame/list_name_space.py +55 -50
  271. flowfile_frame/selectors.py +148 -68
  272. flowfile_frame/series.py +9 -7
  273. flowfile_frame/utils.py +19 -21
  274. flowfile_worker/__init__.py +12 -7
  275. flowfile_worker/configs.py +11 -19
  276. flowfile_worker/create/__init__.py +14 -9
  277. flowfile_worker/create/funcs.py +114 -77
  278. flowfile_worker/create/models.py +46 -43
  279. flowfile_worker/create/pl_types.py +14 -15
  280. flowfile_worker/create/read_excel_tables.py +34 -41
  281. flowfile_worker/create/utils.py +22 -19
  282. flowfile_worker/external_sources/s3_source/main.py +18 -51
  283. flowfile_worker/external_sources/s3_source/models.py +34 -27
  284. flowfile_worker/external_sources/sql_source/main.py +8 -5
  285. flowfile_worker/external_sources/sql_source/models.py +13 -9
  286. flowfile_worker/flow_logger.py +10 -8
  287. flowfile_worker/funcs.py +214 -155
  288. flowfile_worker/main.py +11 -17
  289. flowfile_worker/models.py +35 -28
  290. flowfile_worker/process_manager.py +2 -3
  291. flowfile_worker/routes.py +121 -90
  292. flowfile_worker/secrets.py +9 -6
  293. flowfile_worker/spawner.py +80 -49
  294. flowfile_worker/utils.py +3 -2
  295. shared/__init__.py +2 -7
  296. shared/storage_config.py +25 -13
  297. test_utils/postgres/commands.py +3 -2
  298. test_utils/postgres/fixtures.py +9 -9
  299. test_utils/s3/commands.py +1 -1
  300. test_utils/s3/data_generator.py +3 -4
  301. test_utils/s3/demo_data_generator.py +4 -7
  302. test_utils/s3/fixtures.py +7 -5
  303. tools/migrate/__init__.py +1 -1
  304. tools/migrate/__main__.py +16 -29
  305. tools/migrate/legacy_schemas.py +251 -190
  306. tools/migrate/migrate.py +193 -181
  307. tools/migrate/tests/conftest.py +1 -3
  308. tools/migrate/tests/test_migrate.py +36 -41
  309. tools/migrate/tests/test_migration_e2e.py +28 -29
  310. tools/migrate/tests/test_node_migrations.py +50 -20
  311. flowfile/web/static/assets/CloudConnectionManager-2dfdce2f.css +0 -86
  312. flowfile/web/static/assets/CustomNode-74a37f74.css +0 -32
  313. flowfile/web/static/assets/DatabaseManager-30fa27e5.css +0 -64
  314. flowfile/web/static/assets/Filter-9b6d08db.js +0 -164
  315. flowfile/web/static/assets/Filter-f62091b3.css +0 -20
  316. flowfile/web/static/assets/ManualInput-3246a08d.css +0 -96
  317. flowfile/web/static/assets/PivotValidation-891ddfb0.css +0 -13
  318. flowfile/web/static/assets/PivotValidation-c46cd420.css +0 -13
  319. flowfile/web/static/assets/SliderInput-b8fb6a8c.css +0 -4
  320. flowfile/web/static/assets/UnpivotValidation-0d240eeb.css +0 -13
  321. flowfile/web/static/assets/nodeInput-5d0d6b79.js +0 -41
  322. flowfile/web/static/assets/outputCsv-9cc59e0b.css +0 -2499
  323. flowfile/web/static/assets/outputParquet-cf8cf3f2.css +0 -4
  324. flowfile/web/static/assets/secretApi-68435402.js +0 -46
  325. flowfile/web/static/assets/vue-codemirror-bccfde04.css +0 -32
  326. flowfile-0.5.1.dist-info/RECORD +0 -388
  327. {flowfile-0.5.1.dist-info → flowfile-0.5.3.dist-info}/WHEEL +0 -0
  328. {flowfile-0.5.1.dist-info → flowfile-0.5.3.dist-info}/entry_points.txt +0 -0
  329. {flowfile-0.5.1.dist-info → flowfile-0.5.3.dist-info}/licenses/LICENSE +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,10 +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_has_header: Optional[bool] = True
140
- csv_delimiter: Optional[str] = ","
141
- csv_encoding: Optional[str] = "utf8"
142
- 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
143
146
 
144
147
 
145
148
  class CloudStorageReadSettingsInternal(BaseModel):
@@ -149,6 +152,7 @@ class CloudStorageReadSettingsInternal(BaseModel):
149
152
 
150
153
  class WriteSettingsWorkerInterface(BaseModel):
151
154
  """Settings for writing to cloud storage"""
155
+
152
156
  resource_path: str # s3://bucket/path/to/file.csv
153
157
 
154
158
  write_mode: Literal["overwrite", "append"] = "overwrite"
@@ -162,6 +166,7 @@ class WriteSettingsWorkerInterface(BaseModel):
162
166
 
163
167
  class CloudStorageWriteSettings(CloudStorageSettings, WriteSettingsWorkerInterface):
164
168
  """Settings for writing to cloud storage"""
169
+
165
170
  pass
166
171
 
167
172
  def get_write_setting_worker_interface(self) -> WriteSettingsWorkerInterface:
@@ -174,7 +179,7 @@ class CloudStorageWriteSettings(CloudStorageSettings, WriteSettingsWorkerInterfa
174
179
  file_format=self.file_format,
175
180
  parquet_compression=self.parquet_compression,
176
181
  csv_delimiter=self.csv_delimiter,
177
- csv_encoding=self.csv_encoding
182
+ csv_encoding=self.csv_encoding,
178
183
  )
179
184
 
180
185
 
@@ -185,6 +190,7 @@ class CloudStorageWriteSettingsInternal(BaseModel):
185
190
 
186
191
  class CloudStorageWriteSettingsWorkerInterface(BaseModel):
187
192
  """Settings for writing to cloud storage in worker context"""
193
+
188
194
  operation: str
189
195
  write_settings: WriteSettingsWorkerInterface
190
196
  connection: FullCloudStorageConnectionWorkerInterface
@@ -193,12 +199,12 @@ class CloudStorageWriteSettingsWorkerInterface(BaseModel):
193
199
 
194
200
 
195
201
  def get_cloud_storage_write_settings_worker_interface(
196
- write_settings: CloudStorageWriteSettings,
197
- connection: FullCloudStorageConnection,
198
- lf: pl.LazyFrame,
199
- flowfile_flow_id: int = 1,
200
- flowfile_node_id: int | str = -1,
201
- ) -> 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:
202
208
  """
203
209
  Convert to a worker interface model with hashed secrets.
204
210
  """
@@ -209,5 +215,5 @@ def get_cloud_storage_write_settings_worker_interface(
209
215
  write_settings=write_settings.get_write_setting_worker_interface(),
210
216
  connection=connection.get_worker_interface(),
211
217
  flowfile_flow_id=flowfile_flow_id, # Default value, can be overridden
212
- flowfile_node_id=flowfile_node_id # Default value, can be overridden
213
- )
218
+ flowfile_node_id=flowfile_node_id, # Default value, can be overridden
219
+ )