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,8 +1,21 @@
1
- from typing import TypedDict, List
2
-
1
+ from typing import TypedDict
3
2
 
4
3
  # === Transform Schema YAML Types ===
5
4
 
5
+
6
+ class BasicFilterYaml(TypedDict, total=False):
7
+ field: str
8
+ operator: str
9
+ value: str
10
+ value2: str # For BETWEEN operator
11
+
12
+
13
+ class FilterInputYaml(TypedDict, total=False):
14
+ mode: str # "basic" or "advanced"
15
+ basic_filter: BasicFilterYaml
16
+ advanced_filter: str
17
+
18
+
6
19
  class SelectInputYaml(TypedDict, total=False):
7
20
  old_name: str
8
21
  new_name: str
@@ -11,7 +24,7 @@ class SelectInputYaml(TypedDict, total=False):
11
24
 
12
25
 
13
26
  class JoinInputsYaml(TypedDict):
14
- select: List[SelectInputYaml]
27
+ select: list[SelectInputYaml]
15
28
 
16
29
 
17
30
  class JoinMapYaml(TypedDict):
@@ -20,7 +33,7 @@ class JoinMapYaml(TypedDict):
20
33
 
21
34
 
22
35
  class JoinInputYaml(TypedDict):
23
- join_mapping: List[JoinMapYaml]
36
+ join_mapping: list[JoinMapYaml]
24
37
  left_select: JoinInputsYaml
25
38
  right_select: JoinInputsYaml
26
39
  how: str
@@ -42,7 +55,7 @@ class FuzzyMappingYaml(TypedDict, total=False):
42
55
 
43
56
 
44
57
  class FuzzyMatchInputYaml(TypedDict):
45
- join_mapping: List[FuzzyMappingYaml]
58
+ join_mapping: list[FuzzyMappingYaml]
46
59
  left_select: JoinInputsYaml
47
60
  right_select: JoinInputsYaml
48
61
  how: str
@@ -51,20 +64,21 @@ class FuzzyMatchInputYaml(TypedDict):
51
64
 
52
65
  # === Input Schema YAML Types ===
53
66
 
67
+
54
68
  class OutputSettingsYaml(TypedDict, total=False):
55
69
  name: str
56
70
  directory: str
57
71
  file_type: str
58
72
  write_mode: str
59
73
  abs_file_path: str
60
- fields: List[str]
74
+ fields: list[str]
61
75
  table_settings: dict
62
76
 
63
77
 
64
78
  class NodeSelectYaml(TypedDict):
65
79
  cache_results: bool
66
80
  keep_missing: bool
67
- select_input: List[SelectInputYaml]
81
+ select_input: list[SelectInputYaml]
68
82
  sorted_by: str
69
83
 
70
84
 
@@ -1,13 +1,13 @@
1
-
2
1
  from cryptography.fernet import Fernet
2
+ from fastapi.exceptions import HTTPException
3
+ from pydantic import SecretStr
3
4
  from sqlalchemy import and_
4
5
  from sqlalchemy.orm import Session
6
+
7
+ from flowfile_core.auth.models import SecretInput
8
+ from flowfile_core.auth.secrets import get_master_key
5
9
  from flowfile_core.database import models as db_models
6
10
  from flowfile_core.database.connection import get_db_context
7
- from flowfile_core.auth.secrets import get_master_key
8
- from pydantic import SecretStr
9
- from flowfile_core.auth.models import SecretInput
10
- from fastapi.exceptions import HTTPException
11
11
 
12
12
 
13
13
  def encrypt_secret(secret_value):
@@ -24,11 +24,14 @@ def decrypt_secret(encrypted_value) -> SecretStr:
24
24
  return SecretStr(f.decrypt(encrypted_value.encode()).decode())
25
25
 
26
26
 
27
- def get_encrypted_secret(current_user_id: int, secret_name: str) -> str|None:
27
+ def get_encrypted_secret(current_user_id: int, secret_name: str) -> str | None:
28
28
  with get_db_context() as db:
29
29
  user_id = current_user_id
30
- db_secret = db.query(db_models.Secret).filter(and_(db_models.Secret.user_id == user_id,
31
- db_models.Secret.name == secret_name)).first()
30
+ db_secret = (
31
+ db.query(db_models.Secret)
32
+ .filter(and_(db_models.Secret.user_id == user_id, db_models.Secret.name == secret_name))
33
+ .first()
34
+ )
32
35
  if db_secret:
33
36
  return db_secret.encrypted_value
34
37
  else:
@@ -43,7 +46,7 @@ def store_secret(db: Session, secret: SecretInput, user_id: int) -> db_models.Se
43
46
  name=secret.name,
44
47
  encrypted_value=encrypted_value,
45
48
  iv="", # Not used with Fernet
46
- user_id=user_id
49
+ user_id=user_id,
47
50
  )
48
51
  db.add(db_secret)
49
52
  db.commit()
@@ -52,10 +55,11 @@ def store_secret(db: Session, secret: SecretInput, user_id: int) -> db_models.Se
52
55
 
53
56
 
54
57
  def delete_secret(db: Session, secret_name: str, user_id: int) -> None:
55
- db_secret = db.query(db_models.Secret).filter(
56
- db_models.Secret.user_id == user_id,
57
- db_models.Secret.name == secret_name
58
- ).first()
58
+ db_secret = (
59
+ db.query(db_models.Secret)
60
+ .filter(db_models.Secret.user_id == user_id, db_models.Secret.name == secret_name)
61
+ .first()
62
+ )
59
63
 
60
64
  if not db_secret:
61
65
  raise HTTPException(status_code=404, detail="Secret not found")
flowfile_core/types.py CHANGED
@@ -18,22 +18,41 @@ Usage:
18
18
  """
19
19
 
20
20
  from enum import Enum
21
- from typing import List, Literal, Union
22
- import polars as pl
21
+ from typing import Literal, Union
23
22
 
23
+ import polars as pl
24
24
 
25
25
  DataTypeStr = Literal[
26
- "Int8", "Int16", "Int32", "Int64",
27
- "UInt8", "UInt16", "UInt32", "UInt64",
28
- "Float32", "Float64", "Decimal",
26
+ "Int8",
27
+ "Int16",
28
+ "Int32",
29
+ "Int64",
30
+ "UInt8",
31
+ "UInt16",
32
+ "UInt32",
33
+ "UInt64",
34
+ "Float32",
35
+ "Float64",
36
+ "Decimal",
29
37
  "String",
30
- "Date", "Datetime", "Time", "Duration",
31
- "Boolean", "Binary", "List", "Struct", "Array", "Integer", "Double", "Utf8"
38
+ "Date",
39
+ "Datetime",
40
+ "Time",
41
+ "Duration",
42
+ "Boolean",
43
+ "Binary",
44
+ "List",
45
+ "Struct",
46
+ "Array",
47
+ "Integer",
48
+ "Double",
49
+ "Utf8",
32
50
  ]
33
51
 
34
52
 
35
53
  class TypeGroup(str, Enum):
36
54
  """High-level type groups for column selection."""
55
+
37
56
  Numeric = "Numeric"
38
57
  String = "String"
39
58
  Date = "Date"
@@ -51,6 +70,7 @@ class TypeGroup(str, Enum):
51
70
 
52
71
  class DataType(str, Enum):
53
72
  """Specific data types for fine-grained control."""
73
+
54
74
  # Numeric types
55
75
  Int8 = "Int8"
56
76
  Int16 = "Int16"
@@ -150,7 +170,7 @@ TypeSpec = Union[
150
170
  TypeGroup,
151
171
  DataType,
152
172
  str,
153
- List[Union[TypeGroup, DataType, str, type[pl.DataType], pl.DataType]],
173
+ list[TypeGroup | DataType | str | type[pl.DataType] | pl.DataType],
154
174
  type[pl.DataType],
155
- pl.DataType
175
+ pl.DataType,
156
176
  ]
@@ -1,5 +1,7 @@
1
+ from collections.abc import Callable, Iterator
2
+
1
3
  import pyarrow as pa
2
- from typing import List, Iterator, Tuple, Callable
4
+
3
5
  from flowfile_core.configs import logger
4
6
 
5
7
 
@@ -36,7 +38,7 @@ def open_validated_file(file_path: str, n: int) -> pa.OSFile:
36
38
  logger.error(f"Invalid file_path type: {type(file_path)}")
37
39
  raise TypeError("file_path must be a string")
38
40
  try:
39
- file = pa.OSFile(file_path, 'rb')
41
+ file = pa.OSFile(file_path, "rb")
40
42
  logger.info(f"Successfully opened file: {file_path}")
41
43
  return file
42
44
  except FileNotFoundError:
@@ -112,7 +114,7 @@ def iter_batches(reader: pa.ipc.RecordBatchFileReader, n: int, rows_collected: i
112
114
  break
113
115
 
114
116
 
115
- def collect_batches(reader: pa.ipc.RecordBatchFileReader, n: int) -> Tuple[List[pa.RecordBatch], int]:
117
+ def collect_batches(reader: pa.ipc.RecordBatchFileReader, n: int) -> tuple[list[pa.RecordBatch], int]:
116
118
  """
117
119
  Collect record batches from a reader up to a specified number of rows.
118
120
 
@@ -134,11 +136,10 @@ def collect_batches(reader: pa.ipc.RecordBatchFileReader, n: int) -> Tuple[List[
134
136
  >>> print(f"Collected {row_count} rows in {len(batches)} batches")
135
137
  """
136
138
  logger.debug(f"Collecting batches up to {n} rows")
137
- batches: List[pa.RecordBatch] = []
139
+ batches: list[pa.RecordBatch] = []
138
140
  rows_collected = 0
139
141
 
140
142
  for batch in iter_batches(reader, n, rows_collected):
141
-
142
143
  rows_collected += batch.num_rows
143
144
  logger.debug(f"Collected batch: total rows now {rows_collected}")
144
145
  if rows_collected >= n:
@@ -178,7 +179,7 @@ def read(file_path: str) -> pa.Table:
178
179
  logger.info(f"Reading entire file: {file_path}")
179
180
  with open_validated_file(file_path, 0) as source:
180
181
  reader = create_reader(source)
181
- batches, total_rows = collect_batches(reader, float('inf'))
182
+ batches, total_rows = collect_batches(reader, float("inf"))
182
183
  table = pa.Table.from_batches(batches) # type: ignore
183
184
  logger.info(f"Successfully read {total_rows} rows from {file_path}")
184
185
  return table
@@ -1,13 +1,13 @@
1
1
  import os
2
- import fastexcel
3
- from typing import List
4
2
  from functools import lru_cache
5
3
 
4
+ import fastexcel
5
+
6
6
  from flowfile_core.configs import logger
7
7
 
8
8
 
9
9
  @lru_cache(maxsize=32)
10
- def get_sheet_names(file_path: str) -> List[str] | None:
10
+ def get_sheet_names(file_path: str) -> list[str] | None:
11
11
  if not os.path.exists(file_path):
12
12
  logger.error(f"File does not exist: {file_path}")
13
13
  return
@@ -1,13 +1,13 @@
1
1
  import os
2
- from flowfile_core.schemas.input_schema import NewDirectory, RemoveItem, RemoveItemsInput
3
- from typing import Tuple, Optional
2
+
4
3
  from flowfile_core.configs import logger
4
+ from flowfile_core.schemas.input_schema import NewDirectory, RemoveItem, RemoveItemsInput
5
5
 
6
6
  local_database_connection = None
7
7
 
8
8
 
9
- def create_dir(new_directory: NewDirectory) -> Tuple[bool, Optional[Exception]]:
10
- full_path: str = os.path.join(new_directory.source_path,new_directory.dir_name)
9
+ def create_dir(new_directory: NewDirectory) -> tuple[bool, Exception | None]:
10
+ full_path: str = os.path.join(new_directory.source_path, new_directory.dir_name)
11
11
  try:
12
12
  os.mkdir(full_path)
13
13
  logger.info("Successfully created a new folder")
@@ -16,7 +16,7 @@ def create_dir(new_directory: NewDirectory) -> Tuple[bool, Optional[Exception]]:
16
16
  return False, e
17
17
 
18
18
 
19
- def remove_path(path: str) -> Tuple[bool, Optional[Exception]]:
19
+ def remove_path(path: str) -> tuple[bool, Exception | None]:
20
20
  try:
21
21
  os.remove(path)
22
22
  logger.info(f"Succesfully removed {path}")
@@ -35,11 +35,11 @@ def remove_item(item_to_remove: RemoveItem):
35
35
  os.rmdir(item_to_remove.path)
36
36
 
37
37
 
38
- def remove_paths(remove_items: RemoveItemsInput) -> Tuple[bool, Optional[Exception]]:
38
+ def remove_paths(remove_items: RemoveItemsInput) -> tuple[bool, Exception | None]:
39
39
  try:
40
40
  for path in remove_items.paths:
41
41
  remove_item(path)
42
- logger.info(f'Successfully removed {remove_items.paths}')
42
+ logger.info(f"Successfully removed {remove_items.paths}")
43
43
  return True, None
44
44
  except Exception as e:
45
45
  return False, e
@@ -1,9 +1,9 @@
1
- from flowfile_core.configs import logger
1
+ from functools import wraps
2
2
  from inspect import isfunction
3
+
3
4
  from loky import get_reusable_executor
4
- from functools import wraps
5
- from concurrent.futures import ThreadPoolExecutor
6
- import atexit
5
+
6
+ from flowfile_core.configs import logger
7
7
 
8
8
 
9
9
  # process_executor: Uses loky for process-based parallelism
@@ -13,18 +13,18 @@ def process_executor(wait_on_completion: bool = False, max_workers: int = 12):
13
13
  def executor(f):
14
14
  @wraps(f)
15
15
  def inner(*args, **kwargs):
16
- logger.debug(f'Added task {f.__name__} to a process executor')
17
- logger.debug(f'max_workers: {max_workers}')
16
+ logger.debug(f"Added task {f.__name__} to a process executor")
17
+ logger.debug(f"max_workers: {max_workers}")
18
18
 
19
19
  # Create a new executor with the required number of workers
20
20
  func_executor = get_reusable_executor(max_workers=max_workers, timeout=2, kill_workers=False, reuse=True)
21
21
  r = func_executor.submit(f, *args, **kwargs)
22
22
  if wait_on_completion:
23
23
  result = r.result()
24
- logger.info(f'done executing {f.__name__}')
24
+ logger.info(f"done executing {f.__name__}")
25
25
  return result
26
26
 
27
- logger.info(f'done submitting {f.__name__} to a process executor')
27
+ logger.info(f"done submitting {f.__name__} to a process executor")
28
28
  return r
29
29
 
30
30
  return inner
@@ -34,5 +34,3 @@ def process_executor(wait_on_completion: bool = False, max_workers: int = 12):
34
34
  wait_on_completion = False
35
35
  return executor(f)
36
36
  return executor
37
-
38
-
@@ -1,14 +1,14 @@
1
1
  import re
2
2
  from itertools import chain
3
- from typing import List, Dict
3
+
4
4
 
5
5
  def camel_case_to_snake_case(text: str) -> str:
6
6
  # Use a regular expression to find capital letters and replace them with _ followed by the lowercase letter
7
- transformed_text = re.sub(r'(?<!^)(?=[A-Z])', '_', text).lower()
7
+ transformed_text = re.sub(r"(?<!^)(?=[A-Z])", "_", text).lower()
8
8
  return transformed_text
9
9
 
10
10
 
11
- def ensure_similarity_dicts(datas: List[Dict], respect_order: bool = True):
11
+ def ensure_similarity_dicts(datas: list[dict], respect_order: bool = True):
12
12
  all_cols = (data.keys() for data in datas)
13
13
  if not respect_order:
14
14
  unique_cols = set(chain(*all_cols))
@@ -44,4 +44,4 @@ def standardize_col_dtype(vals):
44
44
  elif int in types and float in types:
45
45
  return vals
46
46
  else:
47
- return [convert_to_string(v) for v in vals]
47
+ return [convert_to_string(v) for v in vals]
@@ -1,11 +1,12 @@
1
1
  """This script runs on run time and checks if all the nodes that are created have a function in the flow_graph as well
2
2
  as have a component in flowfile_frontend"""
3
3
 
4
- from flowfile_core.schemas import input_schema
5
- from flowfile_core.flowfile.flow_graph import FlowGraph
6
- from flowfile_core.configs.node_store import nodes_list, NodeTemplate
7
4
  import inspect
8
5
 
6
+ from flowfile_core.configs.node_store import NodeTemplate, nodes_list
7
+ from flowfile_core.flowfile.flow_graph import FlowGraph
8
+ from flowfile_core.schemas import input_schema
9
+
9
10
 
10
11
  def check_if_node_has_add_function_in_flow_graph(node: NodeTemplate):
11
12
  func_name = "add_" + node.item
@@ -17,7 +18,7 @@ def check_if_node_has_add_function_in_flow_graph(node: NodeTemplate):
17
18
 
18
19
 
19
20
  def check_if_node_has_input_schema_definition(node: NodeTemplate):
20
- if "node"+node.item.replace("_","") not in {k.lower() for k in inspect.getmodule(input_schema).__dict__.keys()}:
21
+ if "node" + node.item.replace("_", "") not in {k.lower() for k in inspect.getmodule(input_schema).__dict__.keys()}:
21
22
  raise ValueError(
22
23
  f"Node {node.name} ({node.item}) does not have a corresponding input schema definition in input_schema.py."
23
24
  "Check if the schema is implemented or if the node item is correct."
@@ -1,69 +1,124 @@
1
1
  # flowframe/__init__.py
2
2
  """A Polars-like API for building ETL graphs."""
3
3
 
4
- from importlib.metadata import version
4
+ from importlib.metadata import PackageNotFoundError, version
5
5
 
6
- # Core classes
7
- from flowfile_frame.flow_frame import FlowFrame # noqa: F401
8
6
  from pl_fuzzy_frame_match.models import FuzzyMapping # noqa: F401
7
+ from polars.datatypes import ( # noqa: F401
8
+ Array,
9
+ Binary,
10
+ # Other primitive types
11
+ Boolean,
12
+ # Special types
13
+ Categorical,
14
+ # Type classes
15
+ DataType,
16
+ DataTypeClass,
17
+ # Date/time types
18
+ Date,
19
+ Datetime,
20
+ Decimal,
21
+ Duration,
22
+ Enum,
23
+ Field,
24
+ # Float types
25
+ Float32,
26
+ Float64,
27
+ # Integer types
28
+ Int8,
29
+ Int16,
30
+ Int32,
31
+ Int64,
32
+ Int128,
33
+ IntegerType,
34
+ # Complex types
35
+ List,
36
+ Null,
37
+ Object,
38
+ String,
39
+ Struct,
40
+ TemporalType,
41
+ Time,
42
+ UInt8,
43
+ UInt16,
44
+ UInt32,
45
+ UInt64,
46
+ Unknown,
47
+ Utf8,
48
+ )
9
49
 
10
- from flowfile_frame.utils import create_flow_graph # noqa: F401
50
+ from flowfile_frame.cloud_storage.secret_manager import (
51
+ create_cloud_storage_connection,
52
+ create_cloud_storage_connection_if_not_exists,
53
+ del_cloud_storage_connection,
54
+ get_all_available_cloud_storage_connections,
55
+ )
11
56
 
12
57
  # Commonly used functions
13
58
  from flowfile_frame.expr import ( # noqa: F401
14
- col, lit, column,
15
- cum_count, len,
16
- sum, min, max, mean, count, when, implode, last, corr, cov, first
59
+ col,
60
+ column,
61
+ corr,
62
+ count,
63
+ cov,
64
+ cum_count,
65
+ first,
66
+ implode,
67
+ last,
68
+ len,
69
+ lit,
70
+ max,
71
+ mean,
72
+ min,
73
+ sum,
74
+ when,
17
75
  )
18
76
 
19
- from flowfile_frame.lazy import (fold)
20
-
21
- # Selector utilities
22
- from flowfile_frame.selectors import ( # noqa: F401
23
- numeric, float_, integer, string, temporal,
24
- datetime, date, time, duration, boolean,
25
- categorical, object_, list_, struct, all_,
26
- by_dtype, contains, starts_with, ends_with, matches
27
- )
28
-
29
- from flowfile_frame.series import Series
77
+ # Core classes
78
+ from flowfile_frame.flow_frame import FlowFrame # noqa: F401
30
79
 
31
80
  # File I/O
32
81
  from flowfile_frame.flow_frame_methods import ( # noqa: F401
33
- read_csv, read_parquet, from_dict, concat, scan_csv, scan_parquet, scan_json_from_cloud_storage,
34
- scan_parquet_from_cloud_storage,
82
+ concat,
83
+ from_dict,
84
+ read_csv,
85
+ read_parquet,
86
+ scan_csv,
35
87
  scan_csv_from_cloud_storage,
36
- scan_delta)
37
-
38
- from flowfile_frame.cloud_storage.secret_manager import (del_cloud_storage_connection,
39
- create_cloud_storage_connection,
40
- get_all_available_cloud_storage_connections,
41
- create_cloud_storage_connection_if_not_exists)
42
-
43
- from polars.datatypes import ( # noqa: F401
44
- # Integer types
45
- Int8, Int16, Int32, Int64, Int128,
46
- UInt8, UInt16, UInt32, UInt64,
47
- IntegerType,
48
-
49
- # Float types
50
- Float32, Float64,
51
-
52
- # Other primitive types
53
- Boolean, String, Utf8, Binary, Null,
54
-
55
- # Complex types
56
- List, Array, Struct, Object,
57
-
58
- # Date/time types
59
- Date, Time, Datetime, Duration,
60
- TemporalType,
61
-
62
- # Special types
63
- Categorical, Decimal, Enum, Unknown,
88
+ scan_delta,
89
+ scan_json_from_cloud_storage,
90
+ scan_parquet,
91
+ scan_parquet_from_cloud_storage,
92
+ )
93
+ from flowfile_frame.lazy import fold
64
94
 
65
- # Type classes
66
- DataType, DataTypeClass, Field
95
+ # Selector utilities
96
+ from flowfile_frame.selectors import ( # noqa: F401
97
+ all_,
98
+ boolean,
99
+ by_dtype,
100
+ categorical,
101
+ contains,
102
+ date,
103
+ datetime,
104
+ duration,
105
+ ends_with,
106
+ float_,
107
+ integer,
108
+ list_,
109
+ matches,
110
+ numeric,
111
+ object_,
112
+ starts_with,
113
+ string,
114
+ struct,
115
+ temporal,
116
+ time,
67
117
  )
118
+ from flowfile_frame.series import Series
119
+ from flowfile_frame.utils import create_flow_graph # noqa: F401
68
120
 
69
- __version__ = version("Flowfile")
121
+ try:
122
+ __version__ = version("Flowfile")
123
+ except PackageNotFoundError:
124
+ __version__ = "0.5.0"
@@ -2,16 +2,9 @@
2
2
  """Adapters to connect FlowFrame with the flowfile-core library."""
3
3
 
4
4
  # Import from your existing project
5
- from flowfile_core.flowfile.flow_graph import FlowGraph, add_connection
6
5
  from flowfile_core.flowfile.flow_data_engine.flow_data_engine import FlowDataEngine
6
+ from flowfile_core.flowfile.flow_graph import FlowGraph, add_connection
7
7
  from flowfile_core.schemas import input_schema, schemas, transform_schema
8
8
 
9
9
  # Export these for use in FlowFrame
10
- __all__ = [
11
- 'FlowGraph',
12
- 'add_connection',
13
- 'FlowDataEngine',
14
- 'input_schema',
15
- 'schemas',
16
- 'transform_schema'
17
- ]
10
+ __all__ = ["FlowGraph", "add_connection", "FlowDataEngine", "input_schema", "schemas", "transform_schema"]