Flowfile 0.3.0__py3-none-any.whl → 0.3.0.2__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (149) hide show
  1. flowfile/__init__.py +13 -6
  2. flowfile/__main__.py +50 -15
  3. flowfile/api.py +383 -0
  4. flowfile/readme.md +130 -0
  5. flowfile/web/__init__.py +155 -0
  6. flowfile/web/static/assets/AirbyteReader-1ac35765.css +314 -0
  7. flowfile/web/static/assets/AirbyteReader-cb0c1d4a.js +921 -0
  8. flowfile/web/static/assets/CrossJoin-41efa4cb.css +100 -0
  9. flowfile/web/static/assets/CrossJoin-a514fa59.js +153 -0
  10. flowfile/web/static/assets/DatabaseConnectionSettings-0c04b2e5.css +77 -0
  11. flowfile/web/static/assets/DatabaseConnectionSettings-f2cecf33.js +151 -0
  12. flowfile/web/static/assets/DatabaseManager-30fa27e5.css +64 -0
  13. flowfile/web/static/assets/DatabaseManager-83ee3c98.js +484 -0
  14. flowfile/web/static/assets/DatabaseReader-dc0c6881.js +426 -0
  15. flowfile/web/static/assets/DatabaseReader-f50c6558.css +158 -0
  16. flowfile/web/static/assets/DatabaseWriter-2f570e53.css +96 -0
  17. flowfile/web/static/assets/DatabaseWriter-5afe9f8d.js +312 -0
  18. flowfile/web/static/assets/ExploreData-5bdae813.css +45 -0
  19. flowfile/web/static/assets/ExploreData-c7ee19cf.js +118306 -0
  20. flowfile/web/static/assets/ExternalSource-17b23a01.js +225 -0
  21. flowfile/web/static/assets/ExternalSource-e37b6275.css +94 -0
  22. flowfile/web/static/assets/Filter-90856b4f.js +238 -0
  23. flowfile/web/static/assets/Filter-a9d08ba1.css +20 -0
  24. flowfile/web/static/assets/Formula-38b71e9e.js +197 -0
  25. flowfile/web/static/assets/Formula-d60a74f4.css +17 -0
  26. flowfile/web/static/assets/FuzzyMatch-6857de82.css +254 -0
  27. flowfile/web/static/assets/FuzzyMatch-d0f1fe81.js +422 -0
  28. flowfile/web/static/assets/GoogleSheet-854294a4.js +2616 -0
  29. flowfile/web/static/assets/GoogleSheet-92084da7.css +233 -0
  30. flowfile/web/static/assets/GraphSolver-0c86bbc6.js +382 -0
  31. flowfile/web/static/assets/GraphSolver-17fd26db.css +68 -0
  32. flowfile/web/static/assets/GroupBy-ab1ea74b.css +51 -0
  33. flowfile/web/static/assets/GroupBy-f2772e9f.js +413 -0
  34. flowfile/web/static/assets/Join-41c0f331.css +109 -0
  35. flowfile/web/static/assets/Join-bc3e1cf7.js +247 -0
  36. flowfile/web/static/assets/ManualInput-03aa0245.js +391 -0
  37. flowfile/web/static/assets/ManualInput-ac7b9972.css +84 -0
  38. flowfile/web/static/assets/Output-48f81019.css +2642 -0
  39. flowfile/web/static/assets/Output-5b35eee8.js +536 -0
  40. flowfile/web/static/assets/Pivot-7164087c.js +408 -0
  41. flowfile/web/static/assets/Pivot-f415e85f.css +35 -0
  42. flowfile/web/static/assets/PolarsCode-3abf6507.js +2863 -0
  43. flowfile/web/static/assets/PolarsCode-650322d1.css +35 -0
  44. flowfile/web/static/assets/PopOver-b37ff9be.js +577 -0
  45. flowfile/web/static/assets/PopOver-bccfde04.css +32 -0
  46. flowfile/web/static/assets/Read-65966a3e.js +701 -0
  47. flowfile/web/static/assets/Read-80dc1675.css +197 -0
  48. flowfile/web/static/assets/RecordCount-c66c6d6d.js +121 -0
  49. flowfile/web/static/assets/RecordId-826dc095.js +339 -0
  50. flowfile/web/static/assets/Sample-4ed555c8.js +184 -0
  51. flowfile/web/static/assets/SecretManager-eac1e97d.js +382 -0
  52. flowfile/web/static/assets/Select-085f05cc.js +231 -0
  53. flowfile/web/static/assets/SettingsSection-1f5e79c1.js +87 -0
  54. flowfile/web/static/assets/SettingsSection-9c836ecc.css +47 -0
  55. flowfile/web/static/assets/Sort-3e6cb414.js +309 -0
  56. flowfile/web/static/assets/Sort-7ccfa0fe.css +51 -0
  57. flowfile/web/static/assets/TextToRows-606349bc.js +307 -0
  58. flowfile/web/static/assets/TextToRows-c92d1ec2.css +48 -0
  59. flowfile/web/static/assets/UnavailableFields-5edd5322.css +49 -0
  60. flowfile/web/static/assets/UnavailableFields-b41976ed.js +36 -0
  61. flowfile/web/static/assets/Union-8d9ac7f9.css +30 -0
  62. flowfile/web/static/assets/Union-fca91665.js +145 -0
  63. flowfile/web/static/assets/Unique-a59f830e.js +273 -0
  64. flowfile/web/static/assets/Unique-b5615727.css +51 -0
  65. flowfile/web/static/assets/Unpivot-246e9bbd.css +77 -0
  66. flowfile/web/static/assets/Unpivot-c3815565.js +441 -0
  67. flowfile/web/static/assets/airbyte-292aa232.png +0 -0
  68. flowfile/web/static/assets/api-22b338bd.js +60 -0
  69. flowfile/web/static/assets/cross_join-d30c0290.png +0 -0
  70. flowfile/web/static/assets/database_reader-ce1e55f3.svg +24 -0
  71. flowfile/web/static/assets/database_writer-b4ad0753.svg +23 -0
  72. flowfile/web/static/assets/designer-2394122a.css +10697 -0
  73. flowfile/web/static/assets/designer-e5bbe26f.js +69712 -0
  74. flowfile/web/static/assets/documentation-08045cf2.js +33 -0
  75. flowfile/web/static/assets/documentation-12216a74.css +50 -0
  76. flowfile/web/static/assets/dropDown-35135ba8.css +143 -0
  77. flowfile/web/static/assets/dropDown-5e7e9a5a.js +319 -0
  78. flowfile/web/static/assets/dropDownGeneric-50a91b99.js +72 -0
  79. flowfile/web/static/assets/dropDownGeneric-895680d6.css +10 -0
  80. flowfile/web/static/assets/element-icons-9c88a535.woff +0 -0
  81. flowfile/web/static/assets/element-icons-de5eb258.ttf +0 -0
  82. flowfile/web/static/assets/explore_data-8a0a2861.png +0 -0
  83. flowfile/web/static/assets/fa-brands-400-808443ae.ttf +0 -0
  84. flowfile/web/static/assets/fa-brands-400-d7236a19.woff2 +0 -0
  85. flowfile/web/static/assets/fa-regular-400-54cf6086.ttf +0 -0
  86. flowfile/web/static/assets/fa-regular-400-e3456d12.woff2 +0 -0
  87. flowfile/web/static/assets/fa-solid-900-aa759986.woff2 +0 -0
  88. flowfile/web/static/assets/fa-solid-900-d2f05935.ttf +0 -0
  89. flowfile/web/static/assets/fa-v4compatibility-0ce9033c.woff2 +0 -0
  90. flowfile/web/static/assets/fa-v4compatibility-30f6abf6.ttf +0 -0
  91. flowfile/web/static/assets/filter-d7708bda.png +0 -0
  92. flowfile/web/static/assets/formula-eeeb1611.png +0 -0
  93. flowfile/web/static/assets/fullEditor-178376bb.css +256 -0
  94. flowfile/web/static/assets/fullEditor-705c6ccb.js +630 -0
  95. flowfile/web/static/assets/fuzzy_match-40c161b2.png +0 -0
  96. flowfile/web/static/assets/genericNodeSettings-65587f20.js +137 -0
  97. flowfile/web/static/assets/genericNodeSettings-924759c7.css +46 -0
  98. flowfile/web/static/assets/graph_solver-8b7888b8.png +0 -0
  99. flowfile/web/static/assets/group_by-80561fc3.png +0 -0
  100. flowfile/web/static/assets/index-552863fd.js +58652 -0
  101. flowfile/web/static/assets/index-681a3ed0.css +8843 -0
  102. flowfile/web/static/assets/input_data-ab2eb678.png +0 -0
  103. flowfile/web/static/assets/join-349043ae.png +0 -0
  104. flowfile/web/static/assets/manual_input-ae98f31d.png +0 -0
  105. flowfile/web/static/assets/nodeTitle-cf9bae3c.js +227 -0
  106. flowfile/web/static/assets/nodeTitle-f4b12bcb.css +134 -0
  107. flowfile/web/static/assets/old_join-5d0eb604.png +0 -0
  108. flowfile/web/static/assets/output-06ec0371.png +0 -0
  109. flowfile/web/static/assets/pivot-9660df51.png +0 -0
  110. flowfile/web/static/assets/polars_code-05ce5dc6.png +0 -0
  111. flowfile/web/static/assets/record_count-dab44eb5.png +0 -0
  112. flowfile/web/static/assets/record_id-0b15856b.png +0 -0
  113. flowfile/web/static/assets/sample-693a88b5.png +0 -0
  114. flowfile/web/static/assets/secretApi-3ad510e1.js +46 -0
  115. flowfile/web/static/assets/select-b0d0437a.png +0 -0
  116. flowfile/web/static/assets/selectDynamic-b062bc9b.css +107 -0
  117. flowfile/web/static/assets/selectDynamic-bd644891.js +302 -0
  118. flowfile/web/static/assets/sort-2aa579f0.png +0 -0
  119. flowfile/web/static/assets/summarize-2a099231.png +0 -0
  120. flowfile/web/static/assets/text_to_rows-859b29ea.png +0 -0
  121. flowfile/web/static/assets/union-2d8609f4.png +0 -0
  122. flowfile/web/static/assets/unique-1958b98a.png +0 -0
  123. flowfile/web/static/assets/unpivot-d3cb4b5b.png +0 -0
  124. flowfile/web/static/assets/view-7a0f0be1.png +0 -0
  125. flowfile/web/static/assets/vue-codemirror.esm-dd17b478.js +22281 -0
  126. flowfile/web/static/assets/vue-content-loader.es-6b36f05e.js +210 -0
  127. flowfile/web/static/flowfile.svg +47 -0
  128. flowfile/web/static/icons/flowfile.png +0 -0
  129. flowfile/web/static/images/airbyte.png +0 -0
  130. flowfile/web/static/images/flowfile.svg +47 -0
  131. flowfile/web/static/images/google.svg +1 -0
  132. flowfile/web/static/images/sheets.png +0 -0
  133. flowfile/web/static/index.html +22 -0
  134. flowfile/web/static/vite.svg +1 -0
  135. flowfile/web/static/vue.svg +1 -0
  136. flowfile-0.3.0.2.dist-info/METADATA +235 -0
  137. {flowfile-0.3.0.dist-info → flowfile-0.3.0.2.dist-info}/RECORD +147 -15
  138. {flowfile-0.3.0.dist-info → flowfile-0.3.0.2.dist-info}/entry_points.txt +1 -1
  139. flowfile_core/configs/settings.py +7 -32
  140. flowfile_core/flowfile/FlowfileFlow.py +4 -2
  141. flowfile_core/flowfile/analytics/analytics_processor.py +1 -1
  142. flowfile_core/main.py +4 -1
  143. flowfile_core/schemas/input_schema.py +1 -8
  144. flowfile_frame/__init__.py +0 -1
  145. flowfile_frame/utils.py +0 -139
  146. flowfile-0.3.0.dist-info/METADATA +0 -219
  147. flowfile_frame/__main__.py +0 -12
  148. {flowfile-0.3.0.dist-info → flowfile-0.3.0.2.dist-info}/LICENSE +0 -0
  149. {flowfile-0.3.0.dist-info → flowfile-0.3.0.2.dist-info}/WHEEL +0 -0
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="2443" height="2500" preserveAspectRatio="xMidYMid" viewBox="0 0 256 262" id="google"><path fill="#4285F4" d="M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622 38.755 30.023 2.685.268c24.659-22.774 38.875-56.282 38.875-96.027"></path><path fill="#34A853" d="M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055-34.523 0-63.824-22.773-74.269-54.25l-1.531.13-40.298 31.187-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1"></path><path fill="#FBBC05" d="M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82 0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602l42.356-32.782"></path><path fill="#EB4335" d="M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0 79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251"></path></svg>
Binary file
@@ -0,0 +1,22 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Flowfile</title>
6
+ <!-- Cross-Origin Policies -->
7
+ <meta http-equiv="Cross-Origin-Opener-Policy" content="same-origin">
8
+ <meta http-equiv="Cross-Origin-Embedder-Policy" content="require-corp">
9
+ <!-- Favicon -->
10
+ <link rel="icon" href="./favicon.ico">
11
+ <link rel="icon" type="image/svg+xml" href="./flowfile.svg">
12
+
13
+ <!-- Material Icons -->
14
+ <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
15
+ <script type="module" crossorigin src="/assets/index-552863fd.js"></script>
16
+ <link rel="stylesheet" href="/assets/index-681a3ed0.css">
17
+ </head>
18
+ <body>
19
+ <div id="app"></div>
20
+
21
+ </body>
22
+ </html>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>
@@ -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.
@@ -1,8 +1,141 @@
1
1
  build_backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  build_backends/main.py,sha256=hLmfqTeHLSTiwwZ5mUuoLQgtO40Igvl1_4NbnvzWSgI,9912
3
3
  build_backends/main_prd.py,sha256=JR2tYCMWM5ThooQjv5pw6nwVKMQjgsiHgKMhYn9NXWI,6927
4
- flowfile/__init__.py,sha256=ci66Dom0DjMuu_S1wsyy9StLkp95wp6KCqGhj7YVQ0E,2301
5
- flowfile/__main__.py,sha256=X8ItB1LEC1ZXw_tvegu7sagb2CwqUeWSwWybbO1HtUs,630
4
+ flowfile/__init__.py,sha256=B1vnUboOki3pP3BAmoQ0j62nEiB51X9kc9N8Qu7bgcg,2419
5
+ flowfile/__main__.py,sha256=Pu_LFcXQBtOi1QBtkrQqufLhhOJAcZjDdDx3u5ifUJQ,2614
6
+ flowfile/api.py,sha256=uMfTHtTfSaXZM9eCT9rXajNCXwo6Jb8oEOmSB24o4xk,14537
7
+ flowfile/readme.md,sha256=Y8jlzBnCpk9bSt6PqMbXebOC5y1HdTUrFA7hhPCNiwQ,4204
8
+ flowfile/web/__init__.py,sha256=6pVoCRGatkebWdpA2HAO2ZyXk0268H8LmttayDv8gTU,5489
9
+ flowfile/web/static/assets/AirbyteReader-1ac35765.css,sha256=GsNXZRBzBqcgSHWYHFfpQjYnQ1G90hCaWgThLCG80jI,6260
10
+ flowfile/web/static/assets/AirbyteReader-cb0c1d4a.js,sha256=PtikU6aU5vN4K9VlsLZb15GWnxM-t7fd45DqqOlDeRg,38759
11
+ flowfile/web/static/assets/CrossJoin-41efa4cb.css,sha256=Qe-ky2QI7rYfXMKV-bCB5HP0OJ6uBU74g9EEmcpXTlc,2838
12
+ flowfile/web/static/assets/CrossJoin-a514fa59.js,sha256=Su9IvHLkULPVmaiXiBgb6Sb0jJJPqy02lPVWN1AzK5I,5893
13
+ flowfile/web/static/assets/DatabaseConnectionSettings-0c04b2e5.css,sha256=DASy5awRYSMypTwMX6ksZtrVQhtp1ViT0Jowclr_uLA,1975
14
+ flowfile/web/static/assets/DatabaseConnectionSettings-f2cecf33.js,sha256=1E2HIDzEhtx4CokjnZPTNDQqB2GTSvgSX2m0yoxwjXU,6563
15
+ flowfile/web/static/assets/DatabaseManager-30fa27e5.css,sha256=MPon5eN71wE49i0Ecfy9LQoGX75ArlRNOGWVb28xGlI,1242
16
+ flowfile/web/static/assets/DatabaseManager-83ee3c98.js,sha256=EGIxYly4XerF-wsg49s83gcLekh8ZEHzx9c6ufup3Do,21099
17
+ flowfile/web/static/assets/DatabaseReader-dc0c6881.js,sha256=yTCfWsqE422tAnWu6K1_Q8AWWnWYby31z9gfZyLiNpM,18460
18
+ flowfile/web/static/assets/DatabaseReader-f50c6558.css,sha256=9QxlWNkGS95WJhX7_bD4CrN3BcammfwfMl6HkbdOTEE,3741
19
+ flowfile/web/static/assets/DatabaseWriter-2f570e53.css,sha256=L1cOU0rF-auXKMDQEYPI8F1SCgfjW64rTSEFSNfanlw,2453
20
+ flowfile/web/static/assets/DatabaseWriter-5afe9f8d.js,sha256=YZkE9ZEMkxfypifuKv1P-_NZKsljN3FAFqdamm4_12E,13868
21
+ flowfile/web/static/assets/ExploreData-5bdae813.css,sha256=W9roE_zrPPgD0dajRpedNal0_7jod1WLMiMgIuMt1qM,1095
22
+ flowfile/web/static/assets/ExploreData-c7ee19cf.js,sha256=QYhkXT6NjhBQhPWG9c46-jUUyvcS0EHlZw0bSeNssSY,5479135
23
+ flowfile/web/static/assets/ExternalSource-17b23a01.js,sha256=tVNEzlFMpq5a9a1P8DQ-bHMBHIBdF4eeLzoBOkINyb0,8692
24
+ flowfile/web/static/assets/ExternalSource-e37b6275.css,sha256=43tidVv7Ch_x09-4F3WHgzkLNuQfT_xFBh7zi75Fft8,2316
25
+ flowfile/web/static/assets/Filter-90856b4f.js,sha256=iZQ0xO-4Gl_UcTnwjFFNiCRfs5ecR-dAkj-xjytxl0I,10459
26
+ flowfile/web/static/assets/Filter-a9d08ba1.css,sha256=qdCLoUHadYgx2Ip748TA_O6XyCUTEcE8QuLmJvruWEY,781
27
+ flowfile/web/static/assets/Formula-38b71e9e.js,sha256=m6koXZ8TP3duikymzUZQ5mKhIrKjd5Ojb3fFZMa2OHc,7677
28
+ flowfile/web/static/assets/Formula-d60a74f4.css,sha256=1gp09P8SicTtA9JXEPyo-P-wP0hIMxEcN3PYTRzx0Kg,510
29
+ flowfile/web/static/assets/FuzzyMatch-6857de82.css,sha256=aFfegjmKGaavTjs7g4sPI3Cyf3eu4y0flFzODZANyJU,5448
30
+ flowfile/web/static/assets/FuzzyMatch-d0f1fe81.js,sha256=Ty4zXC2HUh70nHuyq0DPJlrOVsZ00AuhUETxkRyDCNQ,20012
31
+ flowfile/web/static/assets/GoogleSheet-854294a4.js,sha256=byW0Zbu3NOrQez25Qhwr6pXDlBWYMydUwSQoGi_Dh0w,100539
32
+ flowfile/web/static/assets/GoogleSheet-92084da7.css,sha256=kghNp_B_exF0dVG5S6D6tAMSpNpHUQnAcXtdYLbL9I8,5179
33
+ flowfile/web/static/assets/GraphSolver-0c86bbc6.js,sha256=0C0xm3jiC0v5EITll2HAfT8E14RonHMf41i06rXoEcI,15431
34
+ flowfile/web/static/assets/GraphSolver-17fd26db.css,sha256=F_0m2_7rHKQ5jteIjmZ31NyjIXZCI0e_oJ_c8fmeH8s,1413
35
+ flowfile/web/static/assets/GroupBy-ab1ea74b.css,sha256=qx6nS0najhKOHM_DQLdszyydztKIfbnfS1Q8MMaozgo,1272
36
+ flowfile/web/static/assets/GroupBy-f2772e9f.js,sha256=TEihT5odRyeaU1548dA-kbhLfPdOrWVE6Dbdrrok_Oo,17264
37
+ flowfile/web/static/assets/Join-41c0f331.css,sha256=QcDzMadH3XVYV9CEP4gwB33R2iXM5syzgMCts1fCkrA,2351
38
+ flowfile/web/static/assets/Join-bc3e1cf7.js,sha256=L75OuXUSdl4aogES-h8ja3tLJH7Lv-LL7yTAcb3C7S4,11140
39
+ flowfile/web/static/assets/ManualInput-03aa0245.js,sha256=QrAWk_RU5LYTPlKoXTMtT5p6EKKN1RTI-HsPWOTI68Y,14958
40
+ flowfile/web/static/assets/ManualInput-ac7b9972.css,sha256=rHuZcrtSxu_X4lmWhjH2nou_YS4AmwiNJCNKTPJ8p14,1807
41
+ flowfile/web/static/assets/Output-48f81019.css,sha256=SPgQGb_nR9q6TUEG5eICBdfB9PBvUmWtJRM3iv-BLYo,352098
42
+ flowfile/web/static/assets/Output-5b35eee8.js,sha256=rtJR7gOrMm8zdz5Ne8Ghn9qhyAUUC6MJEYfj4vwWYrg,20921
43
+ flowfile/web/static/assets/Pivot-7164087c.js,sha256=-1f-fx5qxQEJahu2zVGyV6Cr43pCbll9DvoJ3oXaa-s,16609
44
+ flowfile/web/static/assets/Pivot-f415e85f.css,sha256=9BXoXzqyFxLjSN0APdMk3tOX4hYp5Rm6278sOd5FzLQ,678
45
+ flowfile/web/static/assets/PolarsCode-3abf6507.js,sha256=KvgqaoO_A1EYg5SdnSQXX40n8WmUdZuhZ4R8usH5pcs,124229
46
+ flowfile/web/static/assets/PolarsCode-650322d1.css,sha256=ZQMi0XF5KAv0-3WUVI-51K63gTMJifbhWC8kYtPkBbs,555
47
+ flowfile/web/static/assets/PopOver-b37ff9be.js,sha256=Aywd9bupPEaHsPtorBz6_Zblmh12C-VaG4McQEr5xz8,18497
48
+ flowfile/web/static/assets/PopOver-bccfde04.css,sha256=vM_eBMuqLyBd_Y5bLjLKifKtvrpD8l5r5ZNjnjZUZBo,756
49
+ flowfile/web/static/assets/Read-65966a3e.js,sha256=0-w1SY-IlWdULo513OwfBXdQMtgYF5KBaxuSn-4nD-4,28372
50
+ flowfile/web/static/assets/Read-80dc1675.css,sha256=gNwWda__zBwSDUVxt7oKGiKB-z-tj0H0ROQthMvDNhU,3975
51
+ flowfile/web/static/assets/RecordCount-c66c6d6d.js,sha256=gDYE7DcZV7QpS7xeVlESoRJRU8zzPxmxhooyEvfrvJI,4220
52
+ flowfile/web/static/assets/RecordId-826dc095.js,sha256=9fk0AMZkfx7wYIzjwqX0icf6aZOl-SKuKDlV8dHTldE,14757
53
+ flowfile/web/static/assets/Sample-4ed555c8.js,sha256=uKQoPGEMf9Ior0-LCWJqtvOnf4r4YOUsZP1wte22ua0,7006
54
+ flowfile/web/static/assets/SecretManager-eac1e97d.js,sha256=wQ5QsU2DW1edcuzru35VmRduNV-eBjcH765oTqORojY,16198
55
+ flowfile/web/static/assets/Select-085f05cc.js,sha256=wxI0uPVP6PlFim1js6LcW1R4B4qePj-WFqNH2TMVSWY,8520
56
+ flowfile/web/static/assets/SettingsSection-1f5e79c1.js,sha256=A3ogOBTPKG4dQMUsuVseMndFri-3S-15S8FSTD5K5tU,3449
57
+ flowfile/web/static/assets/SettingsSection-9c836ecc.css,sha256=nINuzFyCzLJoIEU5l-IQxPvP6eRRfdEk2mAH7gSfLFE,988
58
+ flowfile/web/static/assets/Sort-3e6cb414.js,sha256=BvB671g3YIembpI-6gt4ZWYpqqHIr-XK1e7UFRpJgkQ,13651
59
+ flowfile/web/static/assets/Sort-7ccfa0fe.css,sha256=fM-g_iik339gSkOk-7C0VH3sbcSvBAZ05wzOYa13izI,1272
60
+ flowfile/web/static/assets/TextToRows-606349bc.js,sha256=fX5HZYz93ywuFWJ4GfnsSuWI5cmbG_0PpAm8FYYHbVc,13574
61
+ flowfile/web/static/assets/TextToRows-c92d1ec2.css,sha256=yS0ewva76G5zLWBuM0pBMht8uLG_deq759uuVMJM1fU,839
62
+ flowfile/web/static/assets/UnavailableFields-5edd5322.css,sha256=Xt1TInpopOWG_eHq77x7tpg9HJ4UEds_OcnuyPsruNc,1146
63
+ flowfile/web/static/assets/UnavailableFields-b41976ed.js,sha256=M95DsOJxF87Q7bGBTPYwj5VpsADJKwy4PwERCRPQqI4,1234
64
+ flowfile/web/static/assets/Union-8d9ac7f9.css,sha256=jZrH-YPCY2PeNyL6pgKMepdiItH9RJErX8PbgdfBJrc,605
65
+ flowfile/web/static/assets/Union-fca91665.js,sha256=4VUM5HBbMqd_WtLIOE4TT4YRxwa73HhSZMGmRb0DKgc,4976
66
+ flowfile/web/static/assets/Unique-a59f830e.js,sha256=eTOguu8mBlvoj0NyGClStkUPmqNmmvP1MrhPcmVUcXM,10086
67
+ flowfile/web/static/assets/Unique-b5615727.css,sha256=tWFXJydKrd1MCKOOWv4tCWiTqi46PdEVoIIqBVNIVd4,1272
68
+ flowfile/web/static/assets/Unpivot-246e9bbd.css,sha256=JG6bvXhm4hOKJTfiAS0bEKbA7L3KDZvIaMQUef9fkWI,1593
69
+ flowfile/web/static/assets/Unpivot-c3815565.js,sha256=8_3PiLC87w3Q9HRqSdZwUJlhsOjr_feWtVg5a7jmovs,18403
70
+ flowfile/web/static/assets/airbyte-292aa232.png,sha256=KSqiMiLlZ9SSDOuaN7TXiVatwlEHiWT1Z1FdcV9-7wE,10456
71
+ flowfile/web/static/assets/api-22b338bd.js,sha256=7ilBVDBld5_sJCeIgSd8pU8jpfzxo1oSTKMSDPtVKmo,2174
72
+ flowfile/web/static/assets/cross_join-d30c0290.png,sha256=0wwCkKGjCkcIJhCO1ZTy8ZKezANsYPaeYWf9w_LBKSQ,19192
73
+ flowfile/web/static/assets/database_reader-ce1e55f3.svg,sha256=zh5V87BPAEOyMKkOQz0LSU_hsgrgodKeEKgsZrTs-Uk,1419
74
+ flowfile/web/static/assets/database_writer-b4ad0753.svg,sha256=tK0HU1fxo8ksAySP8hud8S0txXfVg6iqqta5v4ltF-k,1259
75
+ flowfile/web/static/assets/designer-2394122a.css,sha256=I5QSKjopgNBvZJ5Tm6ZZhmlo0hjXMNyTgFqzA1DY_q4,316302
76
+ flowfile/web/static/assets/designer-e5bbe26f.js,sha256=RAh5uG13bSNfRTaMF4iEBZiyRJnVBxImjCD1-YmdpZs,2503276
77
+ flowfile/web/static/assets/documentation-08045cf2.js,sha256=phprlRhhu-t6JUBUMDhatG_N40OxRtW2mlKbmULUFfI,1198
78
+ flowfile/web/static/assets/documentation-12216a74.css,sha256=EiFqdFDNczJt_IeP7KJyv7MGCvYRiSuSaUcSs6MHWpE,1200
79
+ flowfile/web/static/assets/dropDown-35135ba8.css,sha256=NRNbqLG5Ckh7uE1m5Z038kTCFnYcFUCD4iTUU1i6VPU,3176
80
+ flowfile/web/static/assets/dropDown-5e7e9a5a.js,sha256=WoC1zvJi4nnzUpBOGzfSiAojlf1L3jZne9X5Pq2hl4I,11474
81
+ flowfile/web/static/assets/dropDownGeneric-50a91b99.js,sha256=hcsDvVluns9fQVCSjKFL-_08eczXZ7BChvYh53-hZ3s,2336
82
+ flowfile/web/static/assets/dropDownGeneric-895680d6.css,sha256=iVaA1vV7V9juSX7E_WrtTq0xFVWTW-78-b3YVbxlTIk,161
83
+ flowfile/web/static/assets/element-icons-9c88a535.woff,sha256=nIilNdx2T_GKI3IC0Z-dYpdmN8jnoyTPaeK6LUBm9us,24820
84
+ flowfile/web/static/assets/element-icons-de5eb258.ttf,sha256=3l6yWG-kOvjHWaPTe87HTczNsjLCGPpSA_P5FpV3Y-U,50372
85
+ flowfile/web/static/assets/explore_data-8a0a2861.png,sha256=igooYexoyuVyai_ukUYC7QlaR9JRWFQY_6ey8W01vDw,14720
86
+ flowfile/web/static/assets/fa-brands-400-808443ae.ttf,sha256=gIRDrmyCBDla3YVD2oqQpguTdvsPh-2OjqN9EJWW2AU,210792
87
+ flowfile/web/static/assets/fa-brands-400-d7236a19.woff2,sha256=1yNqGb8jy7ICcoDo9R3JnWxFl2ou1g3nM4KwNLGKK2g,118684
88
+ flowfile/web/static/assets/fa-regular-400-54cf6086.ttf,sha256=VM9ghve7IfnQcq1JShm0aB-lFt0KFM7lLaAdNlGpE6M,68064
89
+ flowfile/web/static/assets/fa-regular-400-e3456d12.woff2,sha256=40VtEoO511M3p3Pf0Ue_kI_QLAG0v0hXbYYDppsTy-U,25472
90
+ flowfile/web/static/assets/fa-solid-900-aa759986.woff2,sha256=qnWZhiOjkeYcaQF5Ss6DLj7N0oi1bWCPIb6gQRrMC44,158220
91
+ flowfile/web/static/assets/fa-solid-900-d2f05935.ttf,sha256=0vBZNUCw4zum3iVaVPJy1GbjEUSAaVa-qM_b9-3_yb0,426112
92
+ flowfile/web/static/assets/fa-v4compatibility-0ce9033c.woff2,sha256=DOkDPGnccU9fRe-b8X1V5MRrzfrWeZpOkrOOd4G_hr0,4796
93
+ flowfile/web/static/assets/fa-v4compatibility-30f6abf6.ttf,sha256=MPar9rqkJYJYKHk9bfrR-2N2XQ5auqevb-r7m_zs5aA,10836
94
+ flowfile/web/static/assets/filter-d7708bda.png,sha256=13CL2k0PIl1uYYMMhH86rwJrov4XRgR6sfV4ZRhnK3I,15838
95
+ flowfile/web/static/assets/formula-eeeb1611.png,sha256=7usWEStTOxFA0T8k7FXGXg5RluCJDLsqUcp048xjD2M,19295
96
+ flowfile/web/static/assets/fullEditor-178376bb.css,sha256=F4N2uyLmmmAoyKAfgHvBZ23H-kH-tbtnJ1JLVwfFz50,5965
97
+ flowfile/web/static/assets/fullEditor-705c6ccb.js,sha256=hVD4wUjNiOwLEDudCjKOKohBL8X18PaBXoELXQC8_uI,24451
98
+ flowfile/web/static/assets/fuzzy_match-40c161b2.png,sha256=QMFhsk1rZn6x2Z7aMwVoMVIehdgkmhFrrck9Gks3-_g,13865
99
+ flowfile/web/static/assets/genericNodeSettings-65587f20.js,sha256=w_bk4yzuER-p0_m2dr3PUVUQjoZ_6QQlZUFrFvLP_ng,6240
100
+ flowfile/web/static/assets/genericNodeSettings-924759c7.css,sha256=kkdZx4gQRslPM--BetVKpsQdTi8Ezdc8YFclLORTYtg,1017
101
+ flowfile/web/static/assets/graph_solver-8b7888b8.png,sha256=i3iIuPx5-fvXVwP9Dk1-bp6paSN61bVork9bGpPuVpE,11180
102
+ flowfile/web/static/assets/group_by-80561fc3.png,sha256=gFYfw_ipVhzG6YLKSjl32XoIHPJYMZW5LBK8T9HQoNo,16156
103
+ flowfile/web/static/assets/index-552863fd.js,sha256=39e75VuPflLL0oHERr0mVxBJ__gA7mbc2vqdaoYPd9g,1884543
104
+ flowfile/web/static/assets/index-681a3ed0.css,sha256=aBo-0D4m-NuvQf0XepvMEyEKFf5JKH1HcNKUZO5c-Ys,416122
105
+ flowfile/web/static/assets/input_data-ab2eb678.png,sha256=qy62eFHc5m7_aGxUScHGy7kavT7x7Wz0p7-WhD3L684,13172
106
+ flowfile/web/static/assets/join-349043ae.png,sha256=NJBDrnJbVOiE9nDYFxoQoepGE2JUvPwA7CfGH4XfnRQ,9603
107
+ flowfile/web/static/assets/manual_input-ae98f31d.png,sha256=rpjzHerLp1wecn-hsKEcYMJWRDRB8S15i4_SmBBIexg,13587
108
+ flowfile/web/static/assets/nodeTitle-cf9bae3c.js,sha256=cfzHYMVyFeAdFkgeTKXEjTtE3yKcnwU7s6mAuuudLJQ,7860
109
+ flowfile/web/static/assets/nodeTitle-f4b12bcb.css,sha256=9LEry77j7biVsPqjfZwCqL3aUhbp00_vQL_SrDfHwzY,3611
110
+ flowfile/web/static/assets/old_join-5d0eb604.png,sha256=XQ62BOHlpgVIHVxSf589g8vzQ-vo_XUt4uMNKcOSlsU,9325
111
+ flowfile/web/static/assets/output-06ec0371.png,sha256=BuwDcRqgJU9Vnf0Zr1-Fzg_DshEIucmsIqPw0FhIwPg,12055
112
+ flowfile/web/static/assets/pivot-9660df51.png,sha256=lmDfUQowkZ6z6k12CZnQOAh6L2f73X4NTX8Y9YafVu0,15554
113
+ flowfile/web/static/assets/polars_code-05ce5dc6.png,sha256=Bc5dxp286-RZ2VayediJOz7gkjSCNLFO3wjWdWyD-HU,6239
114
+ flowfile/web/static/assets/record_count-dab44eb5.png,sha256=2rROtfInJu6NVYw0N4NmalWPkaErI2DyrteHdBRIJdU,7682
115
+ flowfile/web/static/assets/record_id-0b15856b.png,sha256=CxWFa702605nnK46FqOafmp_AwTuVkkSJAQgnKh1jBs,16066
116
+ flowfile/web/static/assets/sample-693a88b5.png,sha256=aTqItY0lcq5Vw58v-6ZU6DI4277L_ZWS47yQNOfDXEA,9222
117
+ flowfile/web/static/assets/secretApi-3ad510e1.js,sha256=wE0cQhBKCupzq8196d-yBzGhMZb08HVZgT-N5MWUtfk,1346
118
+ flowfile/web/static/assets/select-b0d0437a.png,sha256=sNBDesTxseBqQUetu6Rbijky24UI0FLmoS33ldvr_hM,14339
119
+ flowfile/web/static/assets/selectDynamic-b062bc9b.css,sha256=sGK8m1dDYX0ViRGnrYmBuLHeIWKtgPDnSswNCCDJHFo,2301
120
+ flowfile/web/static/assets/selectDynamic-bd644891.js,sha256=x7m__HQpkP5CCqfEQKJIHuAIzSRcezfeW7cF_--UnkE,15325
121
+ flowfile/web/static/assets/sort-2aa579f0.png,sha256=KqV58FQ9BhINj95x87vnV50_VcYVCrdHWbORrDYiY2M,11528
122
+ flowfile/web/static/assets/summarize-2a099231.png,sha256=KgmSMVKXng6xq0cNQ8YJEXdThQhhmHaiKs_31ybbr8g,11762
123
+ flowfile/web/static/assets/text_to_rows-859b29ea.png,sha256=hZsp6vqUV9EbmfOpnz1Os_daX1_4HQqwjVJdHtUes6c,13876
124
+ flowfile/web/static/assets/union-2d8609f4.png,sha256=LYYJ9EtnGnouHCaKBAxVwB3UGAiIeK2GqJHjKs4eN9M,10739
125
+ flowfile/web/static/assets/unique-1958b98a.png,sha256=GVi5is2VQF1Zc5H9lh0o92eVF8AeyVAgWCJHlUPP3Bo,20864
126
+ flowfile/web/static/assets/unpivot-d3cb4b5b.png,sha256=08tLWwGQ51ZYu_ZmS5iz7jtE27lxEW-FluhqSgG44_A,18488
127
+ flowfile/web/static/assets/view-7a0f0be1.png,sha256=eg8L4bC8yRlmh7nWrOQqQtXMQAWeorb6v8BWsv12spY,8353
128
+ flowfile/web/static/assets/vue-codemirror.esm-dd17b478.js,sha256=h39fsCtXs194Th0Hf5edWBX_XmHd8Teu-nq7tmK7W5s,783309
129
+ flowfile/web/static/assets/vue-content-loader.es-6b36f05e.js,sha256=grSsKAQYwYl2UhhMOCEKVbH5jH_mUBE033dfqKgvQ1g,5545
130
+ flowfile/web/static/flowfile.svg,sha256=hOLvhgtIBAuDAFwTCw3yUYO4xHMA9Jk_HpiBjk8t_dA,314188
131
+ flowfile/web/static/icons/flowfile.png,sha256=0uV0ELU3Vw4DfggPs8CHR1N2WdXutRbONUsdzJ_nxGA,240862
132
+ flowfile/web/static/images/airbyte.png,sha256=_KUGN4TrpkZBFXxdE-I8BiXKo-lx56mVYtAuFIMqg7w,24537
133
+ flowfile/web/static/images/flowfile.svg,sha256=hOLvhgtIBAuDAFwTCw3yUYO4xHMA9Jk_HpiBjk8t_dA,314188
134
+ flowfile/web/static/images/google.svg,sha256=HWvs3MThQhVAoqPMUfno4tl670VD0CYy0OqgtgROIVo,1054
135
+ flowfile/web/static/images/sheets.png,sha256=wpWE7P1eSIZ85ZtE4DuKZXoJwXL3gamodjyTt4dozDA,6260
136
+ flowfile/web/static/index.html,sha256=lJEv55voAU9NP7so-FOxfpeoxCwMM_c9c1d87V-juFU,739
137
+ flowfile/web/static/vite.svg,sha256=SnSK_UQ5GLsWWRyDTEAdrjPoeGGrXbrQgRw6O0qSFPs,1497
138
+ flowfile/web/static/vue.svg,sha256=VTLbNPHFKEGIG6uK7KbD6NCSvSGmiaZfTY-M-AQe750,496
6
139
  flowfile_core/__init__.py,sha256=dGxpVE9ol33CMRPJSPWlL7AZqXowBmlCx8unxCVWJXQ,254
7
140
  flowfile_core/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
141
  flowfile_core/auth/jwt.py,sha256=-j_eZd5z2ABP0KHo5PmmsuCyJUsvAFFlnANJiRCnNx4,4828
@@ -12,7 +145,7 @@ flowfile_core/configs/__init__.py,sha256=RSoO4aiWY-FzOUKLPY-mbwHS_YcbbNw5tNdVzrw
12
145
  flowfile_core/configs/flow_logger.py,sha256=Pk1yhaC58jjISMrgwhBFIue9Qj5XfYo8NfOefqsR-gA,15822
13
146
  flowfile_core/configs/node_store/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
147
  flowfile_core/configs/node_store/nodes.py,sha256=6z5kk-TUw5b-iQRxZzw7Qey-P9mUKw0AL19Nu_zwUhY,6155
15
- flowfile_core/configs/settings.py,sha256=UsqurpsVQ8BTz6k5hdipfFgWpMNw7k-9WgpG7XHAHeA,3818
148
+ flowfile_core/configs/settings.py,sha256=6QI6wOhAwvRYLd3MMP7w3g6wgyT4DeE-zq6-I39Touo,3073
16
149
  flowfile_core/database/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
150
  flowfile_core/database/connection.py,sha256=Ul1gYnYvwvlTSgxlJr5JexYCdgyZFduXioFjY_Lw2U0,1410
18
151
  flowfile_core/database/init_db.py,sha256=vKQi340caayTqc1tR0CJcd621i4afVc0BLpJO-t4CFk,1236
@@ -20,12 +153,12 @@ flowfile_core/database/models.py,sha256=SUrOgefmGY4lrN9Cv67TEjEOQtyKoYEpkjIVCWs7
20
153
  flowfile_core/fileExplorer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
154
  flowfile_core/fileExplorer/funcs.py,sha256=9o1Wko-wPpKNapRSvwsC-FmofJ6VFmBU5v2aQLRU3sA,9048
22
155
  flowfile_core/fileExplorer/utils.py,sha256=RrXj1NdkB2K3v5khvXpEp-_OnN68k9Ex_9s7CDa3L5w,1703
23
- flowfile_core/flowfile/FlowfileFlow.py,sha256=V31YYKiiL81RZ5zPIM7DK-hxriEOdc1MvHLuqSBTwSI,70318
156
+ flowfile_core/flowfile/FlowfileFlow.py,sha256=bc14bU2G088FJdZmAvKz66CNt95Yi_DtKVzBchaawdQ,70546
24
157
  flowfile_core/flowfile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
158
  flowfile_core/flowfile/_extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
159
  flowfile_core/flowfile/_extensions/real_time_interface.py,sha256=F9wGAFmu4gmC-svfwasDEaVYZBinBqYUZmCrEsWos44,1906
27
160
  flowfile_core/flowfile/analytics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- flowfile_core/flowfile/analytics/analytics_processor.py,sha256=mLEEWTaSSMF-0W7DyN9lDKfpnQ8_GRoUKclJ3iFZ97U,4833
161
+ flowfile_core/flowfile/analytics/analytics_processor.py,sha256=uFW13VkTQuewtlhyUU0sNPLj-efw2w0YRmNX71ealrE,4847
29
162
  flowfile_core/flowfile/analytics/graphic_walker.py,sha256=snYNQUTPZLhtz1egv_rSmo61uhJvd7OAuY_zeTYeE0c,2379
30
163
  flowfile_core/flowfile/analytics/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
164
  flowfile_core/flowfile/analytics/utils.py,sha256=x-FS1ZwQrHLzAfKm1THiQEKeCm_w0vO5dyWgyyIPjLY,487
@@ -92,7 +225,7 @@ flowfile_core/flowfile/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
92
225
  flowfile_core/flowfile/util/calculate_layout.py,sha256=iquA_-EGzX9mH1NasIZFNaYLfBcKqz5pHaTjHO1rYWE,5070
93
226
  flowfile_core/flowfile/util/execution_orderer.py,sha256=IJ-upXUruZfFj8z4J-2oDLz2hDSOnRIdgd_YLlRKU-c,5828
94
227
  flowfile_core/flowfile/utils.py,sha256=arSkifiXgbdWqrLcgQ6X3u-A9_6zDHocDuXEy6M3c18,3363
95
- flowfile_core/main.py,sha256=O-MjHAOYE-qS0MFLh6CigpcSejYXR4uo0Xs4msIEt2w,3790
228
+ flowfile_core/main.py,sha256=5rcWI1uFlYkUWd7T_ZHkolOmLlbIWjuDpzCyivw6og0,3879
96
229
  flowfile_core/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
230
  flowfile_core/routes/auth.py,sha256=-2SWMCDDKYSnriiYH3hOadnsHdmVckcIV_vA2mZfBu0,1251
98
231
  flowfile_core/routes/logs.py,sha256=LHGbCN10pjS8yAWHaG9eUHxMoGQlHjVWFSxtAnuQjrM,5868
@@ -106,7 +239,7 @@ flowfile_core/schemas/analysis_schemas/graphic_walker_schemas.py,sha256=1PQeiBFI
106
239
  flowfile_core/schemas/defaults.py,sha256=5FeYJIn1ZJ4Es8WQfSW3EkfoOnWsvifg9bvwZO7fklg,228
107
240
  flowfile_core/schemas/external_sources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
241
  flowfile_core/schemas/external_sources/airbyte_schemas.py,sha256=xjMVevVronSvMJ1lQrBTv2ClkO2VSMSU8YCga_Mw6vk,594
109
- flowfile_core/schemas/input_schema.py,sha256=xyeLiDuRnY2K65zOAlxpx-cm7Z4HK16yOKl_GpwMmkU,14112
242
+ flowfile_core/schemas/input_schema.py,sha256=lxaHMXcrrjpzQA84UsdZ4Y_bvxdlA04sr0sDEwydAOc,13818
110
243
  flowfile_core/schemas/models.py,sha256=W22swh1TZ1aAZY8R-OL0AiTXvIEUKtN9B1ZFc0dxZQI,5253
111
244
  flowfile_core/schemas/output_model.py,sha256=yenexlnHI9ecQhTDBPNChO2p25YNZ9btR5_cXd-ehLg,2665
112
245
  flowfile_core/schemas/schemas.py,sha256=_CXS-YUMOwJTlWAX4mPnhqHD7ZiQy3DM7rHB2eSbHUY,2647
@@ -119,15 +252,14 @@ flowfile_core/utils/excel_file_manager.py,sha256=EIad2LenHu-3Yw1FcLmE0KgmLflnvNK
119
252
  flowfile_core/utils/fileManager.py,sha256=LnJhK_pwjb9MIApG2e4Hp3L5Z7Wny8YYHaL9SkW8WlE,1371
120
253
  flowfile_core/utils/fl_executor.py,sha256=eNnNZHZ9451brzZD00_X8aoCHFl1hR1gVOIGxtE0Db4,1301
121
254
  flowfile_core/utils/utils.py,sha256=NkEu21OF1l5weu01g-dAVdJ6BRHdpT2jBrWBSi-wp3c,270
122
- flowfile_frame/__init__.py,sha256=-fD0U8K8VAw9uLGm9FU7R-mCgLoVtvcNh1YJsfhOzeE,1350
123
- flowfile_frame/__main__.py,sha256=qN0H-bYXDLIDoJNAurXep27crvKNHiz90HOGWbvC0HM,413
255
+ flowfile_frame/__init__.py,sha256=N5ZART5UuwRooekfMr_vwtgxFNvIr9uTPAepoYSg7Pg,1302
124
256
  flowfile_frame/adapters.py,sha256=C6JZZKANoKbHHmwMaF9AqAcZvITvQeb2Dklcpg5JAdY,530
125
257
  flowfile_frame/expr.py,sha256=wzJLiHtAqBA4NUEyXW8UhNJJ2jiGDvWEX8RfWT5ICwQ,47370
126
258
  flowfile_frame/flow_frame.py,sha256=TP3u7Nyq0TuT3sba0NGLCgMPnug5MuFCKE7Djafud-U,77559
127
259
  flowfile_frame/group_frame.py,sha256=MMGE2_DC8n1J2UxBBm_TyacGiRT_1V2CcWUvsIyhbIQ,9115
128
260
  flowfile_frame/join.py,sha256=pezHyNQMcaSPK9vhjaCaelMkgKdrvOQxwiROsa0fmN8,2480
129
261
  flowfile_frame/selectors.py,sha256=Ny5IpDP481ClNr5gI7_SjXzeqF16LsPcVQxiyUf5tUw,9130
130
- flowfile_frame/utils.py,sha256=WGCY-eDeDlVkIT_zF1Si_80557TcxS51FMSAIdG5iTw,5928
262
+ flowfile_frame/utils.py,sha256=LwsNm8tvqcyaAeGX1PNQbpt-NenDsM8jx9SbxhDslZI,1348
131
263
  flowfile_worker/__init__.py,sha256=ZDdn3JCP7LWTiTsmntVIVduB4p2bUkJcZUKVEj7V9TU,1375
132
264
  flowfile_worker/configs.py,sha256=7fYtlj06vxDrMiRuMbwvSDOD1JRVMZqnPbcQFuikCJM,2714
133
265
  flowfile_worker/create/__init__.py,sha256=vkWy5uODffivUdxt3nNVALj6xgQK3HPBetqR-QqZ-uo,1643
@@ -164,8 +296,8 @@ test_utils/__init__.py,sha256=8WwOgIuKw6YtOc1GWR1DqIhQ8BhlLWqsMyQJSpxnzKk,66
164
296
  test_utils/postgres/__init__.py,sha256=y3V_6a9N1Pvm5NIBaA8CFf3i4mvPVY-H1teHA-rg0VU,33
165
297
  test_utils/postgres/commands.py,sha256=4oA8EHW3EqwGkG02HSqEGbXEBGM01sUW5FsyHm86W4k,4347
166
298
  test_utils/postgres/fixtures.py,sha256=kR8UBjQr3pgbe-xM-V8x8VseTHCPv0EmDEzPHl5Qc8Y,13507
167
- flowfile-0.3.0.dist-info/LICENSE,sha256=pCfLAA27jMHReYk_wGiirZxWRRXz_Bm7PVInRCa9P5g,1075
168
- flowfile-0.3.0.dist-info/METADATA,sha256=049rH0Qr90sG9YaKOxeF9MoEBXgsKg8FnCvd7ithtAw,8952
169
- flowfile-0.3.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
170
- flowfile-0.3.0.dist-info/entry_points.txt,sha256=CiyNXUvc77hDbE9rDaAMQFdFCQs-XdBm5_o1WV9_gQA,335
171
- flowfile-0.3.0.dist-info/RECORD,,
299
+ flowfile-0.3.0.2.dist-info/LICENSE,sha256=pCfLAA27jMHReYk_wGiirZxWRRXz_Bm7PVInRCa9P5g,1075
300
+ flowfile-0.3.0.2.dist-info/METADATA,sha256=nbI8Qsr1rvM5QfFUJ9kdrXXAml_5MEdZWcaVfdSL764,7389
301
+ flowfile-0.3.0.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
302
+ flowfile-0.3.0.2.dist-info/entry_points.txt,sha256=Q3CEYNk33UaWlA9D-8yXYH0FwjKBsrtNuzzzHxhwnNI,333
303
+ flowfile-0.3.0.2.dist-info/RECORD,,
@@ -1,9 +1,9 @@
1
1
  [console_scripts]
2
2
  build_backends=build_backends.main:main
3
3
  build_backends_prd=build_backends.main_prd:main
4
+ flowfile=flowfile.__main__:main
4
5
  flowfile_core=flowfile_core.main:run
5
6
  flowfile_worker=flowfile_worker.main:run
6
- flowframe=flowframe.__main__:main
7
7
  start_postgres=test_utils.postgres.commands:start_postgres
8
8
  stop_postgres=test_utils.postgres.commands:stop_postgres
9
9
 
@@ -15,6 +15,7 @@ from starlette.datastructures import Secret
15
15
  DEFAULT_SERVER_HOST = "0.0.0.0"
16
16
  DEFAULT_SERVER_PORT = 63578
17
17
  DEFAULT_WORKER_PORT = 63579
18
+ SINGLE_FILE_MODE: bool = os.environ.get("SINGLE_FILE_MODE", "0") == "1"
18
19
 
19
20
 
20
21
  def parse_args():
@@ -29,34 +30,10 @@ def parse_args():
29
30
  parser.add_argument(
30
31
  "--worker-port",
31
32
  type=int,
32
- default=DEFAULT_WORKER_PORT,
33
33
  help="Port for the worker process",
34
34
  )
35
-
36
- # Use known_args to handle PyInstaller's extra args
37
35
  args = parser.parse_known_args()[0]
38
36
 
39
- # Validate arguments
40
- if args.port < 1 or args.port > 65535:
41
- raise ValueError(
42
- f"Invalid port number: {args.port}. Port must be between 1 and 65535."
43
- )
44
-
45
- if args.worker_port < 1 or args.worker_port > 65535:
46
- raise ValueError(
47
- f"Invalid worker port number: {args.worker_port}. Port must be between 1 and 65535."
48
- )
49
-
50
- # Check if host is valid (basic check)
51
- if not args.host:
52
- raise ValueError("Host cannot be empty")
53
-
54
- # Check that server and worker ports are different
55
- if args.port == args.worker_port:
56
- raise ValueError(
57
- f"Server port ({args.port}) and worker port ({args.worker_port}) must be different"
58
- )
59
-
60
37
  return args
61
38
 
62
39
 
@@ -80,7 +57,6 @@ def get_default_worker_url(worker_port=None):
80
57
  # Check for Docker environment first
81
58
  worker_host = os.getenv("WORKER_HOST", None)
82
59
 
83
- # Use the provided port if available, otherwise get from env or default
84
60
  if worker_port is None:
85
61
  worker_port = os.getenv("WORKER_PORT", DEFAULT_WORKER_PORT)
86
62
 
@@ -88,22 +64,21 @@ def get_default_worker_url(worker_port=None):
88
64
  worker_port = int(worker_port) if isinstance(worker_port, str) else worker_port
89
65
 
90
66
  if worker_host:
91
- return f"http://{worker_host}:{worker_port}"
67
+ worker_url = f"http://{worker_host}:{worker_port}"
92
68
 
93
- if platform.system() == "Windows":
94
- return f"http://127.0.0.1:{worker_port}"
69
+ elif platform.system() == "Windows":
70
+ worker_url = f"http://127.0.0.1:{worker_port}"
95
71
  else:
96
- return f"http://0.0.0.0:{worker_port}"
72
+ worker_url = f"http://0.0.0.0:{worker_port}"
73
+ worker_url += "/worker" if SINGLE_FILE_MODE else ""
74
+ return worker_url
97
75
 
98
76
 
99
- # Get server arguments
100
77
  args = parse_args()
101
78
 
102
79
  SERVER_HOST = args.host if args.host is not None else DEFAULT_SERVER_HOST
103
80
  SERVER_PORT = args.port if args.port is not None else DEFAULT_SERVER_PORT
104
81
  WORKER_PORT = args.worker_port if args.worker_port is not None else int(os.getenv("WORKER_PORT", DEFAULT_WORKER_PORT))
105
-
106
-
107
82
  # Worker configuration
108
83
  WORKER_HOST = os.getenv("WORKER_HOST", "0.0.0.0" if platform.system() != "Windows" else "127.0.0.1")
109
84
 
@@ -717,6 +717,7 @@ class FlowGraph:
717
717
 
718
718
  def add_output(self, output_file: input_schema.NodeOutput):
719
719
  def _func(df: FlowDataEngine):
720
+ output_file.output_settings.populate_abs_file_path()
720
721
  execute_remote = self.execution_location != 'local'
721
722
  df.output(output_fs=output_file.output_settings, flow_id=self.flow_id, node_id=output_file.node_id,
722
723
  execute_remote=execute_remote)
@@ -726,14 +727,14 @@ class FlowGraph:
726
727
  input_node: FlowNode = self.get_node(output_file.node_id).node_inputs.main_inputs[0]
727
728
 
728
729
  return input_node.schema
729
-
730
+ input_node_id = getattr(output_file, "depending_on_id") if hasattr(output_file, 'depending_on_id') else None
730
731
  self.add_node_step(node_id=output_file.node_id,
731
732
  function=_func,
732
733
  input_columns=[],
733
734
  node_type='output',
734
735
  setting_input=output_file,
735
736
  schema_callback=schema_callback,
736
- input_node_ids=[output_file.depending_on_id])
737
+ input_node_ids=[input_node_id])
737
738
 
738
739
  def add_database_writer(self, node_database_writer: input_schema.NodeDatabaseWriter):
739
740
  logger.info("Adding database reader")
@@ -982,6 +983,7 @@ class FlowGraph:
982
983
  input_file.received_file.set_absolute_filepath()
983
984
 
984
985
  def _func():
986
+ input_file.received_file.set_absolute_filepath()
985
987
  if input_file.received_file.file_type == 'parquet':
986
988
  input_data = FlowDataEngine.create_from_path(input_file.received_file)
987
989
  elif input_file.received_file.file_type == 'csv' and 'utf' in input_file.received_file.encoding:
@@ -1,7 +1,7 @@
1
1
  from typing import Dict, Set, List
2
2
 
3
3
  from flowfile_core.flowfile.analytics.graphic_walker import (get_initial_gf_data_from_ff,
4
- convert_ff_columns_to_gw_fields)
4
+ convert_ff_columns_to_gw_fields)
5
5
  from flowfile_core.flowfile.flow_node.flow_node import FlowNode
6
6
  from flowfile_core.schemas.input_schema import NodeExploreData
7
7
  from flowfile_core.schemas.analysis_schemas.graphic_walker_schemas import GraphicWalkerInput, DataModel, MutField, ViewField