Flowfile 0.2.2__tar.gz → 0.3.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of Flowfile might be problematic. Click here for more details.

Files changed (306) hide show
  1. flowfile-0.3.0.1/PKG-INFO +219 -0
  2. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile/__init__.py +14 -7
  3. flowfile-0.3.0.1/flowfile/__main__.py +60 -0
  4. flowfile-0.3.0.1/flowfile/api.py +379 -0
  5. flowfile-0.3.0.1/flowfile/web/__init__.py +155 -0
  6. flowfile-0.3.0.1/flowfile/web/static/assets/AirbyteReader-1ac35765.css +314 -0
  7. flowfile-0.3.0.1/flowfile/web/static/assets/AirbyteReader-cb0c1d4a.js +921 -0
  8. flowfile-0.3.0.1/flowfile/web/static/assets/CrossJoin-41efa4cb.css +100 -0
  9. flowfile-0.3.0.1/flowfile/web/static/assets/CrossJoin-a514fa59.js +153 -0
  10. flowfile-0.3.0.1/flowfile/web/static/assets/DatabaseConnectionSettings-0c04b2e5.css +77 -0
  11. flowfile-0.3.0.1/flowfile/web/static/assets/DatabaseConnectionSettings-f2cecf33.js +151 -0
  12. flowfile-0.3.0.1/flowfile/web/static/assets/DatabaseManager-30fa27e5.css +64 -0
  13. flowfile-0.3.0.1/flowfile/web/static/assets/DatabaseManager-83ee3c98.js +484 -0
  14. flowfile-0.3.0.1/flowfile/web/static/assets/DatabaseReader-dc0c6881.js +426 -0
  15. flowfile-0.3.0.1/flowfile/web/static/assets/DatabaseReader-f50c6558.css +158 -0
  16. flowfile-0.3.0.1/flowfile/web/static/assets/DatabaseWriter-2f570e53.css +96 -0
  17. flowfile-0.3.0.1/flowfile/web/static/assets/DatabaseWriter-5afe9f8d.js +312 -0
  18. flowfile-0.3.0.1/flowfile/web/static/assets/ExploreData-5bdae813.css +45 -0
  19. flowfile-0.3.0.1/flowfile/web/static/assets/ExploreData-c7ee19cf.js +118306 -0
  20. flowfile-0.3.0.1/flowfile/web/static/assets/ExternalSource-17b23a01.js +225 -0
  21. flowfile-0.3.0.1/flowfile/web/static/assets/ExternalSource-e37b6275.css +94 -0
  22. flowfile-0.3.0.1/flowfile/web/static/assets/Filter-90856b4f.js +238 -0
  23. flowfile-0.3.0.1/flowfile/web/static/assets/Filter-a9d08ba1.css +20 -0
  24. flowfile-0.3.0.1/flowfile/web/static/assets/Formula-38b71e9e.js +197 -0
  25. flowfile-0.3.0.1/flowfile/web/static/assets/Formula-d60a74f4.css +17 -0
  26. flowfile-0.3.0.1/flowfile/web/static/assets/FuzzyMatch-6857de82.css +254 -0
  27. flowfile-0.3.0.1/flowfile/web/static/assets/FuzzyMatch-d0f1fe81.js +422 -0
  28. flowfile-0.3.0.1/flowfile/web/static/assets/GoogleSheet-854294a4.js +2616 -0
  29. flowfile-0.3.0.1/flowfile/web/static/assets/GoogleSheet-92084da7.css +233 -0
  30. flowfile-0.3.0.1/flowfile/web/static/assets/GraphSolver-0c86bbc6.js +382 -0
  31. flowfile-0.3.0.1/flowfile/web/static/assets/GraphSolver-17fd26db.css +68 -0
  32. flowfile-0.3.0.1/flowfile/web/static/assets/GroupBy-ab1ea74b.css +51 -0
  33. flowfile-0.3.0.1/flowfile/web/static/assets/GroupBy-f2772e9f.js +413 -0
  34. flowfile-0.3.0.1/flowfile/web/static/assets/Join-41c0f331.css +109 -0
  35. flowfile-0.3.0.1/flowfile/web/static/assets/Join-bc3e1cf7.js +247 -0
  36. flowfile-0.3.0.1/flowfile/web/static/assets/ManualInput-03aa0245.js +391 -0
  37. flowfile-0.3.0.1/flowfile/web/static/assets/ManualInput-ac7b9972.css +84 -0
  38. flowfile-0.3.0.1/flowfile/web/static/assets/Output-48f81019.css +2642 -0
  39. flowfile-0.3.0.1/flowfile/web/static/assets/Output-5b35eee8.js +536 -0
  40. flowfile-0.3.0.1/flowfile/web/static/assets/Pivot-7164087c.js +408 -0
  41. flowfile-0.3.0.1/flowfile/web/static/assets/Pivot-f415e85f.css +35 -0
  42. flowfile-0.3.0.1/flowfile/web/static/assets/PolarsCode-3abf6507.js +2863 -0
  43. flowfile-0.3.0.1/flowfile/web/static/assets/PolarsCode-650322d1.css +35 -0
  44. flowfile-0.3.0.1/flowfile/web/static/assets/PopOver-b37ff9be.js +577 -0
  45. flowfile-0.3.0.1/flowfile/web/static/assets/PopOver-bccfde04.css +32 -0
  46. flowfile-0.3.0.1/flowfile/web/static/assets/Read-65966a3e.js +701 -0
  47. flowfile-0.3.0.1/flowfile/web/static/assets/Read-80dc1675.css +197 -0
  48. flowfile-0.3.0.1/flowfile/web/static/assets/RecordCount-c66c6d6d.js +121 -0
  49. flowfile-0.3.0.1/flowfile/web/static/assets/RecordId-826dc095.js +339 -0
  50. flowfile-0.3.0.1/flowfile/web/static/assets/Sample-4ed555c8.js +184 -0
  51. flowfile-0.3.0.1/flowfile/web/static/assets/SecretManager-eac1e97d.js +382 -0
  52. flowfile-0.3.0.1/flowfile/web/static/assets/Select-085f05cc.js +231 -0
  53. flowfile-0.3.0.1/flowfile/web/static/assets/SettingsSection-1f5e79c1.js +87 -0
  54. flowfile-0.3.0.1/flowfile/web/static/assets/SettingsSection-9c836ecc.css +47 -0
  55. flowfile-0.3.0.1/flowfile/web/static/assets/Sort-3e6cb414.js +309 -0
  56. flowfile-0.3.0.1/flowfile/web/static/assets/Sort-7ccfa0fe.css +51 -0
  57. flowfile-0.3.0.1/flowfile/web/static/assets/TextToRows-606349bc.js +307 -0
  58. flowfile-0.3.0.1/flowfile/web/static/assets/TextToRows-c92d1ec2.css +48 -0
  59. flowfile-0.3.0.1/flowfile/web/static/assets/UnavailableFields-5edd5322.css +49 -0
  60. flowfile-0.3.0.1/flowfile/web/static/assets/UnavailableFields-b41976ed.js +36 -0
  61. flowfile-0.3.0.1/flowfile/web/static/assets/Union-8d9ac7f9.css +30 -0
  62. flowfile-0.3.0.1/flowfile/web/static/assets/Union-fca91665.js +145 -0
  63. flowfile-0.3.0.1/flowfile/web/static/assets/Unique-a59f830e.js +273 -0
  64. flowfile-0.3.0.1/flowfile/web/static/assets/Unique-b5615727.css +51 -0
  65. flowfile-0.3.0.1/flowfile/web/static/assets/Unpivot-246e9bbd.css +77 -0
  66. flowfile-0.3.0.1/flowfile/web/static/assets/Unpivot-c3815565.js +441 -0
  67. flowfile-0.3.0.1/flowfile/web/static/assets/airbyte-292aa232.png +0 -0
  68. flowfile-0.3.0.1/flowfile/web/static/assets/api-22b338bd.js +60 -0
  69. flowfile-0.3.0.1/flowfile/web/static/assets/cross_join-d30c0290.png +0 -0
  70. flowfile-0.3.0.1/flowfile/web/static/assets/database_reader-ce1e55f3.svg +24 -0
  71. flowfile-0.3.0.1/flowfile/web/static/assets/database_writer-b4ad0753.svg +23 -0
  72. flowfile-0.3.0.1/flowfile/web/static/assets/designer-2394122a.css +10697 -0
  73. flowfile-0.3.0.1/flowfile/web/static/assets/designer-e5bbe26f.js +69712 -0
  74. flowfile-0.3.0.1/flowfile/web/static/assets/documentation-08045cf2.js +33 -0
  75. flowfile-0.3.0.1/flowfile/web/static/assets/documentation-12216a74.css +50 -0
  76. flowfile-0.3.0.1/flowfile/web/static/assets/dropDown-35135ba8.css +143 -0
  77. flowfile-0.3.0.1/flowfile/web/static/assets/dropDown-5e7e9a5a.js +319 -0
  78. flowfile-0.3.0.1/flowfile/web/static/assets/dropDownGeneric-50a91b99.js +72 -0
  79. flowfile-0.3.0.1/flowfile/web/static/assets/dropDownGeneric-895680d6.css +10 -0
  80. flowfile-0.3.0.1/flowfile/web/static/assets/element-icons-9c88a535.woff +0 -0
  81. flowfile-0.3.0.1/flowfile/web/static/assets/element-icons-de5eb258.ttf +0 -0
  82. flowfile-0.3.0.1/flowfile/web/static/assets/explore_data-8a0a2861.png +0 -0
  83. flowfile-0.3.0.1/flowfile/web/static/assets/fa-brands-400-808443ae.ttf +0 -0
  84. flowfile-0.3.0.1/flowfile/web/static/assets/fa-brands-400-d7236a19.woff2 +0 -0
  85. flowfile-0.3.0.1/flowfile/web/static/assets/fa-regular-400-54cf6086.ttf +0 -0
  86. flowfile-0.3.0.1/flowfile/web/static/assets/fa-regular-400-e3456d12.woff2 +0 -0
  87. flowfile-0.3.0.1/flowfile/web/static/assets/fa-solid-900-aa759986.woff2 +0 -0
  88. flowfile-0.3.0.1/flowfile/web/static/assets/fa-solid-900-d2f05935.ttf +0 -0
  89. flowfile-0.3.0.1/flowfile/web/static/assets/fa-v4compatibility-0ce9033c.woff2 +0 -0
  90. flowfile-0.3.0.1/flowfile/web/static/assets/fa-v4compatibility-30f6abf6.ttf +0 -0
  91. flowfile-0.3.0.1/flowfile/web/static/assets/filter-d7708bda.png +0 -0
  92. flowfile-0.3.0.1/flowfile/web/static/assets/formula-eeeb1611.png +0 -0
  93. flowfile-0.3.0.1/flowfile/web/static/assets/fullEditor-178376bb.css +256 -0
  94. flowfile-0.3.0.1/flowfile/web/static/assets/fullEditor-705c6ccb.js +630 -0
  95. flowfile-0.3.0.1/flowfile/web/static/assets/fuzzy_match-40c161b2.png +0 -0
  96. flowfile-0.3.0.1/flowfile/web/static/assets/genericNodeSettings-65587f20.js +137 -0
  97. flowfile-0.3.0.1/flowfile/web/static/assets/genericNodeSettings-924759c7.css +46 -0
  98. flowfile-0.3.0.1/flowfile/web/static/assets/graph_solver-8b7888b8.png +0 -0
  99. flowfile-0.3.0.1/flowfile/web/static/assets/group_by-80561fc3.png +0 -0
  100. flowfile-0.3.0.1/flowfile/web/static/assets/index-552863fd.js +58652 -0
  101. flowfile-0.3.0.1/flowfile/web/static/assets/index-681a3ed0.css +8843 -0
  102. flowfile-0.3.0.1/flowfile/web/static/assets/input_data-ab2eb678.png +0 -0
  103. flowfile-0.3.0.1/flowfile/web/static/assets/join-349043ae.png +0 -0
  104. flowfile-0.3.0.1/flowfile/web/static/assets/manual_input-ae98f31d.png +0 -0
  105. flowfile-0.3.0.1/flowfile/web/static/assets/nodeTitle-cf9bae3c.js +227 -0
  106. flowfile-0.3.0.1/flowfile/web/static/assets/nodeTitle-f4b12bcb.css +134 -0
  107. flowfile-0.3.0.1/flowfile/web/static/assets/old_join-5d0eb604.png +0 -0
  108. flowfile-0.3.0.1/flowfile/web/static/assets/output-06ec0371.png +0 -0
  109. flowfile-0.3.0.1/flowfile/web/static/assets/pivot-9660df51.png +0 -0
  110. flowfile-0.3.0.1/flowfile/web/static/assets/polars_code-05ce5dc6.png +0 -0
  111. flowfile-0.3.0.1/flowfile/web/static/assets/record_count-dab44eb5.png +0 -0
  112. flowfile-0.3.0.1/flowfile/web/static/assets/record_id-0b15856b.png +0 -0
  113. flowfile-0.3.0.1/flowfile/web/static/assets/sample-693a88b5.png +0 -0
  114. flowfile-0.3.0.1/flowfile/web/static/assets/secretApi-3ad510e1.js +46 -0
  115. flowfile-0.3.0.1/flowfile/web/static/assets/select-b0d0437a.png +0 -0
  116. flowfile-0.3.0.1/flowfile/web/static/assets/selectDynamic-b062bc9b.css +107 -0
  117. flowfile-0.3.0.1/flowfile/web/static/assets/selectDynamic-bd644891.js +302 -0
  118. flowfile-0.3.0.1/flowfile/web/static/assets/sort-2aa579f0.png +0 -0
  119. flowfile-0.3.0.1/flowfile/web/static/assets/summarize-2a099231.png +0 -0
  120. flowfile-0.3.0.1/flowfile/web/static/assets/text_to_rows-859b29ea.png +0 -0
  121. flowfile-0.3.0.1/flowfile/web/static/assets/union-2d8609f4.png +0 -0
  122. flowfile-0.3.0.1/flowfile/web/static/assets/unique-1958b98a.png +0 -0
  123. flowfile-0.3.0.1/flowfile/web/static/assets/unpivot-d3cb4b5b.png +0 -0
  124. flowfile-0.3.0.1/flowfile/web/static/assets/view-7a0f0be1.png +0 -0
  125. flowfile-0.3.0.1/flowfile/web/static/assets/vue-codemirror.esm-dd17b478.js +22281 -0
  126. flowfile-0.3.0.1/flowfile/web/static/assets/vue-content-loader.es-6b36f05e.js +210 -0
  127. flowfile-0.3.0.1/flowfile/web/static/flowfile.svg +47 -0
  128. flowfile-0.3.0.1/flowfile/web/static/icons/flowfile.png +0 -0
  129. flowfile-0.3.0.1/flowfile/web/static/images/airbyte.png +0 -0
  130. flowfile-0.3.0.1/flowfile/web/static/images/flowfile.svg +47 -0
  131. flowfile-0.3.0.1/flowfile/web/static/images/google.svg +1 -0
  132. flowfile-0.3.0.1/flowfile/web/static/images/sheets.png +0 -0
  133. flowfile-0.3.0.1/flowfile/web/static/index.html +22 -0
  134. flowfile-0.3.0.1/flowfile/web/static/vite.svg +1 -0
  135. flowfile-0.3.0.1/flowfile/web/static/vue.svg +1 -0
  136. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/configs/settings.py +7 -32
  137. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/FlowfileFlow.py +4 -2
  138. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/analytics/analytics_processor.py +1 -1
  139. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/main.py +4 -1
  140. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/schemas/input_schema.py +1 -8
  141. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_frame/flowfile_frame/__init__.py +1 -2
  142. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_frame/flowfile_frame/flow_frame.py +6 -6
  143. flowfile-0.3.0.1/flowfile_frame/flowfile_frame/utils.py +45 -0
  144. {flowfile-0.2.2 → flowfile-0.3.0.1}/pyproject.toml +7 -3
  145. flowfile-0.3.0.1/readme-pypi.md +175 -0
  146. flowfile-0.2.2/PKG-INFO +0 -225
  147. flowfile-0.2.2/README.md +0 -181
  148. flowfile-0.2.2/flowfile/__main__.py +0 -24
  149. flowfile-0.2.2/flowfile_frame/flowfile_frame/__main__.py +0 -12
  150. flowfile-0.2.2/flowfile_frame/flowfile_frame/utils.py +0 -184
  151. {flowfile-0.2.2 → flowfile-0.3.0.1}/LICENSE +0 -0
  152. {flowfile-0.2.2 → flowfile-0.3.0.1}/build_backends/build_backends/__init__.py +0 -0
  153. {flowfile-0.2.2 → flowfile-0.3.0.1}/build_backends/build_backends/main.py +0 -0
  154. {flowfile-0.2.2 → flowfile-0.3.0.1}/build_backends/build_backends/main_prd.py +0 -0
  155. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/__init__.py +0 -0
  156. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/auth/__init__.py +0 -0
  157. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/auth/jwt.py +0 -0
  158. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/auth/models.py +0 -0
  159. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/auth/secrets.py +0 -0
  160. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/configs/__init__.py +0 -0
  161. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/configs/flow_logger.py +0 -0
  162. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/configs/node_store/__init__.py +0 -0
  163. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/configs/node_store/nodes.py +0 -0
  164. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/database/__init__.py +0 -0
  165. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/database/connection.py +0 -0
  166. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/database/init_db.py +0 -0
  167. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/database/models.py +0 -0
  168. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/fileExplorer/__init__.py +0 -0
  169. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/fileExplorer/funcs.py +0 -0
  170. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/fileExplorer/utils.py +0 -0
  171. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/__init__.py +0 -0
  172. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/_extensions/__init__.py +0 -0
  173. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/_extensions/real_time_interface.py +0 -0
  174. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/analytics/__init__.py +0 -0
  175. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/analytics/graphic_walker.py +0 -0
  176. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/analytics/schemas/__init__.py +0 -0
  177. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/analytics/utils.py +0 -0
  178. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/connection_manager/__init__.py +0 -0
  179. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/connection_manager/_connection_manager.py +0 -0
  180. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/connection_manager/models.py +0 -0
  181. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/database_connection_manager/__init__.py +0 -0
  182. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/database_connection_manager/db_connections.py +0 -0
  183. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/database_connection_manager/models.py +0 -0
  184. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/extensions.py +0 -0
  185. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/__init__.py +0 -0
  186. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/create/__init__.py +0 -0
  187. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/create/funcs.py +0 -0
  188. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +0 -0
  189. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/flow_file_column/__init__.py +0 -0
  190. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +0 -0
  191. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/flow_file_column/polars_type.py +0 -0
  192. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/flow_file_column/utils.py +0 -0
  193. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/fuzzy_matching/__init__.py +0 -0
  194. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/fuzzy_matching/prepare_for_fuzzy_match.py +0 -0
  195. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/fuzzy_matching/settings_validator.py +0 -0
  196. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/join/__init__.py +0 -0
  197. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/join/verify_integrity.py +0 -0
  198. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/pivot_table.py +0 -0
  199. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/polars_code_parser.py +0 -0
  200. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/read_excel_tables.py +0 -0
  201. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/sample_data.py +0 -0
  202. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/subprocess_operations/__init__.py +0 -0
  203. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/subprocess_operations/models.py +0 -0
  204. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +0 -0
  205. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/threaded_processes.py +0 -0
  206. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/types.py +0 -0
  207. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_data_engine/utils.py +0 -0
  208. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_node/__init__.py +0 -0
  209. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_node/flow_node.py +0 -0
  210. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_node/models.py +0 -0
  211. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/flow_node/schema_callback.py +0 -0
  212. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/handler.py +0 -0
  213. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/manage/__init__.py +0 -0
  214. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/manage/compatibility_enhancements.py +0 -0
  215. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/manage/manage_flowfile.py +0 -0
  216. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/manage/open_flowfile.py +0 -0
  217. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/setting_generator/__init__.py +0 -0
  218. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/setting_generator/setting_generator.py +0 -0
  219. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/setting_generator/settings.py +0 -0
  220. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/__init__.py +0 -0
  221. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/__init__.py +0 -0
  222. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/airbyte_sources/__init__.py +0 -0
  223. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/airbyte_sources/airbyte.py +0 -0
  224. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/airbyte_sources/models.py +0 -0
  225. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/airbyte_sources/settings.py +0 -0
  226. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/base_class.py +0 -0
  227. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/custom_external_sources/__init__.py +0 -0
  228. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/custom_external_sources/exchange_rate.py +0 -0
  229. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/custom_external_sources/external_source.py +0 -0
  230. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/custom_external_sources/google_sheet.py +0 -0
  231. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/custom_external_sources/sample_users.py +0 -0
  232. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/factory.py +0 -0
  233. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/sql_source/__init__.py +0 -0
  234. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/sql_source/models.py +0 -0
  235. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/sql_source/sql_source.py +0 -0
  236. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/sources/external_sources/sql_source/utils.py +0 -0
  237. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/util/__init__.py +0 -0
  238. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/util/calculate_layout.py +0 -0
  239. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/util/execution_orderer.py +0 -0
  240. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/flowfile/utils.py +0 -0
  241. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/routes/__init__.py +0 -0
  242. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/routes/auth.py +0 -0
  243. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/routes/logs.py +0 -0
  244. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/routes/public.py +0 -0
  245. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/routes/routes.py +0 -0
  246. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/routes/secrets.py +0 -0
  247. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/run_lock.py +0 -0
  248. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/schemas/__init__.py +0 -0
  249. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/schemas/analysis_schemas/__init__.py +0 -0
  250. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/schemas/analysis_schemas/graphic_walker_schemas.py +0 -0
  251. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/schemas/defaults.py +0 -0
  252. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/schemas/external_sources/__init__.py +0 -0
  253. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/schemas/external_sources/airbyte_schemas.py +0 -0
  254. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/schemas/models.py +0 -0
  255. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/schemas/output_model.py +0 -0
  256. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/schemas/schemas.py +0 -0
  257. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/schemas/transform_schema.py +0 -0
  258. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/secrets/__init__.py +0 -0
  259. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/secrets/secrets.py +0 -0
  260. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/utils/__init__.py +0 -0
  261. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/utils/arrow_reader.py +0 -0
  262. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/utils/excel_file_manager.py +0 -0
  263. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/utils/fileManager.py +0 -0
  264. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/utils/fl_executor.py +0 -0
  265. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_core/flowfile_core/utils/utils.py +0 -0
  266. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_frame/flowfile_frame/adapters.py +0 -0
  267. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_frame/flowfile_frame/expr.py +0 -0
  268. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_frame/flowfile_frame/group_frame.py +0 -0
  269. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_frame/flowfile_frame/join.py +0 -0
  270. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_frame/flowfile_frame/selectors.py +0 -0
  271. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/__init__.py +0 -0
  272. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/configs.py +0 -0
  273. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/create/__init__.py +0 -0
  274. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/create/funcs.py +0 -0
  275. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/create/models.py +0 -0
  276. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/create/pl_types.py +0 -0
  277. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/create/read_excel_tables.py +0 -0
  278. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/create/utils.py +0 -0
  279. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/external_sources/__init__.py +0 -0
  280. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/external_sources/airbyte_sources/__init__.py +0 -0
  281. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/external_sources/airbyte_sources/cache_manager.py +0 -0
  282. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/external_sources/airbyte_sources/main.py +0 -0
  283. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/external_sources/airbyte_sources/models.py +0 -0
  284. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/external_sources/airbyte_sources/settings.py +0 -0
  285. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/external_sources/sql_source/__init__.py +0 -0
  286. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/external_sources/sql_source/main.py +0 -0
  287. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/external_sources/sql_source/models.py +0 -0
  288. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/flow_logger.py +0 -0
  289. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/funcs.py +0 -0
  290. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/main.py +0 -0
  291. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/models.py +0 -0
  292. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/polars_fuzzy_match/__init__.py +0 -0
  293. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/polars_fuzzy_match/matcher.py +0 -0
  294. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/polars_fuzzy_match/models.py +0 -0
  295. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/polars_fuzzy_match/pre_process.py +0 -0
  296. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/polars_fuzzy_match/process.py +0 -0
  297. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/polars_fuzzy_match/utils.py +0 -0
  298. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/process_manager.py +0 -0
  299. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/routes.py +0 -0
  300. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/secrets.py +0 -0
  301. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/spawner.py +0 -0
  302. {flowfile-0.2.2 → flowfile-0.3.0.1}/flowfile_worker/flowfile_worker/utils.py +0 -0
  303. {flowfile-0.2.2 → flowfile-0.3.0.1}/test_utils/__init__.py +0 -0
  304. {flowfile-0.2.2 → flowfile-0.3.0.1}/test_utils/postgres/__init__.py +0 -0
  305. {flowfile-0.2.2 → flowfile-0.3.0.1}/test_utils/postgres/commands.py +0 -0
  306. {flowfile-0.2.2 → flowfile-0.3.0.1}/test_utils/postgres/fixtures.py +0 -0
@@ -0,0 +1,219 @@
1
+ Metadata-Version: 2.3
2
+ Name: Flowfile
3
+ Version: 0.3.0.1
4
+ Summary: Project combining flowfile core (backend) and flowfile_worker (compute offloader) and flowfile_frame (api)
5
+ Author: Edward van Eechoud
6
+ Author-email: evaneechoud@gmail.com
7
+ Requires-Python: >=3.10,<3.13
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.10
10
+ Classifier: Programming Language :: Python :: 3.11
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Requires-Dist: XlsxWriter (>=3.2.0,<3.3.0)
13
+ Requires-Dist: aiofiles (>=24.1.0,<25.0.0)
14
+ Requires-Dist: airbyte-cdk (==6.47.2)
15
+ Requires-Dist: bcrypt (>=4.3.0,<5.0.0)
16
+ Requires-Dist: connectorx (>=0.4.2,<0.5.0)
17
+ Requires-Dist: databases (>=0.9.0,<0.10.0)
18
+ Requires-Dist: faker (>=23.1.0,<23.2.0)
19
+ Requires-Dist: fastapi (>=0.115.2,<0.116.0)
20
+ Requires-Dist: fastexcel (>=0.12.0,<0.13.0)
21
+ Requires-Dist: google-api-python-client (>=2.149.0,<2.150.0)
22
+ Requires-Dist: gspread (>=6.1.3,<6.2.0)
23
+ Requires-Dist: loky (>=3.4.1,<3.5.0)
24
+ Requires-Dist: methodtools (>=0.4.7,<0.5.0)
25
+ Requires-Dist: openpyxl (>=3.1.2,<3.2.0)
26
+ Requires-Dist: passlib (>=1.7.4,<1.8.0)
27
+ Requires-Dist: pendulum (==2.1.2) ; python_version < "3.12"
28
+ Requires-Dist: polars (>1.8.2,<=1.25.2)
29
+ Requires-Dist: polars-distance (>=0.4.3,<0.5.0)
30
+ Requires-Dist: polars-ds (>=0.6.0)
31
+ Requires-Dist: polars-expr-transformer (>0.4.7.0)
32
+ Requires-Dist: polars-grouper (>=0.3.0,<0.4.0)
33
+ Requires-Dist: polars_simed (>=0.3.4,<0.4.0)
34
+ Requires-Dist: pyairbyte-flowfile (==0.20.2)
35
+ Requires-Dist: pyarrow (>=18.0.0,<19.0.0)
36
+ Requires-Dist: pydantic (>=2.9.2,<2.10.0)
37
+ Requires-Dist: pyinstaller (>=6.11.0,<7.0.0)
38
+ Requires-Dist: pytest (>=8.3.4,<9.0.0)
39
+ Requires-Dist: python-jose (>=3.4.0,<4.0.0)
40
+ Requires-Dist: python-multipart (>=0.0.12,<0.1.0)
41
+ Requires-Dist: uvicorn (>=0.32.0,<0.33.0)
42
+ Description-Content-Type: text/markdown
43
+
44
+ <h1 align="center">
45
+ <img src="https://raw.githubusercontent.com/Edwardvaneechoud/Flowfile/main/.github/images/logo.png" alt="Flowfile Logo" width="100">
46
+ <br>
47
+ Flowfile
48
+ </h1>
49
+
50
+ <p align="center">
51
+ <b>Main Repository</b>: <a href="https://github.com/Edwardvaneechoud/Flowfile">Edwardvaneechoud/Flowfile</a><br>
52
+ <b>Documentation</b>:
53
+ <a href="https://edwardvaneechoud.github.io/Flowfile/">Website</a> -
54
+ <a href="https://github.com/Edwardvaneechoud/Flowfile/blob/main/flowfile_core/README.md">Core</a> -
55
+ <a href="https://github.com/Edwardvaneechoud/Flowfile/blob/main/flowfile_worker/README.md">Worker</a> -
56
+ <a href="https://github.com/Edwardvaneechoud/Flowfile/blob/main/flowfile_frontend/README.md">Frontend</a> -
57
+ <a href="https://dev.to/edwardvaneechoud/building-flowfile-architecting-a-visual-etl-tool-with-polars-576c">Technical Architecture</a>
58
+ </p>
59
+
60
+ <p>
61
+ Flowfile is a visual ETL tool and Python library suite that combines drag-and-drop workflow building with the speed of Polars dataframes. Build data pipelines visually, transform data using powerful nodes, or define data flows programmatically with Python and analyze results - all with high-performance data processing.
62
+ </p>
63
+
64
+ <div align="center">
65
+ <img src="https://raw.githubusercontent.com/Edwardvaneechoud/Flowfile/main/.github/images/group_by_screenshot.png" alt="Flowfile Interface" width="800"/>
66
+ </div>
67
+
68
+ ## ⚡ Technical Design
69
+
70
+ The `Flowfile` PyPI package provides the backend services and the `flowfile_frame` Python library:
71
+
72
+ - **Core (`flowfile_core`)** (FastAPI): The main ETL engine using Polars for high-performance data transformations. Typically runs on port `:63578`.
73
+ - **Worker (`flowfile_worker`)** (FastAPI): Handles computation-intensive tasks and caching of data operations, supporting the Core service. Typically runs on port `:63579`.
74
+ - **FlowFrame API (`flowfile_frame`)**: A Python library with a Polars-like API for defining data manipulation pipelines programmatically, which also generates an underlying ETL graph compatible with the Flowfile ecosystem.
75
+
76
+ Each flow is represented as a directed acyclic graph (DAG), where nodes represent data operations and edges represent data flow between operations.
77
+
78
+ For a deeper dive into the technical architecture, check out [this article](https://dev.to/edwardvaneechoud/building-flowfile-architecting-a-visual-etl-tool-with-polars-576c) on how Flowfile leverages Polars for efficient data processing.
79
+
80
+ ## ✨ Introducing FlowFile Frame - A Polars-Like API for ETL
81
+
82
+ FlowFile Frame is a Python library that provides a familiar Polars-like API for data manipulation, while simultaneously building an ETL (Extract, Transform, Load) graph under the hood. This allows you to:
83
+
84
+ 1. Write data transformation code using a simple, Pandas/Polars-like API
85
+ 2. Automatically generate executable ETL workflows compatible with the Flowfile ecosystem
86
+ 3. Visualize, save, and share your data pipelines
87
+ 4. Get the performance benefits of Polars with the traceability of ETL graphs
88
+
89
+ ### FlowFrame Quick Start
90
+
91
+ ```python
92
+ import flowfile_frame as ff
93
+ from flowfile_frame.utils import open_graph_in_editor
94
+
95
+ # Create a complex data pipeline
96
+ df = ff.from_dict({
97
+ "id": [1, 2, 3, 4, 5],
98
+ "category": ["A", "B", "A", "C", "B"],
99
+ "value": [100, 200, 150, 300, 250]
100
+ })
101
+
102
+ open_graph_in_editor(df.flow_graph)
103
+
104
+ ```
105
+
106
+ ### Key FlowFrame Features
107
+
108
+ - **Familiar API**: Based on Polars, making it easy to learn if you know Pandas or Polars
109
+ - **ETL Graph Generation**: Automatically builds a directed acyclic graph of your data operations
110
+ - **Lazy Evaluation**: Operations are not executed until `collect()` or a write operation
111
+ - **Interoperability**: Saved `.flowfile` graphs can be opened in the visual Flowfile Designer
112
+ - **High Performance**: Leverages Polars for fast data processing
113
+ - **Reproducible**: Save and share your data transformation workflows
114
+
115
+ ### Common FlowFrame Operations
116
+
117
+ ```python
118
+ import flowfile_frame as ff
119
+ from flowfile_frame import col, when
120
+
121
+ # Create from dictionary
122
+ df = ff.from_dict({
123
+ "id": [1, 2, 3],
124
+ "name": ["Alice", "Bob", "Charlie"],
125
+ "age": [25, 35, 28]
126
+ })
127
+
128
+ flow_graph = df.flow_graph
129
+ # Reading data
130
+ # df_csv = ff.read_csv("data.csv")
131
+ # df_parquet = ff.read_parquet("data.parquet")
132
+
133
+ # Filtering
134
+ adults = df.filter(col("age") >= 30)
135
+
136
+ # Select and transform
137
+ result = df.select(
138
+ col("name"),
139
+ (col("age") * 2).alias("double_age")
140
+ )
141
+
142
+ # Add new columns
143
+ df_with_cols = df.with_columns([
144
+ (col("age") + 10).alias("future_age"),
145
+ when(col("age") >= 30).then(ff.lit("Senior")).otherwise(ff.lit("Junior")).alias("status")]
146
+ )
147
+
148
+ # Group by and aggregate
149
+ df_sales = ff.from_dict({
150
+ "region": ["North", "South", "North", "South"],
151
+ "sales": [100, 200, 150, 300]
152
+ })
153
+ sales_by_region = df_sales.group_by("region").agg([
154
+ col("sales").sum().alias("total_sales"),
155
+ col("sales").mean().alias("avg_sales")
156
+ ])
157
+
158
+ # Joins
159
+ customers = ff.from_dict({"id": [1, 2, 3], "name": ["Alice", "Bob", "Charlie"]}, flow_graph=flow_graph)
160
+ orders = ff.from_dict({"id": [101, 102], "customer_id": [1, 2], "amount": [100, 200]}, flow_graph=flow_graph)
161
+ joined = customers.join(orders, left_on="id", right_on="customer_id")
162
+
163
+ # Save and visualize ETL graph
164
+
165
+ result.save_graph("my_pipeline.flowfile")
166
+ # open_graph_in_editor(result.flow_graph, "my_pipeline.flowfile") # Opens in Designer UI if installed
167
+ ```
168
+
169
+ For more detailed information on all available operations, including pivoting, window functions, complex workflows, and more, please refer to the [FlowFrame documentation](https://github.com/Edwardvaneechoud/Flowfile/blob/main/flowfile_frame/README.md).
170
+
171
+ ## 🔥 Example Use Cases
172
+
173
+ Flowfile is great for:
174
+
175
+ - **Data Cleaning & Transformation**
176
+ - Complex joins (fuzzy matching)
177
+ - Text-to-rows transformations
178
+ - Advanced filtering and grouping
179
+ - Custom formulas and expressions
180
+ - Filter data based on conditions
181
+
182
+ - **Performance**
183
+ - Built to scale out of core
184
+ - Using Polars for data processing
185
+
186
+ - **Data Integration**
187
+ - Standardize data formats
188
+ - Handle messy Excel files
189
+
190
+ - **ETL Operations**
191
+ - Data quality checks
192
+
193
+ (For more visual examples of these use cases, please see our [main GitHub repository](https://github.com/Edwardvaneechoud/Flowfile#-example-use-cases)).
194
+
195
+ ## 🚀 Getting Started
196
+
197
+ ### Installing the Flowfile Python Package
198
+
199
+ This package provides the `flowfile_core` and `flowfile_worker` backend services, and the `flowfile_frame` library.
200
+
201
+ ```bash
202
+ pip install Flowfile
203
+ ```
204
+
205
+ Once installed, you can use `flowfile_frame` as a library in your Python scripts (see Quick Start above).
206
+
207
+ ### Full Application with Visual Designer
208
+
209
+ For the complete visual ETL experience with the Designer UI, please see the [installation instructions in the main repository](https://github.com/Edwardvaneechoud/Flowfile#-getting-started).
210
+
211
+ Available options include:
212
+ - Desktop application (recommended for most users)
213
+ - Docker setup (backend services + web frontend)
214
+ - Manual setup for development
215
+
216
+ ## 📋 Development Roadmap
217
+
218
+ For the latest development roadmap and TODO list, please refer to the [main repository](https://github.com/Edwardvaneechoud/Flowfile#-todo).
219
+
@@ -7,9 +7,16 @@ This package ties together the FlowFile ecosystem components:
7
7
  - flowfile_worker: Computation engine
8
8
  """
9
9
 
10
- __version__ = "0.2.1"
10
+ __version__ = "0.3.1"
11
11
 
12
- # Import the key components from flowfile_frame
12
+ import os
13
+ import logging
14
+
15
+ os.environ['WORKER_PORT'] = "63578"
16
+ os.environ['SINGLE_FILE_MODE'] = "1"
17
+
18
+ from flowfile.web import start_server as start_web_ui
19
+ from flowfile.api import open_graph_in_editor
13
20
  from flowfile_frame.flow_frame import (
14
21
  FlowFrame, read_csv, read_parquet, from_dict, concat
15
22
  )
@@ -18,7 +25,7 @@ from flowfile_frame.expr import (
18
25
  sum, min, max, mean, count, when
19
26
  )
20
27
  from flowfile_frame.group_frame import GroupByFrame
21
- from flowfile_frame.utils import create_etl_graph, open_graph_in_editor
28
+ from flowfile_frame.utils import create_flow_graph
22
29
  from flowfile_frame.selectors import (
23
30
  numeric, float_, integer, string, temporal,
24
31
  datetime, date, time, duration, boolean,
@@ -26,7 +33,6 @@ from flowfile_frame.selectors import (
26
33
  by_dtype, contains, starts_with, ends_with, matches
27
34
  )
28
35
 
29
- # Import Polars data types for convenience
30
36
  from polars.datatypes import (
31
37
  Int8, Int16, Int32, Int64, Int128,
32
38
  UInt8, UInt16, UInt32, UInt64,
@@ -38,7 +44,6 @@ from polars.datatypes import (
38
44
  DataType, DataTypeClass, Field
39
45
  )
40
46
 
41
- # Define what's publicly available from the package
42
47
  __all__ = [
43
48
  # Core FlowFrame classes
44
49
  'FlowFrame', 'GroupByFrame',
@@ -57,7 +62,7 @@ __all__ = [
57
62
  'by_dtype', 'contains', 'starts_with', 'ends_with', 'matches',
58
63
 
59
64
  # Utilities
60
- 'create_etl_graph', 'open_graph_in_editor',
65
+ 'create_flow_graph', 'open_graph_in_editor',
61
66
 
62
67
  # Data types from Polars
63
68
  'Int8', 'Int16', 'Int32', 'Int64', 'Int128',
@@ -68,4 +73,6 @@ __all__ = [
68
73
  'Date', 'Time', 'Datetime', 'Duration',
69
74
  'Categorical', 'Decimal', 'Enum', 'Unknown',
70
75
  'DataType', 'DataTypeClass', 'Field',
71
- ]
76
+ 'start_web_ui'
77
+ ]
78
+ logging.getLogger("PipelineHandler").setLevel(logging.WARNING)
@@ -0,0 +1,60 @@
1
+ # flowfile/__main__.py
2
+
3
+ def main():
4
+ """
5
+ Display information about FlowFile when run directly as a module.
6
+ """
7
+ import flowfile
8
+ import argparse
9
+
10
+ parser = argparse.ArgumentParser(description="FlowFile: A visual ETL tool with a Polars-like API")
11
+ parser.add_argument("command", nargs="?", choices=["run"], help="Command to execute")
12
+ parser.add_argument("component", nargs="?", choices=["web", "core", "worker"],
13
+ help="Component to run (web, core, or worker)")
14
+ parser.add_argument("--host", default="127.0.0.1", help="Host to bind the server to")
15
+ parser.add_argument("--port", type=int, default=63578, help="Port to bind the server to")
16
+ parser.add_argument("--no-browser", action="store_true", help="Don't open a browser window")
17
+
18
+ # Parse arguments
19
+ args = parser.parse_args()
20
+
21
+ if args.command == "run" and args.component:
22
+ if args.component == "web":
23
+ try:
24
+ flowfile.start_web_ui(
25
+ host=args.host,
26
+ port=args.port,
27
+ open_browser=not args.no_browser
28
+ )
29
+ except KeyboardInterrupt:
30
+ print("\nFlowFile service stopped.")
31
+ elif args.component == "core":
32
+ # Only for direct core service usage
33
+ from flowfile_core.main import run as run_core
34
+ run_core(host=args.host, port=args.port)
35
+ elif args.component == "worker":
36
+ # Only for direct worker service usage
37
+ from flowfile_worker.main import run as run_worker
38
+ run_worker(host=args.host, port=args.port)
39
+ else:
40
+ # Default action - show info
41
+ print(f"FlowFile v{flowfile.__version__}")
42
+ print("A framework combining visual ETL with a Polars-like API")
43
+ print("\nUsage:")
44
+ print(" # Start the FlowFile web UI with integrated services")
45
+ print(" flowfile run web")
46
+ print("")
47
+ print(" # Advanced: Run individual components")
48
+ print(" flowfile run core # Start only the core service")
49
+ print(" flowfile run worker # Start only the worker service")
50
+ print("")
51
+ print(" # Options")
52
+ print(" flowfile run web --host 0.0.0.0 --port 8080 # Custom host/port")
53
+ print(" flowfile run web --no-browser # Don't open browser")
54
+ print("")
55
+ print(" # Python API usage examples")
56
+ print(" import flowfile as ff")
57
+ print(" df = ff.read_csv('data.csv')")
58
+ print(" result = df.filter(ff.col('value') > 10)")
59
+ print(" ff.open_graph_in_editor(result)")
60
+ print(" ff.start_web_ui()")