Flowfile 0.2.2__py3-none-any.whl → 0.3.0.1__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 +14 -7
  2. flowfile/__main__.py +51 -15
  3. flowfile/api.py +379 -0
  4. flowfile/web/__init__.py +155 -0
  5. flowfile/web/static/assets/AirbyteReader-1ac35765.css +314 -0
  6. flowfile/web/static/assets/AirbyteReader-cb0c1d4a.js +921 -0
  7. flowfile/web/static/assets/CrossJoin-41efa4cb.css +100 -0
  8. flowfile/web/static/assets/CrossJoin-a514fa59.js +153 -0
  9. flowfile/web/static/assets/DatabaseConnectionSettings-0c04b2e5.css +77 -0
  10. flowfile/web/static/assets/DatabaseConnectionSettings-f2cecf33.js +151 -0
  11. flowfile/web/static/assets/DatabaseManager-30fa27e5.css +64 -0
  12. flowfile/web/static/assets/DatabaseManager-83ee3c98.js +484 -0
  13. flowfile/web/static/assets/DatabaseReader-dc0c6881.js +426 -0
  14. flowfile/web/static/assets/DatabaseReader-f50c6558.css +158 -0
  15. flowfile/web/static/assets/DatabaseWriter-2f570e53.css +96 -0
  16. flowfile/web/static/assets/DatabaseWriter-5afe9f8d.js +312 -0
  17. flowfile/web/static/assets/ExploreData-5bdae813.css +45 -0
  18. flowfile/web/static/assets/ExploreData-c7ee19cf.js +118306 -0
  19. flowfile/web/static/assets/ExternalSource-17b23a01.js +225 -0
  20. flowfile/web/static/assets/ExternalSource-e37b6275.css +94 -0
  21. flowfile/web/static/assets/Filter-90856b4f.js +238 -0
  22. flowfile/web/static/assets/Filter-a9d08ba1.css +20 -0
  23. flowfile/web/static/assets/Formula-38b71e9e.js +197 -0
  24. flowfile/web/static/assets/Formula-d60a74f4.css +17 -0
  25. flowfile/web/static/assets/FuzzyMatch-6857de82.css +254 -0
  26. flowfile/web/static/assets/FuzzyMatch-d0f1fe81.js +422 -0
  27. flowfile/web/static/assets/GoogleSheet-854294a4.js +2616 -0
  28. flowfile/web/static/assets/GoogleSheet-92084da7.css +233 -0
  29. flowfile/web/static/assets/GraphSolver-0c86bbc6.js +382 -0
  30. flowfile/web/static/assets/GraphSolver-17fd26db.css +68 -0
  31. flowfile/web/static/assets/GroupBy-ab1ea74b.css +51 -0
  32. flowfile/web/static/assets/GroupBy-f2772e9f.js +413 -0
  33. flowfile/web/static/assets/Join-41c0f331.css +109 -0
  34. flowfile/web/static/assets/Join-bc3e1cf7.js +247 -0
  35. flowfile/web/static/assets/ManualInput-03aa0245.js +391 -0
  36. flowfile/web/static/assets/ManualInput-ac7b9972.css +84 -0
  37. flowfile/web/static/assets/Output-48f81019.css +2642 -0
  38. flowfile/web/static/assets/Output-5b35eee8.js +536 -0
  39. flowfile/web/static/assets/Pivot-7164087c.js +408 -0
  40. flowfile/web/static/assets/Pivot-f415e85f.css +35 -0
  41. flowfile/web/static/assets/PolarsCode-3abf6507.js +2863 -0
  42. flowfile/web/static/assets/PolarsCode-650322d1.css +35 -0
  43. flowfile/web/static/assets/PopOver-b37ff9be.js +577 -0
  44. flowfile/web/static/assets/PopOver-bccfde04.css +32 -0
  45. flowfile/web/static/assets/Read-65966a3e.js +701 -0
  46. flowfile/web/static/assets/Read-80dc1675.css +197 -0
  47. flowfile/web/static/assets/RecordCount-c66c6d6d.js +121 -0
  48. flowfile/web/static/assets/RecordId-826dc095.js +339 -0
  49. flowfile/web/static/assets/Sample-4ed555c8.js +184 -0
  50. flowfile/web/static/assets/SecretManager-eac1e97d.js +382 -0
  51. flowfile/web/static/assets/Select-085f05cc.js +231 -0
  52. flowfile/web/static/assets/SettingsSection-1f5e79c1.js +87 -0
  53. flowfile/web/static/assets/SettingsSection-9c836ecc.css +47 -0
  54. flowfile/web/static/assets/Sort-3e6cb414.js +309 -0
  55. flowfile/web/static/assets/Sort-7ccfa0fe.css +51 -0
  56. flowfile/web/static/assets/TextToRows-606349bc.js +307 -0
  57. flowfile/web/static/assets/TextToRows-c92d1ec2.css +48 -0
  58. flowfile/web/static/assets/UnavailableFields-5edd5322.css +49 -0
  59. flowfile/web/static/assets/UnavailableFields-b41976ed.js +36 -0
  60. flowfile/web/static/assets/Union-8d9ac7f9.css +30 -0
  61. flowfile/web/static/assets/Union-fca91665.js +145 -0
  62. flowfile/web/static/assets/Unique-a59f830e.js +273 -0
  63. flowfile/web/static/assets/Unique-b5615727.css +51 -0
  64. flowfile/web/static/assets/Unpivot-246e9bbd.css +77 -0
  65. flowfile/web/static/assets/Unpivot-c3815565.js +441 -0
  66. flowfile/web/static/assets/airbyte-292aa232.png +0 -0
  67. flowfile/web/static/assets/api-22b338bd.js +60 -0
  68. flowfile/web/static/assets/cross_join-d30c0290.png +0 -0
  69. flowfile/web/static/assets/database_reader-ce1e55f3.svg +24 -0
  70. flowfile/web/static/assets/database_writer-b4ad0753.svg +23 -0
  71. flowfile/web/static/assets/designer-2394122a.css +10697 -0
  72. flowfile/web/static/assets/designer-e5bbe26f.js +69712 -0
  73. flowfile/web/static/assets/documentation-08045cf2.js +33 -0
  74. flowfile/web/static/assets/documentation-12216a74.css +50 -0
  75. flowfile/web/static/assets/dropDown-35135ba8.css +143 -0
  76. flowfile/web/static/assets/dropDown-5e7e9a5a.js +319 -0
  77. flowfile/web/static/assets/dropDownGeneric-50a91b99.js +72 -0
  78. flowfile/web/static/assets/dropDownGeneric-895680d6.css +10 -0
  79. flowfile/web/static/assets/element-icons-9c88a535.woff +0 -0
  80. flowfile/web/static/assets/element-icons-de5eb258.ttf +0 -0
  81. flowfile/web/static/assets/explore_data-8a0a2861.png +0 -0
  82. flowfile/web/static/assets/fa-brands-400-808443ae.ttf +0 -0
  83. flowfile/web/static/assets/fa-brands-400-d7236a19.woff2 +0 -0
  84. flowfile/web/static/assets/fa-regular-400-54cf6086.ttf +0 -0
  85. flowfile/web/static/assets/fa-regular-400-e3456d12.woff2 +0 -0
  86. flowfile/web/static/assets/fa-solid-900-aa759986.woff2 +0 -0
  87. flowfile/web/static/assets/fa-solid-900-d2f05935.ttf +0 -0
  88. flowfile/web/static/assets/fa-v4compatibility-0ce9033c.woff2 +0 -0
  89. flowfile/web/static/assets/fa-v4compatibility-30f6abf6.ttf +0 -0
  90. flowfile/web/static/assets/filter-d7708bda.png +0 -0
  91. flowfile/web/static/assets/formula-eeeb1611.png +0 -0
  92. flowfile/web/static/assets/fullEditor-178376bb.css +256 -0
  93. flowfile/web/static/assets/fullEditor-705c6ccb.js +630 -0
  94. flowfile/web/static/assets/fuzzy_match-40c161b2.png +0 -0
  95. flowfile/web/static/assets/genericNodeSettings-65587f20.js +137 -0
  96. flowfile/web/static/assets/genericNodeSettings-924759c7.css +46 -0
  97. flowfile/web/static/assets/graph_solver-8b7888b8.png +0 -0
  98. flowfile/web/static/assets/group_by-80561fc3.png +0 -0
  99. flowfile/web/static/assets/index-552863fd.js +58652 -0
  100. flowfile/web/static/assets/index-681a3ed0.css +8843 -0
  101. flowfile/web/static/assets/input_data-ab2eb678.png +0 -0
  102. flowfile/web/static/assets/join-349043ae.png +0 -0
  103. flowfile/web/static/assets/manual_input-ae98f31d.png +0 -0
  104. flowfile/web/static/assets/nodeTitle-cf9bae3c.js +227 -0
  105. flowfile/web/static/assets/nodeTitle-f4b12bcb.css +134 -0
  106. flowfile/web/static/assets/old_join-5d0eb604.png +0 -0
  107. flowfile/web/static/assets/output-06ec0371.png +0 -0
  108. flowfile/web/static/assets/pivot-9660df51.png +0 -0
  109. flowfile/web/static/assets/polars_code-05ce5dc6.png +0 -0
  110. flowfile/web/static/assets/record_count-dab44eb5.png +0 -0
  111. flowfile/web/static/assets/record_id-0b15856b.png +0 -0
  112. flowfile/web/static/assets/sample-693a88b5.png +0 -0
  113. flowfile/web/static/assets/secretApi-3ad510e1.js +46 -0
  114. flowfile/web/static/assets/select-b0d0437a.png +0 -0
  115. flowfile/web/static/assets/selectDynamic-b062bc9b.css +107 -0
  116. flowfile/web/static/assets/selectDynamic-bd644891.js +302 -0
  117. flowfile/web/static/assets/sort-2aa579f0.png +0 -0
  118. flowfile/web/static/assets/summarize-2a099231.png +0 -0
  119. flowfile/web/static/assets/text_to_rows-859b29ea.png +0 -0
  120. flowfile/web/static/assets/union-2d8609f4.png +0 -0
  121. flowfile/web/static/assets/unique-1958b98a.png +0 -0
  122. flowfile/web/static/assets/unpivot-d3cb4b5b.png +0 -0
  123. flowfile/web/static/assets/view-7a0f0be1.png +0 -0
  124. flowfile/web/static/assets/vue-codemirror.esm-dd17b478.js +22281 -0
  125. flowfile/web/static/assets/vue-content-loader.es-6b36f05e.js +210 -0
  126. flowfile/web/static/flowfile.svg +47 -0
  127. flowfile/web/static/icons/flowfile.png +0 -0
  128. flowfile/web/static/images/airbyte.png +0 -0
  129. flowfile/web/static/images/flowfile.svg +47 -0
  130. flowfile/web/static/images/google.svg +1 -0
  131. flowfile/web/static/images/sheets.png +0 -0
  132. flowfile/web/static/index.html +22 -0
  133. flowfile/web/static/vite.svg +1 -0
  134. flowfile/web/static/vue.svg +1 -0
  135. flowfile-0.3.0.1.dist-info/METADATA +219 -0
  136. {flowfile-0.2.2.dist-info → flowfile-0.3.0.1.dist-info}/RECORD +147 -16
  137. {flowfile-0.2.2.dist-info → flowfile-0.3.0.1.dist-info}/entry_points.txt +1 -1
  138. flowfile_core/configs/settings.py +7 -32
  139. flowfile_core/flowfile/FlowfileFlow.py +4 -2
  140. flowfile_core/flowfile/analytics/analytics_processor.py +1 -1
  141. flowfile_core/main.py +4 -1
  142. flowfile_core/schemas/input_schema.py +1 -8
  143. flowfile_frame/__init__.py +1 -2
  144. flowfile_frame/flow_frame.py +6 -6
  145. flowfile_frame/utils.py +1 -140
  146. flowfile-0.2.2.dist-info/METADATA +0 -225
  147. flowfile_frame/__main__.py +0 -12
  148. {flowfile-0.2.2.dist-info → flowfile-0.3.0.1.dist-info}/LICENSE +0 -0
  149. {flowfile-0.2.2.dist-info → flowfile-0.3.0.1.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,219 @@
1
+ Metadata-Version: 2.3
2
+ Name: Flowfile
3
+ Version: 0.3.0.1
4
+ Summary: Project combining flowfile core (backend) and flowfile_worker (compute offloader) and flowfile_frame (api)
5
+ Author: Edward van Eechoud
6
+ Author-email: evaneechoud@gmail.com
7
+ Requires-Python: >=3.10,<3.13
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.10
10
+ Classifier: Programming Language :: Python :: 3.11
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Requires-Dist: XlsxWriter (>=3.2.0,<3.3.0)
13
+ Requires-Dist: aiofiles (>=24.1.0,<25.0.0)
14
+ Requires-Dist: airbyte-cdk (==6.47.2)
15
+ Requires-Dist: bcrypt (>=4.3.0,<5.0.0)
16
+ Requires-Dist: connectorx (>=0.4.2,<0.5.0)
17
+ Requires-Dist: databases (>=0.9.0,<0.10.0)
18
+ Requires-Dist: faker (>=23.1.0,<23.2.0)
19
+ Requires-Dist: fastapi (>=0.115.2,<0.116.0)
20
+ Requires-Dist: fastexcel (>=0.12.0,<0.13.0)
21
+ Requires-Dist: google-api-python-client (>=2.149.0,<2.150.0)
22
+ Requires-Dist: gspread (>=6.1.3,<6.2.0)
23
+ Requires-Dist: loky (>=3.4.1,<3.5.0)
24
+ Requires-Dist: methodtools (>=0.4.7,<0.5.0)
25
+ Requires-Dist: openpyxl (>=3.1.2,<3.2.0)
26
+ Requires-Dist: passlib (>=1.7.4,<1.8.0)
27
+ Requires-Dist: pendulum (==2.1.2) ; python_version < "3.12"
28
+ Requires-Dist: polars (>1.8.2,<=1.25.2)
29
+ Requires-Dist: polars-distance (>=0.4.3,<0.5.0)
30
+ Requires-Dist: polars-ds (>=0.6.0)
31
+ Requires-Dist: polars-expr-transformer (>0.4.7.0)
32
+ Requires-Dist: polars-grouper (>=0.3.0,<0.4.0)
33
+ Requires-Dist: polars_simed (>=0.3.4,<0.4.0)
34
+ Requires-Dist: pyairbyte-flowfile (==0.20.2)
35
+ Requires-Dist: pyarrow (>=18.0.0,<19.0.0)
36
+ Requires-Dist: pydantic (>=2.9.2,<2.10.0)
37
+ Requires-Dist: pyinstaller (>=6.11.0,<7.0.0)
38
+ Requires-Dist: pytest (>=8.3.4,<9.0.0)
39
+ Requires-Dist: python-jose (>=3.4.0,<4.0.0)
40
+ Requires-Dist: python-multipart (>=0.0.12,<0.1.0)
41
+ Requires-Dist: uvicorn (>=0.32.0,<0.33.0)
42
+ Description-Content-Type: text/markdown
43
+
44
+ <h1 align="center">
45
+ <img src="https://raw.githubusercontent.com/Edwardvaneechoud/Flowfile/main/.github/images/logo.png" alt="Flowfile Logo" width="100">
46
+ <br>
47
+ Flowfile
48
+ </h1>
49
+
50
+ <p align="center">
51
+ <b>Main Repository</b>: <a href="https://github.com/Edwardvaneechoud/Flowfile">Edwardvaneechoud/Flowfile</a><br>
52
+ <b>Documentation</b>:
53
+ <a href="https://edwardvaneechoud.github.io/Flowfile/">Website</a> -
54
+ <a href="https://github.com/Edwardvaneechoud/Flowfile/blob/main/flowfile_core/README.md">Core</a> -
55
+ <a href="https://github.com/Edwardvaneechoud/Flowfile/blob/main/flowfile_worker/README.md">Worker</a> -
56
+ <a href="https://github.com/Edwardvaneechoud/Flowfile/blob/main/flowfile_frontend/README.md">Frontend</a> -
57
+ <a href="https://dev.to/edwardvaneechoud/building-flowfile-architecting-a-visual-etl-tool-with-polars-576c">Technical Architecture</a>
58
+ </p>
59
+
60
+ <p>
61
+ Flowfile is a visual ETL tool and Python library suite that combines drag-and-drop workflow building with the speed of Polars dataframes. Build data pipelines visually, transform data using powerful nodes, or define data flows programmatically with Python and analyze results - all with high-performance data processing.
62
+ </p>
63
+
64
+ <div align="center">
65
+ <img src="https://raw.githubusercontent.com/Edwardvaneechoud/Flowfile/main/.github/images/group_by_screenshot.png" alt="Flowfile Interface" width="800"/>
66
+ </div>
67
+
68
+ ## ⚡ Technical Design
69
+
70
+ The `Flowfile` PyPI package provides the backend services and the `flowfile_frame` Python library:
71
+
72
+ - **Core (`flowfile_core`)** (FastAPI): The main ETL engine using Polars for high-performance data transformations. Typically runs on port `:63578`.
73
+ - **Worker (`flowfile_worker`)** (FastAPI): Handles computation-intensive tasks and caching of data operations, supporting the Core service. Typically runs on port `:63579`.
74
+ - **FlowFrame API (`flowfile_frame`)**: A Python library with a Polars-like API for defining data manipulation pipelines programmatically, which also generates an underlying ETL graph compatible with the Flowfile ecosystem.
75
+
76
+ Each flow is represented as a directed acyclic graph (DAG), where nodes represent data operations and edges represent data flow between operations.
77
+
78
+ For a deeper dive into the technical architecture, check out [this article](https://dev.to/edwardvaneechoud/building-flowfile-architecting-a-visual-etl-tool-with-polars-576c) on how Flowfile leverages Polars for efficient data processing.
79
+
80
+ ## ✨ Introducing FlowFile Frame - A Polars-Like API for ETL
81
+
82
+ FlowFile Frame is a Python library that provides a familiar Polars-like API for data manipulation, while simultaneously building an ETL (Extract, Transform, Load) graph under the hood. This allows you to:
83
+
84
+ 1. Write data transformation code using a simple, Pandas/Polars-like API
85
+ 2. Automatically generate executable ETL workflows compatible with the Flowfile ecosystem
86
+ 3. Visualize, save, and share your data pipelines
87
+ 4. Get the performance benefits of Polars with the traceability of ETL graphs
88
+
89
+ ### FlowFrame Quick Start
90
+
91
+ ```python
92
+ import flowfile_frame as ff
93
+ from flowfile_frame.utils import open_graph_in_editor
94
+
95
+ # Create a complex data pipeline
96
+ df = ff.from_dict({
97
+ "id": [1, 2, 3, 4, 5],
98
+ "category": ["A", "B", "A", "C", "B"],
99
+ "value": [100, 200, 150, 300, 250]
100
+ })
101
+
102
+ open_graph_in_editor(df.flow_graph)
103
+
104
+ ```
105
+
106
+ ### Key FlowFrame Features
107
+
108
+ - **Familiar API**: Based on Polars, making it easy to learn if you know Pandas or Polars
109
+ - **ETL Graph Generation**: Automatically builds a directed acyclic graph of your data operations
110
+ - **Lazy Evaluation**: Operations are not executed until `collect()` or a write operation
111
+ - **Interoperability**: Saved `.flowfile` graphs can be opened in the visual Flowfile Designer
112
+ - **High Performance**: Leverages Polars for fast data processing
113
+ - **Reproducible**: Save and share your data transformation workflows
114
+
115
+ ### Common FlowFrame Operations
116
+
117
+ ```python
118
+ import flowfile_frame as ff
119
+ from flowfile_frame import col, when
120
+
121
+ # Create from dictionary
122
+ df = ff.from_dict({
123
+ "id": [1, 2, 3],
124
+ "name": ["Alice", "Bob", "Charlie"],
125
+ "age": [25, 35, 28]
126
+ })
127
+
128
+ flow_graph = df.flow_graph
129
+ # Reading data
130
+ # df_csv = ff.read_csv("data.csv")
131
+ # df_parquet = ff.read_parquet("data.parquet")
132
+
133
+ # Filtering
134
+ adults = df.filter(col("age") >= 30)
135
+
136
+ # Select and transform
137
+ result = df.select(
138
+ col("name"),
139
+ (col("age") * 2).alias("double_age")
140
+ )
141
+
142
+ # Add new columns
143
+ df_with_cols = df.with_columns([
144
+ (col("age") + 10).alias("future_age"),
145
+ when(col("age") >= 30).then(ff.lit("Senior")).otherwise(ff.lit("Junior")).alias("status")]
146
+ )
147
+
148
+ # Group by and aggregate
149
+ df_sales = ff.from_dict({
150
+ "region": ["North", "South", "North", "South"],
151
+ "sales": [100, 200, 150, 300]
152
+ })
153
+ sales_by_region = df_sales.group_by("region").agg([
154
+ col("sales").sum().alias("total_sales"),
155
+ col("sales").mean().alias("avg_sales")
156
+ ])
157
+
158
+ # Joins
159
+ customers = ff.from_dict({"id": [1, 2, 3], "name": ["Alice", "Bob", "Charlie"]}, flow_graph=flow_graph)
160
+ orders = ff.from_dict({"id": [101, 102], "customer_id": [1, 2], "amount": [100, 200]}, flow_graph=flow_graph)
161
+ joined = customers.join(orders, left_on="id", right_on="customer_id")
162
+
163
+ # Save and visualize ETL graph
164
+
165
+ result.save_graph("my_pipeline.flowfile")
166
+ # open_graph_in_editor(result.flow_graph, "my_pipeline.flowfile") # Opens in Designer UI if installed
167
+ ```
168
+
169
+ For more detailed information on all available operations, including pivoting, window functions, complex workflows, and more, please refer to the [FlowFrame documentation](https://github.com/Edwardvaneechoud/Flowfile/blob/main/flowfile_frame/README.md).
170
+
171
+ ## 🔥 Example Use Cases
172
+
173
+ Flowfile is great for:
174
+
175
+ - **Data Cleaning & Transformation**
176
+ - Complex joins (fuzzy matching)
177
+ - Text-to-rows transformations
178
+ - Advanced filtering and grouping
179
+ - Custom formulas and expressions
180
+ - Filter data based on conditions
181
+
182
+ - **Performance**
183
+ - Built to scale out of core
184
+ - Using Polars for data processing
185
+
186
+ - **Data Integration**
187
+ - Standardize data formats
188
+ - Handle messy Excel files
189
+
190
+ - **ETL Operations**
191
+ - Data quality checks
192
+
193
+ (For more visual examples of these use cases, please see our [main GitHub repository](https://github.com/Edwardvaneechoud/Flowfile#-example-use-cases)).
194
+
195
+ ## 🚀 Getting Started
196
+
197
+ ### Installing the Flowfile Python Package
198
+
199
+ This package provides the `flowfile_core` and `flowfile_worker` backend services, and the `flowfile_frame` library.
200
+
201
+ ```bash
202
+ pip install Flowfile
203
+ ```
204
+
205
+ Once installed, you can use `flowfile_frame` as a library in your Python scripts (see Quick Start above).
206
+
207
+ ### Full Application with Visual Designer
208
+
209
+ For the complete visual ETL experience with the Designer UI, please see the [installation instructions in the main repository](https://github.com/Edwardvaneechoud/Flowfile#-getting-started).
210
+
211
+ Available options include:
212
+ - Desktop application (recommended for most users)
213
+ - Docker setup (backend services + web frontend)
214
+ - Manual setup for development
215
+
216
+ ## 📋 Development Roadmap
217
+
218
+ For the latest development roadmap and TODO list, please refer to the [main repository](https://github.com/Edwardvaneechoud/Flowfile#-todo).
219
+
@@ -1,8 +1,140 @@
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=jERp50eC0SrT-lsuMJpHaFoN6NIEzWYkqLvZF0vZ6ls,2299
5
- flowfile/__main__.py,sha256=X8ItB1LEC1ZXw_tvegu7sagb2CwqUeWSwWybbO1HtUs,630
4
+ flowfile/__init__.py,sha256=B1vnUboOki3pP3BAmoQ0j62nEiB51X9kc9N8Qu7bgcg,2419
5
+ flowfile/__main__.py,sha256=ll0XLrBo7pVEioRjvqt9ihBzfeY49h8Hxc3_9LcnkgU,2655
6
+ flowfile/api.py,sha256=bFCIH_6rEbPSTdZkbXrxnAtlBOmSA7yj0pl4f3agYvY,14252
7
+ flowfile/web/__init__.py,sha256=OrXOaS1ud83aMyEWrehXfXuZ-LGnnavSLPVtiE99K8c,5494
8
+ flowfile/web/static/assets/AirbyteReader-1ac35765.css,sha256=GsNXZRBzBqcgSHWYHFfpQjYnQ1G90hCaWgThLCG80jI,6260
9
+ flowfile/web/static/assets/AirbyteReader-cb0c1d4a.js,sha256=PtikU6aU5vN4K9VlsLZb15GWnxM-t7fd45DqqOlDeRg,38759
10
+ flowfile/web/static/assets/CrossJoin-41efa4cb.css,sha256=Qe-ky2QI7rYfXMKV-bCB5HP0OJ6uBU74g9EEmcpXTlc,2838
11
+ flowfile/web/static/assets/CrossJoin-a514fa59.js,sha256=Su9IvHLkULPVmaiXiBgb6Sb0jJJPqy02lPVWN1AzK5I,5893
12
+ flowfile/web/static/assets/DatabaseConnectionSettings-0c04b2e5.css,sha256=DASy5awRYSMypTwMX6ksZtrVQhtp1ViT0Jowclr_uLA,1975
13
+ flowfile/web/static/assets/DatabaseConnectionSettings-f2cecf33.js,sha256=1E2HIDzEhtx4CokjnZPTNDQqB2GTSvgSX2m0yoxwjXU,6563
14
+ flowfile/web/static/assets/DatabaseManager-30fa27e5.css,sha256=MPon5eN71wE49i0Ecfy9LQoGX75ArlRNOGWVb28xGlI,1242
15
+ flowfile/web/static/assets/DatabaseManager-83ee3c98.js,sha256=EGIxYly4XerF-wsg49s83gcLekh8ZEHzx9c6ufup3Do,21099
16
+ flowfile/web/static/assets/DatabaseReader-dc0c6881.js,sha256=yTCfWsqE422tAnWu6K1_Q8AWWnWYby31z9gfZyLiNpM,18460
17
+ flowfile/web/static/assets/DatabaseReader-f50c6558.css,sha256=9QxlWNkGS95WJhX7_bD4CrN3BcammfwfMl6HkbdOTEE,3741
18
+ flowfile/web/static/assets/DatabaseWriter-2f570e53.css,sha256=L1cOU0rF-auXKMDQEYPI8F1SCgfjW64rTSEFSNfanlw,2453
19
+ flowfile/web/static/assets/DatabaseWriter-5afe9f8d.js,sha256=YZkE9ZEMkxfypifuKv1P-_NZKsljN3FAFqdamm4_12E,13868
20
+ flowfile/web/static/assets/ExploreData-5bdae813.css,sha256=W9roE_zrPPgD0dajRpedNal0_7jod1WLMiMgIuMt1qM,1095
21
+ flowfile/web/static/assets/ExploreData-c7ee19cf.js,sha256=QYhkXT6NjhBQhPWG9c46-jUUyvcS0EHlZw0bSeNssSY,5479135
22
+ flowfile/web/static/assets/ExternalSource-17b23a01.js,sha256=tVNEzlFMpq5a9a1P8DQ-bHMBHIBdF4eeLzoBOkINyb0,8692
23
+ flowfile/web/static/assets/ExternalSource-e37b6275.css,sha256=43tidVv7Ch_x09-4F3WHgzkLNuQfT_xFBh7zi75Fft8,2316
24
+ flowfile/web/static/assets/Filter-90856b4f.js,sha256=iZQ0xO-4Gl_UcTnwjFFNiCRfs5ecR-dAkj-xjytxl0I,10459
25
+ flowfile/web/static/assets/Filter-a9d08ba1.css,sha256=qdCLoUHadYgx2Ip748TA_O6XyCUTEcE8QuLmJvruWEY,781
26
+ flowfile/web/static/assets/Formula-38b71e9e.js,sha256=m6koXZ8TP3duikymzUZQ5mKhIrKjd5Ojb3fFZMa2OHc,7677
27
+ flowfile/web/static/assets/Formula-d60a74f4.css,sha256=1gp09P8SicTtA9JXEPyo-P-wP0hIMxEcN3PYTRzx0Kg,510
28
+ flowfile/web/static/assets/FuzzyMatch-6857de82.css,sha256=aFfegjmKGaavTjs7g4sPI3Cyf3eu4y0flFzODZANyJU,5448
29
+ flowfile/web/static/assets/FuzzyMatch-d0f1fe81.js,sha256=Ty4zXC2HUh70nHuyq0DPJlrOVsZ00AuhUETxkRyDCNQ,20012
30
+ flowfile/web/static/assets/GoogleSheet-854294a4.js,sha256=byW0Zbu3NOrQez25Qhwr6pXDlBWYMydUwSQoGi_Dh0w,100539
31
+ flowfile/web/static/assets/GoogleSheet-92084da7.css,sha256=kghNp_B_exF0dVG5S6D6tAMSpNpHUQnAcXtdYLbL9I8,5179
32
+ flowfile/web/static/assets/GraphSolver-0c86bbc6.js,sha256=0C0xm3jiC0v5EITll2HAfT8E14RonHMf41i06rXoEcI,15431
33
+ flowfile/web/static/assets/GraphSolver-17fd26db.css,sha256=F_0m2_7rHKQ5jteIjmZ31NyjIXZCI0e_oJ_c8fmeH8s,1413
34
+ flowfile/web/static/assets/GroupBy-ab1ea74b.css,sha256=qx6nS0najhKOHM_DQLdszyydztKIfbnfS1Q8MMaozgo,1272
35
+ flowfile/web/static/assets/GroupBy-f2772e9f.js,sha256=TEihT5odRyeaU1548dA-kbhLfPdOrWVE6Dbdrrok_Oo,17264
36
+ flowfile/web/static/assets/Join-41c0f331.css,sha256=QcDzMadH3XVYV9CEP4gwB33R2iXM5syzgMCts1fCkrA,2351
37
+ flowfile/web/static/assets/Join-bc3e1cf7.js,sha256=L75OuXUSdl4aogES-h8ja3tLJH7Lv-LL7yTAcb3C7S4,11140
38
+ flowfile/web/static/assets/ManualInput-03aa0245.js,sha256=QrAWk_RU5LYTPlKoXTMtT5p6EKKN1RTI-HsPWOTI68Y,14958
39
+ flowfile/web/static/assets/ManualInput-ac7b9972.css,sha256=rHuZcrtSxu_X4lmWhjH2nou_YS4AmwiNJCNKTPJ8p14,1807
40
+ flowfile/web/static/assets/Output-48f81019.css,sha256=SPgQGb_nR9q6TUEG5eICBdfB9PBvUmWtJRM3iv-BLYo,352098
41
+ flowfile/web/static/assets/Output-5b35eee8.js,sha256=rtJR7gOrMm8zdz5Ne8Ghn9qhyAUUC6MJEYfj4vwWYrg,20921
42
+ flowfile/web/static/assets/Pivot-7164087c.js,sha256=-1f-fx5qxQEJahu2zVGyV6Cr43pCbll9DvoJ3oXaa-s,16609
43
+ flowfile/web/static/assets/Pivot-f415e85f.css,sha256=9BXoXzqyFxLjSN0APdMk3tOX4hYp5Rm6278sOd5FzLQ,678
44
+ flowfile/web/static/assets/PolarsCode-3abf6507.js,sha256=KvgqaoO_A1EYg5SdnSQXX40n8WmUdZuhZ4R8usH5pcs,124229
45
+ flowfile/web/static/assets/PolarsCode-650322d1.css,sha256=ZQMi0XF5KAv0-3WUVI-51K63gTMJifbhWC8kYtPkBbs,555
46
+ flowfile/web/static/assets/PopOver-b37ff9be.js,sha256=Aywd9bupPEaHsPtorBz6_Zblmh12C-VaG4McQEr5xz8,18497
47
+ flowfile/web/static/assets/PopOver-bccfde04.css,sha256=vM_eBMuqLyBd_Y5bLjLKifKtvrpD8l5r5ZNjnjZUZBo,756
48
+ flowfile/web/static/assets/Read-65966a3e.js,sha256=0-w1SY-IlWdULo513OwfBXdQMtgYF5KBaxuSn-4nD-4,28372
49
+ flowfile/web/static/assets/Read-80dc1675.css,sha256=gNwWda__zBwSDUVxt7oKGiKB-z-tj0H0ROQthMvDNhU,3975
50
+ flowfile/web/static/assets/RecordCount-c66c6d6d.js,sha256=gDYE7DcZV7QpS7xeVlESoRJRU8zzPxmxhooyEvfrvJI,4220
51
+ flowfile/web/static/assets/RecordId-826dc095.js,sha256=9fk0AMZkfx7wYIzjwqX0icf6aZOl-SKuKDlV8dHTldE,14757
52
+ flowfile/web/static/assets/Sample-4ed555c8.js,sha256=uKQoPGEMf9Ior0-LCWJqtvOnf4r4YOUsZP1wte22ua0,7006
53
+ flowfile/web/static/assets/SecretManager-eac1e97d.js,sha256=wQ5QsU2DW1edcuzru35VmRduNV-eBjcH765oTqORojY,16198
54
+ flowfile/web/static/assets/Select-085f05cc.js,sha256=wxI0uPVP6PlFim1js6LcW1R4B4qePj-WFqNH2TMVSWY,8520
55
+ flowfile/web/static/assets/SettingsSection-1f5e79c1.js,sha256=A3ogOBTPKG4dQMUsuVseMndFri-3S-15S8FSTD5K5tU,3449
56
+ flowfile/web/static/assets/SettingsSection-9c836ecc.css,sha256=nINuzFyCzLJoIEU5l-IQxPvP6eRRfdEk2mAH7gSfLFE,988
57
+ flowfile/web/static/assets/Sort-3e6cb414.js,sha256=BvB671g3YIembpI-6gt4ZWYpqqHIr-XK1e7UFRpJgkQ,13651
58
+ flowfile/web/static/assets/Sort-7ccfa0fe.css,sha256=fM-g_iik339gSkOk-7C0VH3sbcSvBAZ05wzOYa13izI,1272
59
+ flowfile/web/static/assets/TextToRows-606349bc.js,sha256=fX5HZYz93ywuFWJ4GfnsSuWI5cmbG_0PpAm8FYYHbVc,13574
60
+ flowfile/web/static/assets/TextToRows-c92d1ec2.css,sha256=yS0ewva76G5zLWBuM0pBMht8uLG_deq759uuVMJM1fU,839
61
+ flowfile/web/static/assets/UnavailableFields-5edd5322.css,sha256=Xt1TInpopOWG_eHq77x7tpg9HJ4UEds_OcnuyPsruNc,1146
62
+ flowfile/web/static/assets/UnavailableFields-b41976ed.js,sha256=M95DsOJxF87Q7bGBTPYwj5VpsADJKwy4PwERCRPQqI4,1234
63
+ flowfile/web/static/assets/Union-8d9ac7f9.css,sha256=jZrH-YPCY2PeNyL6pgKMepdiItH9RJErX8PbgdfBJrc,605
64
+ flowfile/web/static/assets/Union-fca91665.js,sha256=4VUM5HBbMqd_WtLIOE4TT4YRxwa73HhSZMGmRb0DKgc,4976
65
+ flowfile/web/static/assets/Unique-a59f830e.js,sha256=eTOguu8mBlvoj0NyGClStkUPmqNmmvP1MrhPcmVUcXM,10086
66
+ flowfile/web/static/assets/Unique-b5615727.css,sha256=tWFXJydKrd1MCKOOWv4tCWiTqi46PdEVoIIqBVNIVd4,1272
67
+ flowfile/web/static/assets/Unpivot-246e9bbd.css,sha256=JG6bvXhm4hOKJTfiAS0bEKbA7L3KDZvIaMQUef9fkWI,1593
68
+ flowfile/web/static/assets/Unpivot-c3815565.js,sha256=8_3PiLC87w3Q9HRqSdZwUJlhsOjr_feWtVg5a7jmovs,18403
69
+ flowfile/web/static/assets/airbyte-292aa232.png,sha256=KSqiMiLlZ9SSDOuaN7TXiVatwlEHiWT1Z1FdcV9-7wE,10456
70
+ flowfile/web/static/assets/api-22b338bd.js,sha256=7ilBVDBld5_sJCeIgSd8pU8jpfzxo1oSTKMSDPtVKmo,2174
71
+ flowfile/web/static/assets/cross_join-d30c0290.png,sha256=0wwCkKGjCkcIJhCO1ZTy8ZKezANsYPaeYWf9w_LBKSQ,19192
72
+ flowfile/web/static/assets/database_reader-ce1e55f3.svg,sha256=zh5V87BPAEOyMKkOQz0LSU_hsgrgodKeEKgsZrTs-Uk,1419
73
+ flowfile/web/static/assets/database_writer-b4ad0753.svg,sha256=tK0HU1fxo8ksAySP8hud8S0txXfVg6iqqta5v4ltF-k,1259
74
+ flowfile/web/static/assets/designer-2394122a.css,sha256=I5QSKjopgNBvZJ5Tm6ZZhmlo0hjXMNyTgFqzA1DY_q4,316302
75
+ flowfile/web/static/assets/designer-e5bbe26f.js,sha256=RAh5uG13bSNfRTaMF4iEBZiyRJnVBxImjCD1-YmdpZs,2503276
76
+ flowfile/web/static/assets/documentation-08045cf2.js,sha256=phprlRhhu-t6JUBUMDhatG_N40OxRtW2mlKbmULUFfI,1198
77
+ flowfile/web/static/assets/documentation-12216a74.css,sha256=EiFqdFDNczJt_IeP7KJyv7MGCvYRiSuSaUcSs6MHWpE,1200
78
+ flowfile/web/static/assets/dropDown-35135ba8.css,sha256=NRNbqLG5Ckh7uE1m5Z038kTCFnYcFUCD4iTUU1i6VPU,3176
79
+ flowfile/web/static/assets/dropDown-5e7e9a5a.js,sha256=WoC1zvJi4nnzUpBOGzfSiAojlf1L3jZne9X5Pq2hl4I,11474
80
+ flowfile/web/static/assets/dropDownGeneric-50a91b99.js,sha256=hcsDvVluns9fQVCSjKFL-_08eczXZ7BChvYh53-hZ3s,2336
81
+ flowfile/web/static/assets/dropDownGeneric-895680d6.css,sha256=iVaA1vV7V9juSX7E_WrtTq0xFVWTW-78-b3YVbxlTIk,161
82
+ flowfile/web/static/assets/element-icons-9c88a535.woff,sha256=nIilNdx2T_GKI3IC0Z-dYpdmN8jnoyTPaeK6LUBm9us,24820
83
+ flowfile/web/static/assets/element-icons-de5eb258.ttf,sha256=3l6yWG-kOvjHWaPTe87HTczNsjLCGPpSA_P5FpV3Y-U,50372
84
+ flowfile/web/static/assets/explore_data-8a0a2861.png,sha256=igooYexoyuVyai_ukUYC7QlaR9JRWFQY_6ey8W01vDw,14720
85
+ flowfile/web/static/assets/fa-brands-400-808443ae.ttf,sha256=gIRDrmyCBDla3YVD2oqQpguTdvsPh-2OjqN9EJWW2AU,210792
86
+ flowfile/web/static/assets/fa-brands-400-d7236a19.woff2,sha256=1yNqGb8jy7ICcoDo9R3JnWxFl2ou1g3nM4KwNLGKK2g,118684
87
+ flowfile/web/static/assets/fa-regular-400-54cf6086.ttf,sha256=VM9ghve7IfnQcq1JShm0aB-lFt0KFM7lLaAdNlGpE6M,68064
88
+ flowfile/web/static/assets/fa-regular-400-e3456d12.woff2,sha256=40VtEoO511M3p3Pf0Ue_kI_QLAG0v0hXbYYDppsTy-U,25472
89
+ flowfile/web/static/assets/fa-solid-900-aa759986.woff2,sha256=qnWZhiOjkeYcaQF5Ss6DLj7N0oi1bWCPIb6gQRrMC44,158220
90
+ flowfile/web/static/assets/fa-solid-900-d2f05935.ttf,sha256=0vBZNUCw4zum3iVaVPJy1GbjEUSAaVa-qM_b9-3_yb0,426112
91
+ flowfile/web/static/assets/fa-v4compatibility-0ce9033c.woff2,sha256=DOkDPGnccU9fRe-b8X1V5MRrzfrWeZpOkrOOd4G_hr0,4796
92
+ flowfile/web/static/assets/fa-v4compatibility-30f6abf6.ttf,sha256=MPar9rqkJYJYKHk9bfrR-2N2XQ5auqevb-r7m_zs5aA,10836
93
+ flowfile/web/static/assets/filter-d7708bda.png,sha256=13CL2k0PIl1uYYMMhH86rwJrov4XRgR6sfV4ZRhnK3I,15838
94
+ flowfile/web/static/assets/formula-eeeb1611.png,sha256=7usWEStTOxFA0T8k7FXGXg5RluCJDLsqUcp048xjD2M,19295
95
+ flowfile/web/static/assets/fullEditor-178376bb.css,sha256=F4N2uyLmmmAoyKAfgHvBZ23H-kH-tbtnJ1JLVwfFz50,5965
96
+ flowfile/web/static/assets/fullEditor-705c6ccb.js,sha256=hVD4wUjNiOwLEDudCjKOKohBL8X18PaBXoELXQC8_uI,24451
97
+ flowfile/web/static/assets/fuzzy_match-40c161b2.png,sha256=QMFhsk1rZn6x2Z7aMwVoMVIehdgkmhFrrck9Gks3-_g,13865
98
+ flowfile/web/static/assets/genericNodeSettings-65587f20.js,sha256=w_bk4yzuER-p0_m2dr3PUVUQjoZ_6QQlZUFrFvLP_ng,6240
99
+ flowfile/web/static/assets/genericNodeSettings-924759c7.css,sha256=kkdZx4gQRslPM--BetVKpsQdTi8Ezdc8YFclLORTYtg,1017
100
+ flowfile/web/static/assets/graph_solver-8b7888b8.png,sha256=i3iIuPx5-fvXVwP9Dk1-bp6paSN61bVork9bGpPuVpE,11180
101
+ flowfile/web/static/assets/group_by-80561fc3.png,sha256=gFYfw_ipVhzG6YLKSjl32XoIHPJYMZW5LBK8T9HQoNo,16156
102
+ flowfile/web/static/assets/index-552863fd.js,sha256=39e75VuPflLL0oHERr0mVxBJ__gA7mbc2vqdaoYPd9g,1884543
103
+ flowfile/web/static/assets/index-681a3ed0.css,sha256=aBo-0D4m-NuvQf0XepvMEyEKFf5JKH1HcNKUZO5c-Ys,416122
104
+ flowfile/web/static/assets/input_data-ab2eb678.png,sha256=qy62eFHc5m7_aGxUScHGy7kavT7x7Wz0p7-WhD3L684,13172
105
+ flowfile/web/static/assets/join-349043ae.png,sha256=NJBDrnJbVOiE9nDYFxoQoepGE2JUvPwA7CfGH4XfnRQ,9603
106
+ flowfile/web/static/assets/manual_input-ae98f31d.png,sha256=rpjzHerLp1wecn-hsKEcYMJWRDRB8S15i4_SmBBIexg,13587
107
+ flowfile/web/static/assets/nodeTitle-cf9bae3c.js,sha256=cfzHYMVyFeAdFkgeTKXEjTtE3yKcnwU7s6mAuuudLJQ,7860
108
+ flowfile/web/static/assets/nodeTitle-f4b12bcb.css,sha256=9LEry77j7biVsPqjfZwCqL3aUhbp00_vQL_SrDfHwzY,3611
109
+ flowfile/web/static/assets/old_join-5d0eb604.png,sha256=XQ62BOHlpgVIHVxSf589g8vzQ-vo_XUt4uMNKcOSlsU,9325
110
+ flowfile/web/static/assets/output-06ec0371.png,sha256=BuwDcRqgJU9Vnf0Zr1-Fzg_DshEIucmsIqPw0FhIwPg,12055
111
+ flowfile/web/static/assets/pivot-9660df51.png,sha256=lmDfUQowkZ6z6k12CZnQOAh6L2f73X4NTX8Y9YafVu0,15554
112
+ flowfile/web/static/assets/polars_code-05ce5dc6.png,sha256=Bc5dxp286-RZ2VayediJOz7gkjSCNLFO3wjWdWyD-HU,6239
113
+ flowfile/web/static/assets/record_count-dab44eb5.png,sha256=2rROtfInJu6NVYw0N4NmalWPkaErI2DyrteHdBRIJdU,7682
114
+ flowfile/web/static/assets/record_id-0b15856b.png,sha256=CxWFa702605nnK46FqOafmp_AwTuVkkSJAQgnKh1jBs,16066
115
+ flowfile/web/static/assets/sample-693a88b5.png,sha256=aTqItY0lcq5Vw58v-6ZU6DI4277L_ZWS47yQNOfDXEA,9222
116
+ flowfile/web/static/assets/secretApi-3ad510e1.js,sha256=wE0cQhBKCupzq8196d-yBzGhMZb08HVZgT-N5MWUtfk,1346
117
+ flowfile/web/static/assets/select-b0d0437a.png,sha256=sNBDesTxseBqQUetu6Rbijky24UI0FLmoS33ldvr_hM,14339
118
+ flowfile/web/static/assets/selectDynamic-b062bc9b.css,sha256=sGK8m1dDYX0ViRGnrYmBuLHeIWKtgPDnSswNCCDJHFo,2301
119
+ flowfile/web/static/assets/selectDynamic-bd644891.js,sha256=x7m__HQpkP5CCqfEQKJIHuAIzSRcezfeW7cF_--UnkE,15325
120
+ flowfile/web/static/assets/sort-2aa579f0.png,sha256=KqV58FQ9BhINj95x87vnV50_VcYVCrdHWbORrDYiY2M,11528
121
+ flowfile/web/static/assets/summarize-2a099231.png,sha256=KgmSMVKXng6xq0cNQ8YJEXdThQhhmHaiKs_31ybbr8g,11762
122
+ flowfile/web/static/assets/text_to_rows-859b29ea.png,sha256=hZsp6vqUV9EbmfOpnz1Os_daX1_4HQqwjVJdHtUes6c,13876
123
+ flowfile/web/static/assets/union-2d8609f4.png,sha256=LYYJ9EtnGnouHCaKBAxVwB3UGAiIeK2GqJHjKs4eN9M,10739
124
+ flowfile/web/static/assets/unique-1958b98a.png,sha256=GVi5is2VQF1Zc5H9lh0o92eVF8AeyVAgWCJHlUPP3Bo,20864
125
+ flowfile/web/static/assets/unpivot-d3cb4b5b.png,sha256=08tLWwGQ51ZYu_ZmS5iz7jtE27lxEW-FluhqSgG44_A,18488
126
+ flowfile/web/static/assets/view-7a0f0be1.png,sha256=eg8L4bC8yRlmh7nWrOQqQtXMQAWeorb6v8BWsv12spY,8353
127
+ flowfile/web/static/assets/vue-codemirror.esm-dd17b478.js,sha256=h39fsCtXs194Th0Hf5edWBX_XmHd8Teu-nq7tmK7W5s,783309
128
+ flowfile/web/static/assets/vue-content-loader.es-6b36f05e.js,sha256=grSsKAQYwYl2UhhMOCEKVbH5jH_mUBE033dfqKgvQ1g,5545
129
+ flowfile/web/static/flowfile.svg,sha256=hOLvhgtIBAuDAFwTCw3yUYO4xHMA9Jk_HpiBjk8t_dA,314188
130
+ flowfile/web/static/icons/flowfile.png,sha256=0uV0ELU3Vw4DfggPs8CHR1N2WdXutRbONUsdzJ_nxGA,240862
131
+ flowfile/web/static/images/airbyte.png,sha256=_KUGN4TrpkZBFXxdE-I8BiXKo-lx56mVYtAuFIMqg7w,24537
132
+ flowfile/web/static/images/flowfile.svg,sha256=hOLvhgtIBAuDAFwTCw3yUYO4xHMA9Jk_HpiBjk8t_dA,314188
133
+ flowfile/web/static/images/google.svg,sha256=HWvs3MThQhVAoqPMUfno4tl670VD0CYy0OqgtgROIVo,1054
134
+ flowfile/web/static/images/sheets.png,sha256=wpWE7P1eSIZ85ZtE4DuKZXoJwXL3gamodjyTt4dozDA,6260
135
+ flowfile/web/static/index.html,sha256=lJEv55voAU9NP7so-FOxfpeoxCwMM_c9c1d87V-juFU,739
136
+ flowfile/web/static/vite.svg,sha256=SnSK_UQ5GLsWWRyDTEAdrjPoeGGrXbrQgRw6O0qSFPs,1497
137
+ flowfile/web/static/vue.svg,sha256=VTLbNPHFKEGIG6uK7KbD6NCSvSGmiaZfTY-M-AQe750,496
6
138
  flowfile_core/__init__.py,sha256=dGxpVE9ol33CMRPJSPWlL7AZqXowBmlCx8unxCVWJXQ,254
7
139
  flowfile_core/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
140
  flowfile_core/auth/jwt.py,sha256=-j_eZd5z2ABP0KHo5PmmsuCyJUsvAFFlnANJiRCnNx4,4828
@@ -12,7 +144,7 @@ flowfile_core/configs/__init__.py,sha256=RSoO4aiWY-FzOUKLPY-mbwHS_YcbbNw5tNdVzrw
12
144
  flowfile_core/configs/flow_logger.py,sha256=Pk1yhaC58jjISMrgwhBFIue9Qj5XfYo8NfOefqsR-gA,15822
13
145
  flowfile_core/configs/node_store/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
146
  flowfile_core/configs/node_store/nodes.py,sha256=6z5kk-TUw5b-iQRxZzw7Qey-P9mUKw0AL19Nu_zwUhY,6155
15
- flowfile_core/configs/settings.py,sha256=UsqurpsVQ8BTz6k5hdipfFgWpMNw7k-9WgpG7XHAHeA,3818
147
+ flowfile_core/configs/settings.py,sha256=6QI6wOhAwvRYLd3MMP7w3g6wgyT4DeE-zq6-I39Touo,3073
16
148
  flowfile_core/database/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
149
  flowfile_core/database/connection.py,sha256=Ul1gYnYvwvlTSgxlJr5JexYCdgyZFduXioFjY_Lw2U0,1410
18
150
  flowfile_core/database/init_db.py,sha256=vKQi340caayTqc1tR0CJcd621i4afVc0BLpJO-t4CFk,1236
@@ -20,12 +152,12 @@ flowfile_core/database/models.py,sha256=SUrOgefmGY4lrN9Cv67TEjEOQtyKoYEpkjIVCWs7
20
152
  flowfile_core/fileExplorer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
153
  flowfile_core/fileExplorer/funcs.py,sha256=9o1Wko-wPpKNapRSvwsC-FmofJ6VFmBU5v2aQLRU3sA,9048
22
154
  flowfile_core/fileExplorer/utils.py,sha256=RrXj1NdkB2K3v5khvXpEp-_OnN68k9Ex_9s7CDa3L5w,1703
23
- flowfile_core/flowfile/FlowfileFlow.py,sha256=V31YYKiiL81RZ5zPIM7DK-hxriEOdc1MvHLuqSBTwSI,70318
155
+ flowfile_core/flowfile/FlowfileFlow.py,sha256=bc14bU2G088FJdZmAvKz66CNt95Yi_DtKVzBchaawdQ,70546
24
156
  flowfile_core/flowfile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
157
  flowfile_core/flowfile/_extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
158
  flowfile_core/flowfile/_extensions/real_time_interface.py,sha256=F9wGAFmu4gmC-svfwasDEaVYZBinBqYUZmCrEsWos44,1906
27
159
  flowfile_core/flowfile/analytics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- flowfile_core/flowfile/analytics/analytics_processor.py,sha256=mLEEWTaSSMF-0W7DyN9lDKfpnQ8_GRoUKclJ3iFZ97U,4833
160
+ flowfile_core/flowfile/analytics/analytics_processor.py,sha256=uFW13VkTQuewtlhyUU0sNPLj-efw2w0YRmNX71ealrE,4847
29
161
  flowfile_core/flowfile/analytics/graphic_walker.py,sha256=snYNQUTPZLhtz1egv_rSmo61uhJvd7OAuY_zeTYeE0c,2379
30
162
  flowfile_core/flowfile/analytics/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
163
  flowfile_core/flowfile/analytics/utils.py,sha256=x-FS1ZwQrHLzAfKm1THiQEKeCm_w0vO5dyWgyyIPjLY,487
@@ -92,7 +224,7 @@ flowfile_core/flowfile/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
92
224
  flowfile_core/flowfile/util/calculate_layout.py,sha256=iquA_-EGzX9mH1NasIZFNaYLfBcKqz5pHaTjHO1rYWE,5070
93
225
  flowfile_core/flowfile/util/execution_orderer.py,sha256=IJ-upXUruZfFj8z4J-2oDLz2hDSOnRIdgd_YLlRKU-c,5828
94
226
  flowfile_core/flowfile/utils.py,sha256=arSkifiXgbdWqrLcgQ6X3u-A9_6zDHocDuXEy6M3c18,3363
95
- flowfile_core/main.py,sha256=O-MjHAOYE-qS0MFLh6CigpcSejYXR4uo0Xs4msIEt2w,3790
227
+ flowfile_core/main.py,sha256=5rcWI1uFlYkUWd7T_ZHkolOmLlbIWjuDpzCyivw6og0,3879
96
228
  flowfile_core/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
229
  flowfile_core/routes/auth.py,sha256=-2SWMCDDKYSnriiYH3hOadnsHdmVckcIV_vA2mZfBu0,1251
98
230
  flowfile_core/routes/logs.py,sha256=LHGbCN10pjS8yAWHaG9eUHxMoGQlHjVWFSxtAnuQjrM,5868
@@ -106,7 +238,7 @@ flowfile_core/schemas/analysis_schemas/graphic_walker_schemas.py,sha256=1PQeiBFI
106
238
  flowfile_core/schemas/defaults.py,sha256=5FeYJIn1ZJ4Es8WQfSW3EkfoOnWsvifg9bvwZO7fklg,228
107
239
  flowfile_core/schemas/external_sources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
240
  flowfile_core/schemas/external_sources/airbyte_schemas.py,sha256=xjMVevVronSvMJ1lQrBTv2ClkO2VSMSU8YCga_Mw6vk,594
109
- flowfile_core/schemas/input_schema.py,sha256=xyeLiDuRnY2K65zOAlxpx-cm7Z4HK16yOKl_GpwMmkU,14112
241
+ flowfile_core/schemas/input_schema.py,sha256=lxaHMXcrrjpzQA84UsdZ4Y_bvxdlA04sr0sDEwydAOc,13818
110
242
  flowfile_core/schemas/models.py,sha256=W22swh1TZ1aAZY8R-OL0AiTXvIEUKtN9B1ZFc0dxZQI,5253
111
243
  flowfile_core/schemas/output_model.py,sha256=yenexlnHI9ecQhTDBPNChO2p25YNZ9btR5_cXd-ehLg,2665
112
244
  flowfile_core/schemas/schemas.py,sha256=_CXS-YUMOwJTlWAX4mPnhqHD7ZiQy3DM7rHB2eSbHUY,2647
@@ -119,15 +251,14 @@ flowfile_core/utils/excel_file_manager.py,sha256=EIad2LenHu-3Yw1FcLmE0KgmLflnvNK
119
251
  flowfile_core/utils/fileManager.py,sha256=LnJhK_pwjb9MIApG2e4Hp3L5Z7Wny8YYHaL9SkW8WlE,1371
120
252
  flowfile_core/utils/fl_executor.py,sha256=eNnNZHZ9451brzZD00_X8aoCHFl1hR1gVOIGxtE0Db4,1301
121
253
  flowfile_core/utils/utils.py,sha256=NkEu21OF1l5weu01g-dAVdJ6BRHdpT2jBrWBSi-wp3c,270
122
- flowfile_frame/__init__.py,sha256=5Jofwsln7SI6-NcwR3DvMzRhg0nN19z3Ro3ZDZ5fClw,1349
123
- flowfile_frame/__main__.py,sha256=qN0H-bYXDLIDoJNAurXep27crvKNHiz90HOGWbvC0HM,413
254
+ flowfile_frame/__init__.py,sha256=N5ZART5UuwRooekfMr_vwtgxFNvIr9uTPAepoYSg7Pg,1302
124
255
  flowfile_frame/adapters.py,sha256=C6JZZKANoKbHHmwMaF9AqAcZvITvQeb2Dklcpg5JAdY,530
125
256
  flowfile_frame/expr.py,sha256=wzJLiHtAqBA4NUEyXW8UhNJJ2jiGDvWEX8RfWT5ICwQ,47370
126
- flowfile_frame/flow_frame.py,sha256=X4p5Wr2DNoAZhkhCveVPGtFF2LG9FgDZHerLDrVqJdY,77553
257
+ flowfile_frame/flow_frame.py,sha256=TP3u7Nyq0TuT3sba0NGLCgMPnug5MuFCKE7Djafud-U,77559
127
258
  flowfile_frame/group_frame.py,sha256=MMGE2_DC8n1J2UxBBm_TyacGiRT_1V2CcWUvsIyhbIQ,9115
128
259
  flowfile_frame/join.py,sha256=pezHyNQMcaSPK9vhjaCaelMkgKdrvOQxwiROsa0fmN8,2480
129
260
  flowfile_frame/selectors.py,sha256=Ny5IpDP481ClNr5gI7_SjXzeqF16LsPcVQxiyUf5tUw,9130
130
- flowfile_frame/utils.py,sha256=fTcHWDyN7LVxRtVBoLwlfdEanhGhFZXEtslQUK2LDpQ,5923
261
+ flowfile_frame/utils.py,sha256=LwsNm8tvqcyaAeGX1PNQbpt-NenDsM8jx9SbxhDslZI,1348
131
262
  flowfile_worker/__init__.py,sha256=ZDdn3JCP7LWTiTsmntVIVduB4p2bUkJcZUKVEj7V9TU,1375
132
263
  flowfile_worker/configs.py,sha256=7fYtlj06vxDrMiRuMbwvSDOD1JRVMZqnPbcQFuikCJM,2714
133
264
  flowfile_worker/create/__init__.py,sha256=vkWy5uODffivUdxt3nNVALj6xgQK3HPBetqR-QqZ-uo,1643
@@ -164,8 +295,8 @@ test_utils/__init__.py,sha256=8WwOgIuKw6YtOc1GWR1DqIhQ8BhlLWqsMyQJSpxnzKk,66
164
295
  test_utils/postgres/__init__.py,sha256=y3V_6a9N1Pvm5NIBaA8CFf3i4mvPVY-H1teHA-rg0VU,33
165
296
  test_utils/postgres/commands.py,sha256=4oA8EHW3EqwGkG02HSqEGbXEBGM01sUW5FsyHm86W4k,4347
166
297
  test_utils/postgres/fixtures.py,sha256=kR8UBjQr3pgbe-xM-V8x8VseTHCPv0EmDEzPHl5Qc8Y,13507
167
- flowfile-0.2.2.dist-info/LICENSE,sha256=pCfLAA27jMHReYk_wGiirZxWRRXz_Bm7PVInRCa9P5g,1075
168
- flowfile-0.2.2.dist-info/METADATA,sha256=4jZprT4VmdoP8ahxW6WAm0gpwN5ulfHXr21-I07Hzww,7409
169
- flowfile-0.2.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
170
- flowfile-0.2.2.dist-info/entry_points.txt,sha256=CiyNXUvc77hDbE9rDaAMQFdFCQs-XdBm5_o1WV9_gQA,335
171
- flowfile-0.2.2.dist-info/RECORD,,
298
+ flowfile-0.3.0.1.dist-info/LICENSE,sha256=pCfLAA27jMHReYk_wGiirZxWRRXz_Bm7PVInRCa9P5g,1075
299
+ flowfile-0.3.0.1.dist-info/METADATA,sha256=aQmesMnk3ZIczqoSPJ2Csa55pQ9rk8XDPgG-_33XVP0,8954
300
+ flowfile-0.3.0.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
301
+ flowfile-0.3.0.1.dist-info/entry_points.txt,sha256=Q3CEYNk33UaWlA9D-8yXYH0FwjKBsrtNuzzzHxhwnNI,333
302
+ flowfile-0.3.0.1.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
flowfile_core/main.py CHANGED
@@ -54,6 +54,8 @@ origins = [
54
54
  "http://localhost:8081",
55
55
  "http://localhost:4173",
56
56
  "http://localhost:4174",
57
+ "http://localhost:63578",
58
+ "http://127.0.0.1:63578"
57
59
  ]
58
60
 
59
61
  app.add_middleware(
@@ -117,7 +119,8 @@ def run(host: str = None, port: int = None):
117
119
  app,
118
120
  host=host,
119
121
  port=port,
120
- loop="asyncio"
122
+ loop="asyncio",
123
+ log_level="warning",
121
124
  )
122
125
  server = uvicorn.Server(config)
123
126
  server_instance = server # Store server instance globally