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.
- flowfile/__init__.py +13 -6
- flowfile/__main__.py +50 -15
- flowfile/api.py +383 -0
- flowfile/readme.md +130 -0
- flowfile/web/__init__.py +155 -0
- flowfile/web/static/assets/AirbyteReader-1ac35765.css +314 -0
- flowfile/web/static/assets/AirbyteReader-cb0c1d4a.js +921 -0
- flowfile/web/static/assets/CrossJoin-41efa4cb.css +100 -0
- flowfile/web/static/assets/CrossJoin-a514fa59.js +153 -0
- flowfile/web/static/assets/DatabaseConnectionSettings-0c04b2e5.css +77 -0
- flowfile/web/static/assets/DatabaseConnectionSettings-f2cecf33.js +151 -0
- flowfile/web/static/assets/DatabaseManager-30fa27e5.css +64 -0
- flowfile/web/static/assets/DatabaseManager-83ee3c98.js +484 -0
- flowfile/web/static/assets/DatabaseReader-dc0c6881.js +426 -0
- flowfile/web/static/assets/DatabaseReader-f50c6558.css +158 -0
- flowfile/web/static/assets/DatabaseWriter-2f570e53.css +96 -0
- flowfile/web/static/assets/DatabaseWriter-5afe9f8d.js +312 -0
- flowfile/web/static/assets/ExploreData-5bdae813.css +45 -0
- flowfile/web/static/assets/ExploreData-c7ee19cf.js +118306 -0
- flowfile/web/static/assets/ExternalSource-17b23a01.js +225 -0
- flowfile/web/static/assets/ExternalSource-e37b6275.css +94 -0
- flowfile/web/static/assets/Filter-90856b4f.js +238 -0
- flowfile/web/static/assets/Filter-a9d08ba1.css +20 -0
- flowfile/web/static/assets/Formula-38b71e9e.js +197 -0
- flowfile/web/static/assets/Formula-d60a74f4.css +17 -0
- flowfile/web/static/assets/FuzzyMatch-6857de82.css +254 -0
- flowfile/web/static/assets/FuzzyMatch-d0f1fe81.js +422 -0
- flowfile/web/static/assets/GoogleSheet-854294a4.js +2616 -0
- flowfile/web/static/assets/GoogleSheet-92084da7.css +233 -0
- flowfile/web/static/assets/GraphSolver-0c86bbc6.js +382 -0
- flowfile/web/static/assets/GraphSolver-17fd26db.css +68 -0
- flowfile/web/static/assets/GroupBy-ab1ea74b.css +51 -0
- flowfile/web/static/assets/GroupBy-f2772e9f.js +413 -0
- flowfile/web/static/assets/Join-41c0f331.css +109 -0
- flowfile/web/static/assets/Join-bc3e1cf7.js +247 -0
- flowfile/web/static/assets/ManualInput-03aa0245.js +391 -0
- flowfile/web/static/assets/ManualInput-ac7b9972.css +84 -0
- flowfile/web/static/assets/Output-48f81019.css +2642 -0
- flowfile/web/static/assets/Output-5b35eee8.js +536 -0
- flowfile/web/static/assets/Pivot-7164087c.js +408 -0
- flowfile/web/static/assets/Pivot-f415e85f.css +35 -0
- flowfile/web/static/assets/PolarsCode-3abf6507.js +2863 -0
- flowfile/web/static/assets/PolarsCode-650322d1.css +35 -0
- flowfile/web/static/assets/PopOver-b37ff9be.js +577 -0
- flowfile/web/static/assets/PopOver-bccfde04.css +32 -0
- flowfile/web/static/assets/Read-65966a3e.js +701 -0
- flowfile/web/static/assets/Read-80dc1675.css +197 -0
- flowfile/web/static/assets/RecordCount-c66c6d6d.js +121 -0
- flowfile/web/static/assets/RecordId-826dc095.js +339 -0
- flowfile/web/static/assets/Sample-4ed555c8.js +184 -0
- flowfile/web/static/assets/SecretManager-eac1e97d.js +382 -0
- flowfile/web/static/assets/Select-085f05cc.js +231 -0
- flowfile/web/static/assets/SettingsSection-1f5e79c1.js +87 -0
- flowfile/web/static/assets/SettingsSection-9c836ecc.css +47 -0
- flowfile/web/static/assets/Sort-3e6cb414.js +309 -0
- flowfile/web/static/assets/Sort-7ccfa0fe.css +51 -0
- flowfile/web/static/assets/TextToRows-606349bc.js +307 -0
- flowfile/web/static/assets/TextToRows-c92d1ec2.css +48 -0
- flowfile/web/static/assets/UnavailableFields-5edd5322.css +49 -0
- flowfile/web/static/assets/UnavailableFields-b41976ed.js +36 -0
- flowfile/web/static/assets/Union-8d9ac7f9.css +30 -0
- flowfile/web/static/assets/Union-fca91665.js +145 -0
- flowfile/web/static/assets/Unique-a59f830e.js +273 -0
- flowfile/web/static/assets/Unique-b5615727.css +51 -0
- flowfile/web/static/assets/Unpivot-246e9bbd.css +77 -0
- flowfile/web/static/assets/Unpivot-c3815565.js +441 -0
- flowfile/web/static/assets/airbyte-292aa232.png +0 -0
- flowfile/web/static/assets/api-22b338bd.js +60 -0
- flowfile/web/static/assets/cross_join-d30c0290.png +0 -0
- flowfile/web/static/assets/database_reader-ce1e55f3.svg +24 -0
- flowfile/web/static/assets/database_writer-b4ad0753.svg +23 -0
- flowfile/web/static/assets/designer-2394122a.css +10697 -0
- flowfile/web/static/assets/designer-e5bbe26f.js +69712 -0
- flowfile/web/static/assets/documentation-08045cf2.js +33 -0
- flowfile/web/static/assets/documentation-12216a74.css +50 -0
- flowfile/web/static/assets/dropDown-35135ba8.css +143 -0
- flowfile/web/static/assets/dropDown-5e7e9a5a.js +319 -0
- flowfile/web/static/assets/dropDownGeneric-50a91b99.js +72 -0
- flowfile/web/static/assets/dropDownGeneric-895680d6.css +10 -0
- flowfile/web/static/assets/element-icons-9c88a535.woff +0 -0
- flowfile/web/static/assets/element-icons-de5eb258.ttf +0 -0
- flowfile/web/static/assets/explore_data-8a0a2861.png +0 -0
- flowfile/web/static/assets/fa-brands-400-808443ae.ttf +0 -0
- flowfile/web/static/assets/fa-brands-400-d7236a19.woff2 +0 -0
- flowfile/web/static/assets/fa-regular-400-54cf6086.ttf +0 -0
- flowfile/web/static/assets/fa-regular-400-e3456d12.woff2 +0 -0
- flowfile/web/static/assets/fa-solid-900-aa759986.woff2 +0 -0
- flowfile/web/static/assets/fa-solid-900-d2f05935.ttf +0 -0
- flowfile/web/static/assets/fa-v4compatibility-0ce9033c.woff2 +0 -0
- flowfile/web/static/assets/fa-v4compatibility-30f6abf6.ttf +0 -0
- flowfile/web/static/assets/filter-d7708bda.png +0 -0
- flowfile/web/static/assets/formula-eeeb1611.png +0 -0
- flowfile/web/static/assets/fullEditor-178376bb.css +256 -0
- flowfile/web/static/assets/fullEditor-705c6ccb.js +630 -0
- flowfile/web/static/assets/fuzzy_match-40c161b2.png +0 -0
- flowfile/web/static/assets/genericNodeSettings-65587f20.js +137 -0
- flowfile/web/static/assets/genericNodeSettings-924759c7.css +46 -0
- flowfile/web/static/assets/graph_solver-8b7888b8.png +0 -0
- flowfile/web/static/assets/group_by-80561fc3.png +0 -0
- flowfile/web/static/assets/index-552863fd.js +58652 -0
- flowfile/web/static/assets/index-681a3ed0.css +8843 -0
- flowfile/web/static/assets/input_data-ab2eb678.png +0 -0
- flowfile/web/static/assets/join-349043ae.png +0 -0
- flowfile/web/static/assets/manual_input-ae98f31d.png +0 -0
- flowfile/web/static/assets/nodeTitle-cf9bae3c.js +227 -0
- flowfile/web/static/assets/nodeTitle-f4b12bcb.css +134 -0
- flowfile/web/static/assets/old_join-5d0eb604.png +0 -0
- flowfile/web/static/assets/output-06ec0371.png +0 -0
- flowfile/web/static/assets/pivot-9660df51.png +0 -0
- flowfile/web/static/assets/polars_code-05ce5dc6.png +0 -0
- flowfile/web/static/assets/record_count-dab44eb5.png +0 -0
- flowfile/web/static/assets/record_id-0b15856b.png +0 -0
- flowfile/web/static/assets/sample-693a88b5.png +0 -0
- flowfile/web/static/assets/secretApi-3ad510e1.js +46 -0
- flowfile/web/static/assets/select-b0d0437a.png +0 -0
- flowfile/web/static/assets/selectDynamic-b062bc9b.css +107 -0
- flowfile/web/static/assets/selectDynamic-bd644891.js +302 -0
- flowfile/web/static/assets/sort-2aa579f0.png +0 -0
- flowfile/web/static/assets/summarize-2a099231.png +0 -0
- flowfile/web/static/assets/text_to_rows-859b29ea.png +0 -0
- flowfile/web/static/assets/union-2d8609f4.png +0 -0
- flowfile/web/static/assets/unique-1958b98a.png +0 -0
- flowfile/web/static/assets/unpivot-d3cb4b5b.png +0 -0
- flowfile/web/static/assets/view-7a0f0be1.png +0 -0
- flowfile/web/static/assets/vue-codemirror.esm-dd17b478.js +22281 -0
- flowfile/web/static/assets/vue-content-loader.es-6b36f05e.js +210 -0
- flowfile/web/static/flowfile.svg +47 -0
- flowfile/web/static/icons/flowfile.png +0 -0
- flowfile/web/static/images/airbyte.png +0 -0
- flowfile/web/static/images/flowfile.svg +47 -0
- flowfile/web/static/images/google.svg +1 -0
- flowfile/web/static/images/sheets.png +0 -0
- flowfile/web/static/index.html +22 -0
- flowfile/web/static/vite.svg +1 -0
- flowfile/web/static/vue.svg +1 -0
- flowfile-0.3.0.2.dist-info/METADATA +235 -0
- {flowfile-0.3.0.dist-info → flowfile-0.3.0.2.dist-info}/RECORD +147 -15
- {flowfile-0.3.0.dist-info → flowfile-0.3.0.2.dist-info}/entry_points.txt +1 -1
- flowfile_core/configs/settings.py +7 -32
- flowfile_core/flowfile/FlowfileFlow.py +4 -2
- flowfile_core/flowfile/analytics/analytics_processor.py +1 -1
- flowfile_core/main.py +4 -1
- flowfile_core/schemas/input_schema.py +1 -8
- flowfile_frame/__init__.py +0 -1
- flowfile_frame/utils.py +0 -139
- flowfile-0.3.0.dist-info/METADATA +0 -219
- flowfile_frame/__main__.py +0 -12
- {flowfile-0.3.0.dist-info → flowfile-0.3.0.2.dist-info}/LICENSE +0 -0
- {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
|
+

|
|
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
|
+

|
|
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=
|
|
5
|
-
flowfile/__main__.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
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=
|
|
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=
|
|
169
|
-
flowfile-0.3.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
170
|
-
flowfile-0.3.0.dist-info/entry_points.txt,sha256=
|
|
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
|
-
|
|
67
|
+
worker_url = f"http://{worker_host}:{worker_port}"
|
|
92
68
|
|
|
93
|
-
|
|
94
|
-
|
|
69
|
+
elif platform.system() == "Windows":
|
|
70
|
+
worker_url = f"http://127.0.0.1:{worker_port}"
|
|
95
71
|
else:
|
|
96
|
-
|
|
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=[
|
|
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
|
-
|
|
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
|