Flowfile 0.3.0.1__tar.gz → 0.3.0.2__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 (304) hide show
  1. flowfile-0.3.0.2/PKG-INFO +235 -0
  2. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/__main__.py +5 -6
  3. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/api.py +9 -5
  4. flowfile-0.3.0.2/flowfile/readme.md +130 -0
  5. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/__init__.py +5 -5
  6. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/pyproject.toml +1 -1
  7. flowfile-0.3.0.2/readme-pypi.md +192 -0
  8. flowfile-0.3.0.1/PKG-INFO +0 -219
  9. flowfile-0.3.0.1/readme-pypi.md +0 -175
  10. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/LICENSE +0 -0
  11. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/build_backends/build_backends/__init__.py +0 -0
  12. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/build_backends/build_backends/main.py +0 -0
  13. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/build_backends/build_backends/main_prd.py +0 -0
  14. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/__init__.py +0 -0
  15. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/AirbyteReader-1ac35765.css +0 -0
  16. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/AirbyteReader-cb0c1d4a.js +0 -0
  17. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/CrossJoin-41efa4cb.css +0 -0
  18. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/CrossJoin-a514fa59.js +0 -0
  19. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/DatabaseConnectionSettings-0c04b2e5.css +0 -0
  20. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/DatabaseConnectionSettings-f2cecf33.js +0 -0
  21. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/DatabaseManager-30fa27e5.css +0 -0
  22. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/DatabaseManager-83ee3c98.js +0 -0
  23. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/DatabaseReader-dc0c6881.js +0 -0
  24. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/DatabaseReader-f50c6558.css +0 -0
  25. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/DatabaseWriter-2f570e53.css +0 -0
  26. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/DatabaseWriter-5afe9f8d.js +0 -0
  27. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/ExploreData-5bdae813.css +0 -0
  28. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/ExploreData-c7ee19cf.js +0 -0
  29. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/ExternalSource-17b23a01.js +0 -0
  30. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/ExternalSource-e37b6275.css +0 -0
  31. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Filter-90856b4f.js +0 -0
  32. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Filter-a9d08ba1.css +0 -0
  33. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Formula-38b71e9e.js +0 -0
  34. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Formula-d60a74f4.css +0 -0
  35. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/FuzzyMatch-6857de82.css +0 -0
  36. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/FuzzyMatch-d0f1fe81.js +0 -0
  37. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/GoogleSheet-854294a4.js +0 -0
  38. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/GoogleSheet-92084da7.css +0 -0
  39. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/GraphSolver-0c86bbc6.js +0 -0
  40. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/GraphSolver-17fd26db.css +0 -0
  41. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/GroupBy-ab1ea74b.css +0 -0
  42. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/GroupBy-f2772e9f.js +0 -0
  43. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Join-41c0f331.css +0 -0
  44. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Join-bc3e1cf7.js +0 -0
  45. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/ManualInput-03aa0245.js +0 -0
  46. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/ManualInput-ac7b9972.css +0 -0
  47. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Output-48f81019.css +0 -0
  48. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Output-5b35eee8.js +0 -0
  49. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Pivot-7164087c.js +0 -0
  50. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Pivot-f415e85f.css +0 -0
  51. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/PolarsCode-3abf6507.js +0 -0
  52. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/PolarsCode-650322d1.css +0 -0
  53. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/PopOver-b37ff9be.js +0 -0
  54. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/PopOver-bccfde04.css +0 -0
  55. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Read-65966a3e.js +0 -0
  56. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Read-80dc1675.css +0 -0
  57. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/RecordCount-c66c6d6d.js +0 -0
  58. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/RecordId-826dc095.js +0 -0
  59. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Sample-4ed555c8.js +0 -0
  60. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/SecretManager-eac1e97d.js +0 -0
  61. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Select-085f05cc.js +0 -0
  62. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/SettingsSection-1f5e79c1.js +0 -0
  63. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/SettingsSection-9c836ecc.css +0 -0
  64. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Sort-3e6cb414.js +0 -0
  65. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Sort-7ccfa0fe.css +0 -0
  66. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/TextToRows-606349bc.js +0 -0
  67. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/TextToRows-c92d1ec2.css +0 -0
  68. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/UnavailableFields-5edd5322.css +0 -0
  69. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/UnavailableFields-b41976ed.js +0 -0
  70. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Union-8d9ac7f9.css +0 -0
  71. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Union-fca91665.js +0 -0
  72. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Unique-a59f830e.js +0 -0
  73. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Unique-b5615727.css +0 -0
  74. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Unpivot-246e9bbd.css +0 -0
  75. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/Unpivot-c3815565.js +0 -0
  76. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/airbyte-292aa232.png +0 -0
  77. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/api-22b338bd.js +0 -0
  78. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/cross_join-d30c0290.png +0 -0
  79. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/database_reader-ce1e55f3.svg +0 -0
  80. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/database_writer-b4ad0753.svg +0 -0
  81. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/designer-2394122a.css +0 -0
  82. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/designer-e5bbe26f.js +0 -0
  83. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/documentation-08045cf2.js +0 -0
  84. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/documentation-12216a74.css +0 -0
  85. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/dropDown-35135ba8.css +0 -0
  86. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/dropDown-5e7e9a5a.js +0 -0
  87. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/dropDownGeneric-50a91b99.js +0 -0
  88. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/dropDownGeneric-895680d6.css +0 -0
  89. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/element-icons-9c88a535.woff +0 -0
  90. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/element-icons-de5eb258.ttf +0 -0
  91. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/explore_data-8a0a2861.png +0 -0
  92. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/fa-brands-400-808443ae.ttf +0 -0
  93. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/fa-brands-400-d7236a19.woff2 +0 -0
  94. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/fa-regular-400-54cf6086.ttf +0 -0
  95. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/fa-regular-400-e3456d12.woff2 +0 -0
  96. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/fa-solid-900-aa759986.woff2 +0 -0
  97. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/fa-solid-900-d2f05935.ttf +0 -0
  98. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/fa-v4compatibility-0ce9033c.woff2 +0 -0
  99. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/fa-v4compatibility-30f6abf6.ttf +0 -0
  100. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/filter-d7708bda.png +0 -0
  101. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/formula-eeeb1611.png +0 -0
  102. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/fullEditor-178376bb.css +0 -0
  103. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/fullEditor-705c6ccb.js +0 -0
  104. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/fuzzy_match-40c161b2.png +0 -0
  105. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/genericNodeSettings-65587f20.js +0 -0
  106. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/genericNodeSettings-924759c7.css +0 -0
  107. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/graph_solver-8b7888b8.png +0 -0
  108. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/group_by-80561fc3.png +0 -0
  109. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/index-552863fd.js +0 -0
  110. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/index-681a3ed0.css +0 -0
  111. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/input_data-ab2eb678.png +0 -0
  112. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/join-349043ae.png +0 -0
  113. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/manual_input-ae98f31d.png +0 -0
  114. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/nodeTitle-cf9bae3c.js +0 -0
  115. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/nodeTitle-f4b12bcb.css +0 -0
  116. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/old_join-5d0eb604.png +0 -0
  117. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/output-06ec0371.png +0 -0
  118. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/pivot-9660df51.png +0 -0
  119. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/polars_code-05ce5dc6.png +0 -0
  120. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/record_count-dab44eb5.png +0 -0
  121. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/record_id-0b15856b.png +0 -0
  122. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/sample-693a88b5.png +0 -0
  123. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/secretApi-3ad510e1.js +0 -0
  124. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/select-b0d0437a.png +0 -0
  125. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/selectDynamic-b062bc9b.css +0 -0
  126. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/selectDynamic-bd644891.js +0 -0
  127. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/sort-2aa579f0.png +0 -0
  128. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/summarize-2a099231.png +0 -0
  129. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/text_to_rows-859b29ea.png +0 -0
  130. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/union-2d8609f4.png +0 -0
  131. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/unique-1958b98a.png +0 -0
  132. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/unpivot-d3cb4b5b.png +0 -0
  133. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/view-7a0f0be1.png +0 -0
  134. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/vue-codemirror.esm-dd17b478.js +0 -0
  135. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/assets/vue-content-loader.es-6b36f05e.js +0 -0
  136. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/flowfile.svg +0 -0
  137. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/icons/flowfile.png +0 -0
  138. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/images/airbyte.png +0 -0
  139. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/images/flowfile.svg +0 -0
  140. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/images/google.svg +0 -0
  141. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/images/sheets.png +0 -0
  142. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/index.html +0 -0
  143. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/vite.svg +0 -0
  144. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile/web/static/vue.svg +0 -0
  145. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/__init__.py +0 -0
  146. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/auth/__init__.py +0 -0
  147. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/auth/jwt.py +0 -0
  148. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/auth/models.py +0 -0
  149. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/auth/secrets.py +0 -0
  150. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/configs/__init__.py +0 -0
  151. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/configs/flow_logger.py +0 -0
  152. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/configs/node_store/__init__.py +0 -0
  153. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/configs/node_store/nodes.py +0 -0
  154. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/configs/settings.py +0 -0
  155. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/database/__init__.py +0 -0
  156. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/database/connection.py +0 -0
  157. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/database/init_db.py +0 -0
  158. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/database/models.py +0 -0
  159. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/fileExplorer/__init__.py +0 -0
  160. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/fileExplorer/funcs.py +0 -0
  161. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/fileExplorer/utils.py +0 -0
  162. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/FlowfileFlow.py +0 -0
  163. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/__init__.py +0 -0
  164. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/_extensions/__init__.py +0 -0
  165. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/_extensions/real_time_interface.py +0 -0
  166. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/analytics/__init__.py +0 -0
  167. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/analytics/analytics_processor.py +0 -0
  168. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/analytics/graphic_walker.py +0 -0
  169. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/analytics/schemas/__init__.py +0 -0
  170. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/analytics/utils.py +0 -0
  171. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/connection_manager/__init__.py +0 -0
  172. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/connection_manager/_connection_manager.py +0 -0
  173. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/connection_manager/models.py +0 -0
  174. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/database_connection_manager/__init__.py +0 -0
  175. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/database_connection_manager/db_connections.py +0 -0
  176. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/database_connection_manager/models.py +0 -0
  177. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/extensions.py +0 -0
  178. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/__init__.py +0 -0
  179. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/create/__init__.py +0 -0
  180. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/create/funcs.py +0 -0
  181. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +0 -0
  182. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/flow_file_column/__init__.py +0 -0
  183. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +0 -0
  184. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/flow_file_column/polars_type.py +0 -0
  185. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/flow_file_column/utils.py +0 -0
  186. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/fuzzy_matching/__init__.py +0 -0
  187. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/fuzzy_matching/prepare_for_fuzzy_match.py +0 -0
  188. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/fuzzy_matching/settings_validator.py +0 -0
  189. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/join/__init__.py +0 -0
  190. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/join/verify_integrity.py +0 -0
  191. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/pivot_table.py +0 -0
  192. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/polars_code_parser.py +0 -0
  193. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/read_excel_tables.py +0 -0
  194. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/sample_data.py +0 -0
  195. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/subprocess_operations/__init__.py +0 -0
  196. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/subprocess_operations/models.py +0 -0
  197. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +0 -0
  198. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/threaded_processes.py +0 -0
  199. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/types.py +0 -0
  200. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/utils.py +0 -0
  201. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_node/__init__.py +0 -0
  202. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_node/flow_node.py +0 -0
  203. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_node/models.py +0 -0
  204. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_node/schema_callback.py +0 -0
  205. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/handler.py +0 -0
  206. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/manage/__init__.py +0 -0
  207. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/manage/compatibility_enhancements.py +0 -0
  208. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/manage/manage_flowfile.py +0 -0
  209. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/manage/open_flowfile.py +0 -0
  210. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/setting_generator/__init__.py +0 -0
  211. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/setting_generator/setting_generator.py +0 -0
  212. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/setting_generator/settings.py +0 -0
  213. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/__init__.py +0 -0
  214. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/__init__.py +0 -0
  215. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/airbyte_sources/__init__.py +0 -0
  216. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/airbyte_sources/airbyte.py +0 -0
  217. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/airbyte_sources/models.py +0 -0
  218. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/airbyte_sources/settings.py +0 -0
  219. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/base_class.py +0 -0
  220. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/custom_external_sources/__init__.py +0 -0
  221. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/custom_external_sources/exchange_rate.py +0 -0
  222. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/custom_external_sources/external_source.py +0 -0
  223. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/custom_external_sources/google_sheet.py +0 -0
  224. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/custom_external_sources/sample_users.py +0 -0
  225. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/factory.py +0 -0
  226. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/sql_source/__init__.py +0 -0
  227. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/sql_source/models.py +0 -0
  228. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/sql_source/sql_source.py +0 -0
  229. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/sql_source/utils.py +0 -0
  230. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/util/__init__.py +0 -0
  231. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/util/calculate_layout.py +0 -0
  232. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/util/execution_orderer.py +0 -0
  233. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/utils.py +0 -0
  234. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/main.py +0 -0
  235. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/routes/__init__.py +0 -0
  236. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/routes/auth.py +0 -0
  237. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/routes/logs.py +0 -0
  238. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/routes/public.py +0 -0
  239. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/routes/routes.py +0 -0
  240. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/routes/secrets.py +0 -0
  241. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/run_lock.py +0 -0
  242. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/__init__.py +0 -0
  243. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/analysis_schemas/__init__.py +0 -0
  244. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/analysis_schemas/graphic_walker_schemas.py +0 -0
  245. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/defaults.py +0 -0
  246. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/external_sources/__init__.py +0 -0
  247. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/external_sources/airbyte_schemas.py +0 -0
  248. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/input_schema.py +0 -0
  249. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/models.py +0 -0
  250. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/output_model.py +0 -0
  251. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/schemas.py +0 -0
  252. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/transform_schema.py +0 -0
  253. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/secrets/__init__.py +0 -0
  254. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/secrets/secrets.py +0 -0
  255. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/utils/__init__.py +0 -0
  256. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/utils/arrow_reader.py +0 -0
  257. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/utils/excel_file_manager.py +0 -0
  258. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/utils/fileManager.py +0 -0
  259. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/utils/fl_executor.py +0 -0
  260. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/utils/utils.py +0 -0
  261. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_frame/flowfile_frame/__init__.py +0 -0
  262. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_frame/flowfile_frame/adapters.py +0 -0
  263. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_frame/flowfile_frame/expr.py +0 -0
  264. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_frame/flowfile_frame/flow_frame.py +0 -0
  265. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_frame/flowfile_frame/group_frame.py +0 -0
  266. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_frame/flowfile_frame/join.py +0 -0
  267. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_frame/flowfile_frame/selectors.py +0 -0
  268. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_frame/flowfile_frame/utils.py +0 -0
  269. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/__init__.py +0 -0
  270. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/configs.py +0 -0
  271. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/create/__init__.py +0 -0
  272. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/create/funcs.py +0 -0
  273. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/create/models.py +0 -0
  274. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/create/pl_types.py +0 -0
  275. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/create/read_excel_tables.py +0 -0
  276. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/create/utils.py +0 -0
  277. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/__init__.py +0 -0
  278. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/airbyte_sources/__init__.py +0 -0
  279. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/airbyte_sources/cache_manager.py +0 -0
  280. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/airbyte_sources/main.py +0 -0
  281. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/airbyte_sources/models.py +0 -0
  282. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/airbyte_sources/settings.py +0 -0
  283. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/sql_source/__init__.py +0 -0
  284. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/sql_source/main.py +0 -0
  285. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/sql_source/models.py +0 -0
  286. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/flow_logger.py +0 -0
  287. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/funcs.py +0 -0
  288. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/main.py +0 -0
  289. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/models.py +0 -0
  290. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/polars_fuzzy_match/__init__.py +0 -0
  291. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/polars_fuzzy_match/matcher.py +0 -0
  292. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/polars_fuzzy_match/models.py +0 -0
  293. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/polars_fuzzy_match/pre_process.py +0 -0
  294. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/polars_fuzzy_match/process.py +0 -0
  295. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/polars_fuzzy_match/utils.py +0 -0
  296. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/process_manager.py +0 -0
  297. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/routes.py +0 -0
  298. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/secrets.py +0 -0
  299. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/spawner.py +0 -0
  300. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/utils.py +0 -0
  301. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/test_utils/__init__.py +0 -0
  302. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/test_utils/postgres/__init__.py +0 -0
  303. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/test_utils/postgres/commands.py +0 -0
  304. {flowfile-0.3.0.1 → flowfile-0.3.0.2}/test_utils/postgres/fixtures.py +0 -0
@@ -0,0 +1,235 @@
1
+ Metadata-Version: 2.3
2
+ Name: Flowfile
3
+ Version: 0.3.0.2
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
+ # Flowfile
45
+
46
+ ![Flowfile Logo](https://raw.githubusercontent.com/Edwardvaneechoud/Flowfile/main/.github/images/logo.png)
47
+
48
+ 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.
49
+
50
+ ![Flowfile Interface](https://raw.githubusercontent.com/Edwardvaneechoud/Flowfile/main/.github/images/group_by_screenshot.png)
51
+
52
+ ## 🚀 Getting Started
53
+
54
+ ### Installation
55
+
56
+ Install Flowfile directly from PyPI:
57
+
58
+ ```bash
59
+ pip install Flowfile
60
+ ```
61
+
62
+ ### Quick Start: Web UI
63
+
64
+ The easiest way to get started is by launching the web-based UI:
65
+
66
+ ```bash
67
+ # Start the Flowfile web UI with integrated services
68
+ flowfile run ui
69
+ ```
70
+
71
+ This will:
72
+ - Start the combined core and worker services
73
+ - Launch a web interface in your browser
74
+ - Provide access to the full visual ETL capabilities
75
+
76
+ **Options:**
77
+ ```bash
78
+ # Customize host and port
79
+ flowfile run ui --host 0.0.0.0 --port 8080
80
+
81
+ # Start without opening a browser
82
+ flowfile run ui --no-browser
83
+ ```
84
+
85
+ You can also start the web UI programmatically:
86
+
87
+ ```python
88
+ import flowfile
89
+
90
+ # Start with default settings
91
+ flowfile.start_web_ui()
92
+
93
+ # Or customize
94
+ flowfile.start_web_ui(host="0.0.0.0", port=8080, open_browser=False)
95
+ ```
96
+
97
+ ### Using the FlowFrame API
98
+
99
+ Flowfile provides a Polars-like API for defining data pipelines programmatically:
100
+
101
+ ```python
102
+ import flowfile as ff
103
+ from flowfile import col, open_graph_in_editor
104
+
105
+ # Create a data pipeline
106
+ df = ff.from_dict({
107
+ "id": [1, 2, 3, 4, 5],
108
+ "category": ["A", "B", "A", "C", "B"],
109
+ "value": [100, 200, 150, 300, 250]
110
+ })
111
+
112
+ # Process the data
113
+ result = df.filter(col("value") > 150).with_columns([
114
+ (col("value") * 2).alias("double_value")
115
+ ])
116
+
117
+ # Open the graph in the web UI (starts the server if needed)
118
+ open_graph_in_editor(result.flow_graph)
119
+ ```
120
+
121
+ ## 📦 Package Components
122
+
123
+ The `Flowfile` PyPI package includes:
124
+
125
+ - **Core Service (`flowfile_core`)**: The main ETL engine using Polars
126
+ - **Worker Service (`flowfile_worker`)**: Handles computation-intensive tasks
127
+ - **Web UI**: Browser-based visual ETL interface
128
+ - **FlowFrame API (`flowfile_frame`)**: Polars-like API for Python coding
129
+
130
+ ## ✨ Key Features
131
+
132
+ ### Visual ETL with Web UI
133
+
134
+ - **No Installation Required**: Launch directly from the pip package
135
+ - **Drag-and-Drop Interface**: Build data pipelines visually
136
+ - **Integrated Services**: Combined core and worker services
137
+ - **Browser-Based**: Access from any device on your network
138
+
139
+ ### FlowFrame API
140
+
141
+ - **Familiar Syntax**: Polars-like API makes it easy to learn
142
+ - **ETL Graph Generation**: Automatically builds visual workflows
143
+ - **Lazy Evaluation**: Operations are not executed until needed
144
+ - **Interoperability**: Move between code and visual interfaces
145
+
146
+ ### Data Operations
147
+
148
+ - **Data Cleaning & Transformation**: Complex joins, filtering, etc.
149
+ - **High Performance**: Built on Polars for efficient processing
150
+ - **Data Integration**: Handle various file formats
151
+ - **ETL Pipeline Building**: Create reusable workflows
152
+
153
+ ## 🔄 Common FlowFrame Operations
154
+
155
+ ```python
156
+
157
+ import flowfile as ff
158
+ from flowfile import col, when, lit
159
+
160
+ # Read data
161
+ df = ff.from_dict({
162
+ "id": [1, 2, 3, 4, 5],
163
+ "category": ["A", "B", "A", "C", "B"],
164
+ "value": [100, 200, 150, 300, 250]
165
+ })
166
+ # df_parquet = ff.read_parquet("data.parquet")
167
+ # df_csv = ff.read_csv("data.csv")
168
+
169
+ other_df = ff.from_dict({
170
+ "product_id": [1, 2, 3, 4, 6],
171
+ "product_name": ["WidgetA", "WidgetB", "WidgetC", "WidgetD", "WidgetE"],
172
+ "supplier": ["SupplierX", "SupplierY", "SupplierX", "SupplierZ", "SupplierY"]
173
+ }, flow_graph=df.flow_graph # Assign the data to the same graph
174
+ )
175
+
176
+ # Filter
177
+ filtered = df.filter(col("value") > 150)
178
+
179
+ # Transform
180
+ result = df.select(
181
+ col("id"),
182
+ (col("value") * 2).alias("double_value")
183
+ )
184
+
185
+ # Conditional logic
186
+ with_status = df.with_columns([
187
+ when(col("value") > 200).then(lit("High")).otherwise(lit("Low")).alias("status")
188
+ ])
189
+
190
+ # Group and aggregate
191
+ by_category = df.group_by("category").agg([
192
+ col("value").sum().alias("total"),
193
+ col("value").mean().alias("average")
194
+ ])
195
+
196
+ # Join data
197
+ joined = df.join(other_df, left_on="id", right_on="product_id")
198
+
199
+ joined.flow_graph.flow_settings.execution_location = "auto"
200
+ joined.flow_graph.flow_settings.execution_mode = "Development"
201
+ ff.open_graph_in_editor(joined.flow_graph) # opens the graph in the UI!
202
+
203
+ ```
204
+
205
+ ## 🧰 Command-Line Interface
206
+
207
+ ```bash
208
+ # Show help and version info
209
+ flowfile
210
+
211
+ # Start the web UI
212
+ flowfile run ui [options]
213
+
214
+ # Run individual services
215
+ flowfile run core --host 0.0.0.0 --port 8080
216
+ flowfile run worker --host 0.0.0.0 --port 8079
217
+ ```
218
+
219
+ ## 📚 Resources
220
+
221
+ - **[Main Repository](https://github.com/Edwardvaneechoud/Flowfile)**: Latest code and examples
222
+ - **[Documentation](https://edwardvaneechoud.github.io/Flowfile/)**: Comprehensive guides
223
+ - **[Technical Architecture](https://dev.to/edwardvaneechoud/building-flowfile-architecting-a-visual-etl-tool-with-polars-576c)**: Design overview
224
+
225
+ ## 🖥️ Full Application Options
226
+
227
+ For the complete visual ETL experience, you have additional options:
228
+
229
+ - **Desktop Application**: Download from the [main repository](https://github.com/Edwardvaneechoud/Flowfile#-getting-started)
230
+ - **Docker Setup**: Run with Docker Compose
231
+ - **Manual Setup**: For development environments
232
+
233
+ ## 📋 Development Roadmap
234
+
235
+ See the [main repository](https://github.com/Edwardvaneechoud/Flowfile#-todo) for the latest development roadmap and TODO list.
@@ -19,7 +19,7 @@ def main():
19
19
  args = parser.parse_args()
20
20
 
21
21
  if args.command == "run" and args.component:
22
- if args.component == "web":
22
+ if args.component == "ui":
23
23
  try:
24
24
  flowfile.start_web_ui(
25
25
  host=args.host,
@@ -42,19 +42,18 @@ def main():
42
42
  print("A framework combining visual ETL with a Polars-like API")
43
43
  print("\nUsage:")
44
44
  print(" # Start the FlowFile web UI with integrated services")
45
- print(" flowfile run web")
45
+ print(" flowfile run ui")
46
46
  print("")
47
47
  print(" # Advanced: Run individual components")
48
48
  print(" flowfile run core # Start only the core service")
49
49
  print(" flowfile run worker # Start only the worker service")
50
50
  print("")
51
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")
52
+ print(" flowfile run ui --host 0.0.0.0 --port 8080 # Custom host/port")
53
+ print(" flowfile run ui --no-browser # Don't open browser")
54
54
  print("")
55
55
  print(" # Python API usage examples")
56
56
  print(" import flowfile as ff")
57
57
  print(" df = ff.read_csv('data.csv')")
58
58
  print(" result = df.filter(ff.col('value') > 10)")
59
- print(" ff.open_graph_in_editor(result)")
60
- print(" ff.start_web_ui()")
59
+ print(" ff.open_graph_in_editor(result)")
@@ -119,7 +119,7 @@ def build_server_command(module_name: str) -> List[str]:
119
119
  "run",
120
120
  module_name,
121
121
  "run",
122
- "web",
122
+ "ui",
123
123
  "--no-browser",
124
124
  f"--port={FLOWFILE_PORT}",
125
125
  ]
@@ -134,7 +134,7 @@ def build_server_command(module_name: str) -> List[str]:
134
134
  "-m",
135
135
  module_name,
136
136
  "run",
137
- "web",
137
+ "ui",
138
138
  "--no-browser",
139
139
  f"--port={FLOWFILE_PORT}",
140
140
  ]
@@ -314,7 +314,7 @@ def _save_flow_to_location(
314
314
  def _open_flow_in_browser(flow_id: int) -> None:
315
315
  """Opens the specified flow ID in a browser tab if in unified mode."""
316
316
  if os.environ.get("FLOWFILE_MODE") == "electron":
317
- flow_url = f"http://{FLOWFILE_HOST}:{FLOWFILE_PORT}/web/flow/{flow_id}"
317
+ flow_url = f"http://{FLOWFILE_HOST}:{FLOWFILE_PORT}/ui/flow/{flow_id}"
318
318
  logger.info(f"Unified mode detected. Opening imported flow in browser: {flow_url}")
319
319
  try:
320
320
  time.sleep(0.5)
@@ -335,7 +335,8 @@ def _cleanup_temporary_storage(temp_dir_obj: Optional[TemporaryDirectory]) -> No
335
335
  logger.error(f"Error cleaning up temporary directory {temp_dir_obj.name}: {e}")
336
336
 
337
337
 
338
- def open_graph_in_editor(flow_graph: FlowGraph, storage_location: Optional[str] = None, module_name: str = DEFAULT_MODULE_NAME) -> bool:
338
+ def open_graph_in_editor(flow_graph: FlowGraph, storage_location: Optional[str] = None,
339
+ module_name: str = DEFAULT_MODULE_NAME) -> bool:
339
340
  """
340
341
  Save the ETL graph, ensure the Flowfile server is running (starting it
341
342
  if necessary), import the graph via API, and open it in a new browser
@@ -353,10 +354,13 @@ def open_graph_in_editor(flow_graph: FlowGraph, storage_location: Optional[str]
353
354
  """
354
355
  temp_dir_obj: Optional[TemporaryDirectory] = None
355
356
  try:
357
+ original_execution_settings = flow_graph.flow_settings.model_copy()
358
+ flow_graph.flow_settings.execution_location = "auto"
359
+ flow_graph.flow_settings.execution_mode = "Development"
356
360
  flow_file_path, temp_dir_obj = _save_flow_to_location(flow_graph, storage_location)
357
361
  if not flow_file_path:
358
362
  return False
359
-
363
+ flow_graph.flow_settings = original_execution_settings
360
364
  if not start_flowfile_server_process(module_name):
361
365
  return False
362
366
 
@@ -0,0 +1,130 @@
1
+ # Flowfile Web UI Documentation
2
+
3
+ ## Overview
4
+
5
+ Flowfile now supports a web-based user interface that can be launched directly from the pip-installed package. This enhancement allows users to quickly get started with the visual ETL tool without needing to install the desktop application, set up Docker, or manually configure the services.
6
+
7
+ ## Key Features
8
+
9
+ - **Integrated Web UI**: Launch the Flowfile interface directly in your browser
10
+ - **Unified Service**: Combined API that serves both the web UI and processes worker operations
11
+ - **Easy Installation**: Simple pip installation and startup process
12
+ - **Visual ETL**: Access to all the visual ETL capabilities through a web interface
13
+
14
+ ## Installation
15
+
16
+ Install Flowfile from PyPI using pip:
17
+
18
+ ```bash
19
+ pip install Flowfile
20
+ ```
21
+
22
+ ## Starting the Web UI
23
+
24
+ You can start the Flowfile web UI using either the Python module or the command-line interface:
25
+
26
+ ### Using the Command-Line Interface
27
+
28
+ ```bash
29
+ # Start the web UI with default settings
30
+ flowfile run ui
31
+
32
+ # Customize host and port
33
+ flowfile run ui --host 0.0.0.0 --port 8080
34
+
35
+ # Start without automatically opening a browser window
36
+ flowfile run ui --no-browser
37
+ ```
38
+
39
+ ### Using Python
40
+
41
+ ```python
42
+ import flowfile
43
+
44
+ # Start the web UI with default settings
45
+ flowfile.start_web_ui()
46
+
47
+ # Customize host, port, and browser launch
48
+ flowfile.start_web_ui(host="0.0.0.0", port=8080, open_browser=False)
49
+ ```
50
+
51
+ ## Architecture Overview
52
+
53
+ The web UI functionality combines multiple components:
54
+
55
+ 1. **Core Service**: The main ETL engine (flowfile_core) that processes data transformations
56
+ 2. **Worker Service**: Handles computation and caching of data operations (flowfile_worker)
57
+ 3. **Web UI**: A Vue.js frontend that provides the visual interface
58
+
59
+ When you start the web UI, all these services are launched together in a unified mode, making it simple to get started without configuration.
60
+
61
+ ## Using the Web UI with FlowFrame API
62
+
63
+ You can create data pipelines programmatically with the FlowFrame API and then visualize them in the web UI:
64
+
65
+ ```python
66
+ import flowfile as ff
67
+ from flowfile import open_graph_in_editor
68
+
69
+ # Create a data pipeline
70
+ df = ff.from_dict({
71
+ "id": [1, 2, 3, 4, 5],
72
+ "category": ["A", "B", "A", "C", "B"],
73
+ "value": [100, 200, 150, 300, 250]
74
+ })
75
+
76
+ # Process the data
77
+ result = df.filter(ff.col("value") > 150).with_columns([
78
+ (ff.col("value") * 2).alias("double_value")
79
+ ])
80
+
81
+ # Open the graph in the web UI (starts the server if it's not running)
82
+ open_graph_in_editor(result.flow_graph)
83
+ ```
84
+
85
+ The `open_graph_in_editor` function automatically:
86
+ 1. Saves the flow graph to a temporary file
87
+ 2. Starts the Flowfile server if it's not already running
88
+ 3. Imports the flow into the editor
89
+ 4. Opens a browser tab with the imported flow
90
+
91
+ ## Advanced Server Configuration
92
+
93
+ For advanced users who need to customize the server behavior:
94
+
95
+ ### Environment Variables
96
+
97
+ - `FLOWFILE_HOST`: Host to bind the server to (default: "127.0.0.1")
98
+ - `FLOWFILE_PORT`: Port to bind the server to (default: 63578)
99
+ - `FLOWFILE_MODE`: Set to "electron" to enable browser auto-opening behavior
100
+ - `WORKER_URL`: URL for the worker service
101
+ - `SINGLE_FILE_MODE`: Set to "1" to run in unified mode with worker functionality
102
+ - `FLOWFILE_MODULE_NAME`: Module name to run (default: "flowfile")
103
+
104
+ ### Running Individual Components
105
+
106
+ For development or specialized deployments, you can run the components separately:
107
+
108
+ ```bash
109
+ # Run only the core service
110
+ flowfile run core --host 0.0.0.0 --port 8080
111
+
112
+ # Run only the worker service
113
+ flowfile run worker --host 0.0.0.0 --port 8081
114
+ ```
115
+
116
+ ## Troubleshooting
117
+
118
+ - If the web UI doesn't open automatically, manually navigate to http://localhost:63578/ui
119
+ - If you encounter connection issues, check if the port is already in use
120
+ - Look for server logs in the terminal where you started the service for error messages
121
+ - For issues with the API, navigate to http://localhost:63578/docs to verify the API is running
122
+
123
+ ## Next Steps
124
+
125
+ Once you're familiar with the web UI, you might want to explore:
126
+
127
+ 1. The desktop application for a more native experience
128
+ 2. Docker deployment for production environments
129
+ 3. Advanced ETL operations using the FlowFrame API
130
+ 4. Custom node development for specialized transformations
@@ -54,7 +54,7 @@ def extend_app(app: FastAPI):
54
54
  from flowfile_core.configs.settings import WORKER_URL
55
55
  return WORKER_URL
56
56
 
57
- @app.get("/web", include_in_schema=False)
57
+ @app.get("/ui", include_in_schema=False)
58
58
  async def web_ui_root():
59
59
  """Serve the main index.html file for the web UI"""
60
60
  index_path = static_dir / "index.html"
@@ -62,7 +62,7 @@ def extend_app(app: FastAPI):
62
62
  return FileResponse(index_path)
63
63
  return {"error": "Web UI not installed. Build the frontend and install it in the package."}
64
64
 
65
- @app.get("/web/{path:path}", include_in_schema=False)
65
+ @app.get("/ui/{path:path}", include_in_schema=False)
66
66
  async def serve_vue_app(path: str):
67
67
  """Serve static files or the index.html for client-side routing"""
68
68
  # Try to serve the requested file
@@ -72,7 +72,7 @@ def extend_app(app: FastAPI):
72
72
 
73
73
  # If it's a directory, redirect to add trailing slash
74
74
  if (static_dir / path).exists() and (static_dir / path).is_dir():
75
- return RedirectResponse(f"/web/{path}/")
75
+ return RedirectResponse(f"/ui/{path}/")
76
76
 
77
77
  # For client-side routing, serve the index.html
78
78
  index_path = static_dir / "index.html"
@@ -143,11 +143,11 @@ def start_server(host="127.0.0.1", port=63578, open_browser=True):
143
143
  # Open browser if requested
144
144
  if open_browser:
145
145
  time.sleep(2)
146
- webbrowser.open_new_tab(f"http://{host}:{port}/web")
146
+ webbrowser.open_new_tab(f"http://{host}:{port}/ui")
147
147
 
148
148
  print("\n" + "=" * 60)
149
149
  print(" FlowFile - Visual ETL Tool (Unified Mode)")
150
- print(f" Web UI: http://{host}:{port}/web")
150
+ print(f" Web UI: http://{host}:{port}/ui")
151
151
  print(f" API Docs: http://{host}:{port}/docs")
152
152
  print("=" * 60 + "\n")
153
153
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "Flowfile"
3
- version = "0.3.0.1"
3
+ version = "0.3.0.2"
4
4
  description = "Project combining flowfile core (backend) and flowfile_worker (compute offloader) and flowfile_frame (api)"
5
5
  readme = "readme-pypi.md"
6
6
  authors = ["Edward van Eechoud <evaneechoud@gmail.com>"]
@@ -0,0 +1,192 @@
1
+ # Flowfile
2
+
3
+ ![Flowfile Logo](https://raw.githubusercontent.com/Edwardvaneechoud/Flowfile/main/.github/images/logo.png)
4
+
5
+ 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.
6
+
7
+ ![Flowfile Interface](https://raw.githubusercontent.com/Edwardvaneechoud/Flowfile/main/.github/images/group_by_screenshot.png)
8
+
9
+ ## 🚀 Getting Started
10
+
11
+ ### Installation
12
+
13
+ Install Flowfile directly from PyPI:
14
+
15
+ ```bash
16
+ pip install Flowfile
17
+ ```
18
+
19
+ ### Quick Start: Web UI
20
+
21
+ The easiest way to get started is by launching the web-based UI:
22
+
23
+ ```bash
24
+ # Start the Flowfile web UI with integrated services
25
+ flowfile run ui
26
+ ```
27
+
28
+ This will:
29
+ - Start the combined core and worker services
30
+ - Launch a web interface in your browser
31
+ - Provide access to the full visual ETL capabilities
32
+
33
+ **Options:**
34
+ ```bash
35
+ # Customize host and port
36
+ flowfile run ui --host 0.0.0.0 --port 8080
37
+
38
+ # Start without opening a browser
39
+ flowfile run ui --no-browser
40
+ ```
41
+
42
+ You can also start the web UI programmatically:
43
+
44
+ ```python
45
+ import flowfile
46
+
47
+ # Start with default settings
48
+ flowfile.start_web_ui()
49
+
50
+ # Or customize
51
+ flowfile.start_web_ui(host="0.0.0.0", port=8080, open_browser=False)
52
+ ```
53
+
54
+ ### Using the FlowFrame API
55
+
56
+ Flowfile provides a Polars-like API for defining data pipelines programmatically:
57
+
58
+ ```python
59
+ import flowfile as ff
60
+ from flowfile import col, open_graph_in_editor
61
+
62
+ # Create a data pipeline
63
+ df = ff.from_dict({
64
+ "id": [1, 2, 3, 4, 5],
65
+ "category": ["A", "B", "A", "C", "B"],
66
+ "value": [100, 200, 150, 300, 250]
67
+ })
68
+
69
+ # Process the data
70
+ result = df.filter(col("value") > 150).with_columns([
71
+ (col("value") * 2).alias("double_value")
72
+ ])
73
+
74
+ # Open the graph in the web UI (starts the server if needed)
75
+ open_graph_in_editor(result.flow_graph)
76
+ ```
77
+
78
+ ## 📦 Package Components
79
+
80
+ The `Flowfile` PyPI package includes:
81
+
82
+ - **Core Service (`flowfile_core`)**: The main ETL engine using Polars
83
+ - **Worker Service (`flowfile_worker`)**: Handles computation-intensive tasks
84
+ - **Web UI**: Browser-based visual ETL interface
85
+ - **FlowFrame API (`flowfile_frame`)**: Polars-like API for Python coding
86
+
87
+ ## ✨ Key Features
88
+
89
+ ### Visual ETL with Web UI
90
+
91
+ - **No Installation Required**: Launch directly from the pip package
92
+ - **Drag-and-Drop Interface**: Build data pipelines visually
93
+ - **Integrated Services**: Combined core and worker services
94
+ - **Browser-Based**: Access from any device on your network
95
+
96
+ ### FlowFrame API
97
+
98
+ - **Familiar Syntax**: Polars-like API makes it easy to learn
99
+ - **ETL Graph Generation**: Automatically builds visual workflows
100
+ - **Lazy Evaluation**: Operations are not executed until needed
101
+ - **Interoperability**: Move between code and visual interfaces
102
+
103
+ ### Data Operations
104
+
105
+ - **Data Cleaning & Transformation**: Complex joins, filtering, etc.
106
+ - **High Performance**: Built on Polars for efficient processing
107
+ - **Data Integration**: Handle various file formats
108
+ - **ETL Pipeline Building**: Create reusable workflows
109
+
110
+ ## 🔄 Common FlowFrame Operations
111
+
112
+ ```python
113
+
114
+ import flowfile as ff
115
+ from flowfile import col, when, lit
116
+
117
+ # Read data
118
+ df = ff.from_dict({
119
+ "id": [1, 2, 3, 4, 5],
120
+ "category": ["A", "B", "A", "C", "B"],
121
+ "value": [100, 200, 150, 300, 250]
122
+ })
123
+ # df_parquet = ff.read_parquet("data.parquet")
124
+ # df_csv = ff.read_csv("data.csv")
125
+
126
+ other_df = ff.from_dict({
127
+ "product_id": [1, 2, 3, 4, 6],
128
+ "product_name": ["WidgetA", "WidgetB", "WidgetC", "WidgetD", "WidgetE"],
129
+ "supplier": ["SupplierX", "SupplierY", "SupplierX", "SupplierZ", "SupplierY"]
130
+ }, flow_graph=df.flow_graph # Assign the data to the same graph
131
+ )
132
+
133
+ # Filter
134
+ filtered = df.filter(col("value") > 150)
135
+
136
+ # Transform
137
+ result = df.select(
138
+ col("id"),
139
+ (col("value") * 2).alias("double_value")
140
+ )
141
+
142
+ # Conditional logic
143
+ with_status = df.with_columns([
144
+ when(col("value") > 200).then(lit("High")).otherwise(lit("Low")).alias("status")
145
+ ])
146
+
147
+ # Group and aggregate
148
+ by_category = df.group_by("category").agg([
149
+ col("value").sum().alias("total"),
150
+ col("value").mean().alias("average")
151
+ ])
152
+
153
+ # Join data
154
+ joined = df.join(other_df, left_on="id", right_on="product_id")
155
+
156
+ joined.flow_graph.flow_settings.execution_location = "auto"
157
+ joined.flow_graph.flow_settings.execution_mode = "Development"
158
+ ff.open_graph_in_editor(joined.flow_graph) # opens the graph in the UI!
159
+
160
+ ```
161
+
162
+ ## 🧰 Command-Line Interface
163
+
164
+ ```bash
165
+ # Show help and version info
166
+ flowfile
167
+
168
+ # Start the web UI
169
+ flowfile run ui [options]
170
+
171
+ # Run individual services
172
+ flowfile run core --host 0.0.0.0 --port 8080
173
+ flowfile run worker --host 0.0.0.0 --port 8079
174
+ ```
175
+
176
+ ## 📚 Resources
177
+
178
+ - **[Main Repository](https://github.com/Edwardvaneechoud/Flowfile)**: Latest code and examples
179
+ - **[Documentation](https://edwardvaneechoud.github.io/Flowfile/)**: Comprehensive guides
180
+ - **[Technical Architecture](https://dev.to/edwardvaneechoud/building-flowfile-architecting-a-visual-etl-tool-with-polars-576c)**: Design overview
181
+
182
+ ## 🖥️ Full Application Options
183
+
184
+ For the complete visual ETL experience, you have additional options:
185
+
186
+ - **Desktop Application**: Download from the [main repository](https://github.com/Edwardvaneechoud/Flowfile#-getting-started)
187
+ - **Docker Setup**: Run with Docker Compose
188
+ - **Manual Setup**: For development environments
189
+
190
+ ## 📋 Development Roadmap
191
+
192
+ See the [main repository](https://github.com/Edwardvaneechoud/Flowfile#-todo) for the latest development roadmap and TODO list.