Flowfile 0.3.0__tar.gz → 0.3.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of Flowfile might be problematic. Click here for more details.
- flowfile-0.3.0.2/PKG-INFO +235 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile/__init__.py +13 -6
- flowfile-0.3.0.2/flowfile/__main__.py +59 -0
- flowfile-0.3.0.2/flowfile/api.py +383 -0
- flowfile-0.3.0.2/flowfile/readme.md +130 -0
- flowfile-0.3.0.2/flowfile/web/__init__.py +155 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/AirbyteReader-1ac35765.css +314 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/AirbyteReader-cb0c1d4a.js +921 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/CrossJoin-41efa4cb.css +100 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/CrossJoin-a514fa59.js +153 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/DatabaseConnectionSettings-0c04b2e5.css +77 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/DatabaseConnectionSettings-f2cecf33.js +151 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/DatabaseManager-30fa27e5.css +64 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/DatabaseManager-83ee3c98.js +484 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/DatabaseReader-dc0c6881.js +426 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/DatabaseReader-f50c6558.css +158 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/DatabaseWriter-2f570e53.css +96 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/DatabaseWriter-5afe9f8d.js +312 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/ExploreData-5bdae813.css +45 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/ExploreData-c7ee19cf.js +118306 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/ExternalSource-17b23a01.js +225 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/ExternalSource-e37b6275.css +94 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Filter-90856b4f.js +238 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Filter-a9d08ba1.css +20 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Formula-38b71e9e.js +197 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Formula-d60a74f4.css +17 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/FuzzyMatch-6857de82.css +254 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/FuzzyMatch-d0f1fe81.js +422 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/GoogleSheet-854294a4.js +2616 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/GoogleSheet-92084da7.css +233 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/GraphSolver-0c86bbc6.js +382 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/GraphSolver-17fd26db.css +68 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/GroupBy-ab1ea74b.css +51 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/GroupBy-f2772e9f.js +413 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Join-41c0f331.css +109 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Join-bc3e1cf7.js +247 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/ManualInput-03aa0245.js +391 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/ManualInput-ac7b9972.css +84 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Output-48f81019.css +2642 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Output-5b35eee8.js +536 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Pivot-7164087c.js +408 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Pivot-f415e85f.css +35 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/PolarsCode-3abf6507.js +2863 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/PolarsCode-650322d1.css +35 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/PopOver-b37ff9be.js +577 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/PopOver-bccfde04.css +32 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Read-65966a3e.js +701 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Read-80dc1675.css +197 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/RecordCount-c66c6d6d.js +121 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/RecordId-826dc095.js +339 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Sample-4ed555c8.js +184 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/SecretManager-eac1e97d.js +382 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Select-085f05cc.js +231 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/SettingsSection-1f5e79c1.js +87 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/SettingsSection-9c836ecc.css +47 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Sort-3e6cb414.js +309 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Sort-7ccfa0fe.css +51 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/TextToRows-606349bc.js +307 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/TextToRows-c92d1ec2.css +48 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/UnavailableFields-5edd5322.css +49 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/UnavailableFields-b41976ed.js +36 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Union-8d9ac7f9.css +30 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Union-fca91665.js +145 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Unique-a59f830e.js +273 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Unique-b5615727.css +51 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Unpivot-246e9bbd.css +77 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/Unpivot-c3815565.js +441 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/airbyte-292aa232.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/api-22b338bd.js +60 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/cross_join-d30c0290.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/database_reader-ce1e55f3.svg +24 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/database_writer-b4ad0753.svg +23 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/designer-2394122a.css +10697 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/designer-e5bbe26f.js +69712 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/documentation-08045cf2.js +33 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/documentation-12216a74.css +50 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/dropDown-35135ba8.css +143 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/dropDown-5e7e9a5a.js +319 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/dropDownGeneric-50a91b99.js +72 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/dropDownGeneric-895680d6.css +10 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/element-icons-9c88a535.woff +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/element-icons-de5eb258.ttf +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/explore_data-8a0a2861.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/fa-brands-400-808443ae.ttf +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/fa-brands-400-d7236a19.woff2 +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/fa-regular-400-54cf6086.ttf +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/fa-regular-400-e3456d12.woff2 +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/fa-solid-900-aa759986.woff2 +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/fa-solid-900-d2f05935.ttf +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/fa-v4compatibility-0ce9033c.woff2 +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/fa-v4compatibility-30f6abf6.ttf +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/filter-d7708bda.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/formula-eeeb1611.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/fullEditor-178376bb.css +256 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/fullEditor-705c6ccb.js +630 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/fuzzy_match-40c161b2.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/genericNodeSettings-65587f20.js +137 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/genericNodeSettings-924759c7.css +46 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/graph_solver-8b7888b8.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/group_by-80561fc3.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/index-552863fd.js +58652 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/index-681a3ed0.css +8843 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/input_data-ab2eb678.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/join-349043ae.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/manual_input-ae98f31d.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/nodeTitle-cf9bae3c.js +227 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/nodeTitle-f4b12bcb.css +134 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/old_join-5d0eb604.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/output-06ec0371.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/pivot-9660df51.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/polars_code-05ce5dc6.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/record_count-dab44eb5.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/record_id-0b15856b.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/sample-693a88b5.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/secretApi-3ad510e1.js +46 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/select-b0d0437a.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/selectDynamic-b062bc9b.css +107 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/selectDynamic-bd644891.js +302 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/sort-2aa579f0.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/summarize-2a099231.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/text_to_rows-859b29ea.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/union-2d8609f4.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/unique-1958b98a.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/unpivot-d3cb4b5b.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/view-7a0f0be1.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/vue-codemirror.esm-dd17b478.js +22281 -0
- flowfile-0.3.0.2/flowfile/web/static/assets/vue-content-loader.es-6b36f05e.js +210 -0
- flowfile-0.3.0.2/flowfile/web/static/flowfile.svg +47 -0
- flowfile-0.3.0.2/flowfile/web/static/icons/flowfile.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/images/airbyte.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/images/flowfile.svg +47 -0
- flowfile-0.3.0.2/flowfile/web/static/images/google.svg +1 -0
- flowfile-0.3.0.2/flowfile/web/static/images/sheets.png +0 -0
- flowfile-0.3.0.2/flowfile/web/static/index.html +22 -0
- flowfile-0.3.0.2/flowfile/web/static/vite.svg +1 -0
- flowfile-0.3.0.2/flowfile/web/static/vue.svg +1 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/configs/settings.py +7 -32
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/FlowfileFlow.py +4 -2
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/analytics/analytics_processor.py +1 -1
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/main.py +4 -1
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/input_schema.py +1 -8
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_frame/flowfile_frame/__init__.py +0 -1
- flowfile-0.3.0.2/flowfile_frame/flowfile_frame/utils.py +45 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/pyproject.toml +6 -2
- flowfile-0.3.0.2/readme-pypi.md +192 -0
- flowfile-0.3.0/PKG-INFO +0 -219
- flowfile-0.3.0/flowfile/__main__.py +0 -24
- flowfile-0.3.0/flowfile_frame/flowfile_frame/__main__.py +0 -12
- flowfile-0.3.0/flowfile_frame/flowfile_frame/utils.py +0 -184
- flowfile-0.3.0/readme-pypi.md +0 -175
- {flowfile-0.3.0 → flowfile-0.3.0.2}/LICENSE +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/build_backends/build_backends/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/build_backends/build_backends/main.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/build_backends/build_backends/main_prd.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/auth/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/auth/jwt.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/auth/models.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/auth/secrets.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/configs/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/configs/flow_logger.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/configs/node_store/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/configs/node_store/nodes.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/database/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/database/connection.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/database/init_db.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/database/models.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/fileExplorer/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/fileExplorer/funcs.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/fileExplorer/utils.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/_extensions/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/_extensions/real_time_interface.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/analytics/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/analytics/graphic_walker.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/analytics/schemas/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/analytics/utils.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/connection_manager/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/connection_manager/_connection_manager.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/connection_manager/models.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/database_connection_manager/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/database_connection_manager/db_connections.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/database_connection_manager/models.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/extensions.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/create/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/create/funcs.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/flow_file_column/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/flow_file_column/polars_type.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/flow_file_column/utils.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/fuzzy_matching/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/fuzzy_matching/prepare_for_fuzzy_match.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/fuzzy_matching/settings_validator.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/join/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/join/verify_integrity.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/pivot_table.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/polars_code_parser.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/read_excel_tables.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/sample_data.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/subprocess_operations/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/subprocess_operations/models.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/threaded_processes.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/types.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_data_engine/utils.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_node/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_node/flow_node.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_node/models.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/flow_node/schema_callback.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/handler.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/manage/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/manage/compatibility_enhancements.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/manage/manage_flowfile.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/manage/open_flowfile.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/setting_generator/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/setting_generator/setting_generator.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/setting_generator/settings.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/airbyte_sources/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/airbyte_sources/airbyte.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/airbyte_sources/models.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/airbyte_sources/settings.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/base_class.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/custom_external_sources/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/custom_external_sources/exchange_rate.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/custom_external_sources/external_source.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/custom_external_sources/google_sheet.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/custom_external_sources/sample_users.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/factory.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/sql_source/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/sql_source/models.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/sql_source/sql_source.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/sources/external_sources/sql_source/utils.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/util/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/util/calculate_layout.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/util/execution_orderer.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/flowfile/utils.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/routes/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/routes/auth.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/routes/logs.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/routes/public.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/routes/routes.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/routes/secrets.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/run_lock.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/analysis_schemas/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/analysis_schemas/graphic_walker_schemas.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/defaults.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/external_sources/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/external_sources/airbyte_schemas.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/models.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/output_model.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/schemas.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/schemas/transform_schema.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/secrets/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/secrets/secrets.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/utils/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/utils/arrow_reader.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/utils/excel_file_manager.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/utils/fileManager.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/utils/fl_executor.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_core/flowfile_core/utils/utils.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_frame/flowfile_frame/adapters.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_frame/flowfile_frame/expr.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_frame/flowfile_frame/flow_frame.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_frame/flowfile_frame/group_frame.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_frame/flowfile_frame/join.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_frame/flowfile_frame/selectors.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/configs.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/create/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/create/funcs.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/create/models.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/create/pl_types.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/create/read_excel_tables.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/create/utils.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/airbyte_sources/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/airbyte_sources/cache_manager.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/airbyte_sources/main.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/airbyte_sources/models.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/airbyte_sources/settings.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/sql_source/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/sql_source/main.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/external_sources/sql_source/models.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/flow_logger.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/funcs.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/main.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/models.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/polars_fuzzy_match/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/polars_fuzzy_match/matcher.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/polars_fuzzy_match/models.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/polars_fuzzy_match/pre_process.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/polars_fuzzy_match/process.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/polars_fuzzy_match/utils.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/process_manager.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/routes.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/secrets.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/spawner.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/flowfile_worker/flowfile_worker/utils.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/test_utils/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/test_utils/postgres/__init__.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/test_utils/postgres/commands.py +0 -0
- {flowfile-0.3.0 → flowfile-0.3.0.2}/test_utils/postgres/fixtures.py +0 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: Flowfile
|
|
3
|
+
Version: 0.3.0.2
|
|
4
|
+
Summary: Project combining flowfile core (backend) and flowfile_worker (compute offloader) and flowfile_frame (api)
|
|
5
|
+
Author: Edward van Eechoud
|
|
6
|
+
Author-email: evaneechoud@gmail.com
|
|
7
|
+
Requires-Python: >=3.10,<3.13
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
12
|
+
Requires-Dist: XlsxWriter (>=3.2.0,<3.3.0)
|
|
13
|
+
Requires-Dist: aiofiles (>=24.1.0,<25.0.0)
|
|
14
|
+
Requires-Dist: airbyte-cdk (==6.47.2)
|
|
15
|
+
Requires-Dist: bcrypt (>=4.3.0,<5.0.0)
|
|
16
|
+
Requires-Dist: connectorx (>=0.4.2,<0.5.0)
|
|
17
|
+
Requires-Dist: databases (>=0.9.0,<0.10.0)
|
|
18
|
+
Requires-Dist: faker (>=23.1.0,<23.2.0)
|
|
19
|
+
Requires-Dist: fastapi (>=0.115.2,<0.116.0)
|
|
20
|
+
Requires-Dist: fastexcel (>=0.12.0,<0.13.0)
|
|
21
|
+
Requires-Dist: google-api-python-client (>=2.149.0,<2.150.0)
|
|
22
|
+
Requires-Dist: gspread (>=6.1.3,<6.2.0)
|
|
23
|
+
Requires-Dist: loky (>=3.4.1,<3.5.0)
|
|
24
|
+
Requires-Dist: methodtools (>=0.4.7,<0.5.0)
|
|
25
|
+
Requires-Dist: openpyxl (>=3.1.2,<3.2.0)
|
|
26
|
+
Requires-Dist: passlib (>=1.7.4,<1.8.0)
|
|
27
|
+
Requires-Dist: pendulum (==2.1.2) ; python_version < "3.12"
|
|
28
|
+
Requires-Dist: polars (>1.8.2,<=1.25.2)
|
|
29
|
+
Requires-Dist: polars-distance (>=0.4.3,<0.5.0)
|
|
30
|
+
Requires-Dist: polars-ds (>=0.6.0)
|
|
31
|
+
Requires-Dist: polars-expr-transformer (>0.4.7.0)
|
|
32
|
+
Requires-Dist: polars-grouper (>=0.3.0,<0.4.0)
|
|
33
|
+
Requires-Dist: polars_simed (>=0.3.4,<0.4.0)
|
|
34
|
+
Requires-Dist: pyairbyte-flowfile (==0.20.2)
|
|
35
|
+
Requires-Dist: pyarrow (>=18.0.0,<19.0.0)
|
|
36
|
+
Requires-Dist: pydantic (>=2.9.2,<2.10.0)
|
|
37
|
+
Requires-Dist: pyinstaller (>=6.11.0,<7.0.0)
|
|
38
|
+
Requires-Dist: pytest (>=8.3.4,<9.0.0)
|
|
39
|
+
Requires-Dist: python-jose (>=3.4.0,<4.0.0)
|
|
40
|
+
Requires-Dist: python-multipart (>=0.0.12,<0.1.0)
|
|
41
|
+
Requires-Dist: uvicorn (>=0.32.0,<0.33.0)
|
|
42
|
+
Description-Content-Type: text/markdown
|
|
43
|
+
|
|
44
|
+
# Flowfile
|
|
45
|
+
|
|
46
|
+

|
|
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.
|
|
@@ -7,9 +7,16 @@ This package ties together the FlowFile ecosystem components:
|
|
|
7
7
|
- flowfile_worker: Computation engine
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
-
__version__ = "0.
|
|
10
|
+
__version__ = "0.3.1"
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
import os
|
|
13
|
+
import logging
|
|
14
|
+
|
|
15
|
+
os.environ['WORKER_PORT'] = "63578"
|
|
16
|
+
os.environ['SINGLE_FILE_MODE'] = "1"
|
|
17
|
+
|
|
18
|
+
from flowfile.web import start_server as start_web_ui
|
|
19
|
+
from flowfile.api import open_graph_in_editor
|
|
13
20
|
from flowfile_frame.flow_frame import (
|
|
14
21
|
FlowFrame, read_csv, read_parquet, from_dict, concat
|
|
15
22
|
)
|
|
@@ -18,7 +25,7 @@ from flowfile_frame.expr import (
|
|
|
18
25
|
sum, min, max, mean, count, when
|
|
19
26
|
)
|
|
20
27
|
from flowfile_frame.group_frame import GroupByFrame
|
|
21
|
-
from flowfile_frame.utils import create_flow_graph
|
|
28
|
+
from flowfile_frame.utils import create_flow_graph
|
|
22
29
|
from flowfile_frame.selectors import (
|
|
23
30
|
numeric, float_, integer, string, temporal,
|
|
24
31
|
datetime, date, time, duration, boolean,
|
|
@@ -26,7 +33,6 @@ from flowfile_frame.selectors import (
|
|
|
26
33
|
by_dtype, contains, starts_with, ends_with, matches
|
|
27
34
|
)
|
|
28
35
|
|
|
29
|
-
# Import Polars data types for convenience
|
|
30
36
|
from polars.datatypes import (
|
|
31
37
|
Int8, Int16, Int32, Int64, Int128,
|
|
32
38
|
UInt8, UInt16, UInt32, UInt64,
|
|
@@ -38,7 +44,6 @@ from polars.datatypes import (
|
|
|
38
44
|
DataType, DataTypeClass, Field
|
|
39
45
|
)
|
|
40
46
|
|
|
41
|
-
# Define what's publicly available from the package
|
|
42
47
|
__all__ = [
|
|
43
48
|
# Core FlowFrame classes
|
|
44
49
|
'FlowFrame', 'GroupByFrame',
|
|
@@ -68,4 +73,6 @@ __all__ = [
|
|
|
68
73
|
'Date', 'Time', 'Datetime', 'Duration',
|
|
69
74
|
'Categorical', 'Decimal', 'Enum', 'Unknown',
|
|
70
75
|
'DataType', 'DataTypeClass', 'Field',
|
|
71
|
-
|
|
76
|
+
'start_web_ui'
|
|
77
|
+
]
|
|
78
|
+
logging.getLogger("PipelineHandler").setLevel(logging.WARNING)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# flowfile/__main__.py
|
|
2
|
+
|
|
3
|
+
def main():
|
|
4
|
+
"""
|
|
5
|
+
Display information about FlowFile when run directly as a module.
|
|
6
|
+
"""
|
|
7
|
+
import flowfile
|
|
8
|
+
import argparse
|
|
9
|
+
|
|
10
|
+
parser = argparse.ArgumentParser(description="FlowFile: A visual ETL tool with a Polars-like API")
|
|
11
|
+
parser.add_argument("command", nargs="?", choices=["run"], help="Command to execute")
|
|
12
|
+
parser.add_argument("component", nargs="?", choices=["web", "core", "worker"],
|
|
13
|
+
help="Component to run (web, core, or worker)")
|
|
14
|
+
parser.add_argument("--host", default="127.0.0.1", help="Host to bind the server to")
|
|
15
|
+
parser.add_argument("--port", type=int, default=63578, help="Port to bind the server to")
|
|
16
|
+
parser.add_argument("--no-browser", action="store_true", help="Don't open a browser window")
|
|
17
|
+
|
|
18
|
+
# Parse arguments
|
|
19
|
+
args = parser.parse_args()
|
|
20
|
+
|
|
21
|
+
if args.command == "run" and args.component:
|
|
22
|
+
if args.component == "ui":
|
|
23
|
+
try:
|
|
24
|
+
flowfile.start_web_ui(
|
|
25
|
+
host=args.host,
|
|
26
|
+
port=args.port,
|
|
27
|
+
open_browser=not args.no_browser
|
|
28
|
+
)
|
|
29
|
+
except KeyboardInterrupt:
|
|
30
|
+
print("\nFlowFile service stopped.")
|
|
31
|
+
elif args.component == "core":
|
|
32
|
+
# Only for direct core service usage
|
|
33
|
+
from flowfile_core.main import run as run_core
|
|
34
|
+
run_core(host=args.host, port=args.port)
|
|
35
|
+
elif args.component == "worker":
|
|
36
|
+
# Only for direct worker service usage
|
|
37
|
+
from flowfile_worker.main import run as run_worker
|
|
38
|
+
run_worker(host=args.host, port=args.port)
|
|
39
|
+
else:
|
|
40
|
+
# Default action - show info
|
|
41
|
+
print(f"FlowFile v{flowfile.__version__}")
|
|
42
|
+
print("A framework combining visual ETL with a Polars-like API")
|
|
43
|
+
print("\nUsage:")
|
|
44
|
+
print(" # Start the FlowFile web UI with integrated services")
|
|
45
|
+
print(" flowfile run ui")
|
|
46
|
+
print("")
|
|
47
|
+
print(" # Advanced: Run individual components")
|
|
48
|
+
print(" flowfile run core # Start only the core service")
|
|
49
|
+
print(" flowfile run worker # Start only the worker service")
|
|
50
|
+
print("")
|
|
51
|
+
print(" # Options")
|
|
52
|
+
print(" flowfile run ui --host 0.0.0.0 --port 8080 # Custom host/port")
|
|
53
|
+
print(" flowfile run ui --no-browser # Don't open browser")
|
|
54
|
+
print("")
|
|
55
|
+
print(" # Python API usage examples")
|
|
56
|
+
print(" import flowfile as ff")
|
|
57
|
+
print(" df = ff.read_csv('data.csv')")
|
|
58
|
+
print(" result = df.filter(ff.col('value') > 10)")
|
|
59
|
+
print(" ff.open_graph_in_editor(result)")
|