Flowfile 0.5.3__py3-none-any.whl → 0.5.6__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.
- flowfile/__init__.py +16 -0
- flowfile/__main__.py +94 -1
- flowfile/web/static/assets/{AdminView-49392a9a.js → AdminView-c2c7942b.js} +1 -1
- flowfile/web/static/assets/{CloudConnectionView-f13f202b.js → CloudConnectionView-7a3042c6.js} +4 -4
- flowfile/web/static/assets/{CloudConnectionView-36bcd6df.css → CloudConnectionView-cf85f943.css} +17 -17
- flowfile/web/static/assets/{CloudStorageReader-0023d4a5.js → CloudStorageReader-709c4037.js} +8 -8
- flowfile/web/static/assets/{CloudStorageWriter-8e781e11.js → CloudStorageWriter-604c51a8.js} +8 -8
- flowfile/web/static/assets/ColumnActionInput-c44b7aee.css +159 -0
- flowfile/web/static/assets/ColumnActionInput-d63d6746.js +330 -0
- flowfile/web/static/assets/{ColumnSelector-8ad68ea9.js → ColumnSelector-0c8cd1cd.js} +1 -1
- flowfile/web/static/assets/ContextMenu-366bf1b4.js +9 -0
- flowfile/web/static/assets/ContextMenu-85cf5b44.js +9 -0
- flowfile/web/static/assets/ContextMenu-9d28ae6d.js +9 -0
- flowfile/web/static/assets/ContextMenu.vue_vue_type_script_setup_true_lang-774c517c.js +59 -0
- flowfile/web/static/assets/{CrossJoin-03df6938.js → CrossJoin-38e5b99a.js} +9 -9
- flowfile/web/static/assets/{CustomNode-8479239b.js → CustomNode-76e8f3f5.js} +27 -20
- flowfile/web/static/assets/CustomNode-edb9b939.css +42 -0
- flowfile/web/static/assets/{DatabaseConnectionSettings-869e3efd.js → DatabaseConnectionSettings-38155669.js} +4 -4
- flowfile/web/static/assets/{DatabaseConnectionSettings-e91df89a.css → DatabaseConnectionSettings-c20a1e16.css} +22 -20
- flowfile/web/static/assets/{DatabaseReader-c58b9552.js → DatabaseReader-2e549c8f.js} +13 -13
- flowfile/web/static/assets/{DatabaseReader-36898a00.css → DatabaseReader-5bf8c75b.css} +39 -44
- flowfile/web/static/assets/{DatabaseView-d26a9140.js → DatabaseView-dc877c29.js} +2 -2
- flowfile/web/static/assets/{DatabaseWriter-217a99f1.css → DatabaseWriter-bdcf2c8b.css} +27 -25
- flowfile/web/static/assets/{DatabaseWriter-4d05ddc7.js → DatabaseWriter-ffb91864.js} +12 -12
- flowfile/web/static/assets/{DesignerView-a6d0ee84.css → DesignerView-71d4e9a1.css} +429 -376
- flowfile/web/static/assets/{DesignerView-e6f5c0e8.js → DesignerView-a4466dab.js} +338 -183
- flowfile/web/static/assets/{DocumentationView-2e78ef1b.js → DocumentationView-979afc84.js} +3 -3
- flowfile/web/static/assets/{DocumentationView-fd46c656.css → DocumentationView-9ea6e871.css} +9 -9
- flowfile/web/static/assets/{ExploreData-7b54caca.js → ExploreData-e4b92aaf.js} +7 -7
- flowfile/web/static/assets/{ExternalSource-47ab05a3.css → ExternalSource-7ac7373f.css} +17 -17
- flowfile/web/static/assets/{ExternalSource-3fa399b2.js → ExternalSource-d08e7227.js} +9 -9
- flowfile/web/static/assets/{Filter-8cbbdbf3.js → Filter-7add806d.js} +9 -9
- flowfile/web/static/assets/{Formula-aac42b1e.js → Formula-36ab24d2.js} +9 -9
- flowfile/web/static/assets/{FuzzyMatch-cd9bbfca.js → FuzzyMatch-cc01bb04.js} +10 -10
- flowfile/web/static/assets/{GraphSolver-c24dec17.css → GraphSolver-4b4d7db9.css} +4 -4
- flowfile/web/static/assets/{GraphSolver-c7e6780e.js → GraphSolver-4fb98f3b.js} +11 -11
- flowfile/web/static/assets/GroupBy-5792782d.css +9 -0
- flowfile/web/static/assets/{GroupBy-93c5d22b.js → GroupBy-b3c8f429.js} +9 -9
- flowfile/web/static/assets/{Join-a19b2de2.js → Join-096b7b26.js} +10 -10
- flowfile/web/static/assets/{LoginView-0df4ed0a.js → LoginView-c33a246a.js} +1 -1
- flowfile/web/static/assets/{ManualInput-3702e677.css → ManualInput-39111f19.css} +48 -48
- flowfile/web/static/assets/{ManualInput-8d3374b2.js → ManualInput-7307e9b1.js} +55 -13
- flowfile/web/static/assets/{MultiSelect-ad1b6243.js → MultiSelect-14822c48.js} +2 -2
- flowfile/web/static/assets/{MultiSelect.vue_vue_type_script_setup_true_lang-e278950d.js → MultiSelect.vue_vue_type_script_setup_true_lang-90c4d340.js} +1 -1
- flowfile/web/static/assets/{NodeDesigner-40b647c9.js → NodeDesigner-5036c392.js} +171 -69
- flowfile/web/static/assets/{NodeDesigner-5f53be3f.css → NodeDesigner-94cd4dd3.css} +190 -190
- flowfile/web/static/assets/{NumericInput-7100234c.js → NumericInput-15cf3b72.js} +2 -2
- flowfile/web/static/assets/{NumericInput.vue_vue_type_script_setup_true_lang-5130219f.js → NumericInput.vue_vue_type_script_setup_true_lang-91e679d7.js} +1 -1
- flowfile/web/static/assets/{Output-f5efd2aa.js → Output-1f8ed42c.js} +13 -12
- flowfile/web/static/assets/{Output-35e97000.css → Output-692dd25d.css} +10 -10
- flowfile/web/static/assets/{Pivot-d981d23c.js → Pivot-0e153f4e.js} +10 -10
- flowfile/web/static/assets/{PivotValidation-63de1f73.js → PivotValidation-5a4f7c79.js} +1 -1
- flowfile/web/static/assets/{PivotValidation-39386e95.js → PivotValidation-81ec2a33.js} +1 -1
- flowfile/web/static/assets/{PolarsCode-f9d69217.js → PolarsCode-a39f15ac.js} +7 -7
- flowfile/web/static/assets/PopOver-ddcfe4f6.js +138 -0
- flowfile/web/static/assets/{Read-aec2e377.js → Read-39b63932.js} +15 -14
- flowfile/web/static/assets/{Read-36e7bd51.css → Read-90f366bc.css} +13 -13
- flowfile/web/static/assets/{RecordCount-78ed6845.js → RecordCount-e9048ccd.js} +6 -6
- flowfile/web/static/assets/{RecordId-2156e890.js → RecordId-ad02521d.js} +9 -9
- flowfile/web/static/assets/{SQLQueryComponent-48c72f5b.js → SQLQueryComponent-2eeecf0b.js} +3 -3
- flowfile/web/static/assets/SQLQueryComponent-edb90b98.css +29 -0
- flowfile/web/static/assets/{Sample-1352ca74.js → Sample-9a68c23d.js} +6 -6
- flowfile/web/static/assets/{SecretSelector-22b5ff89.js → SecretSelector-2429f35a.js} +2 -2
- flowfile/web/static/assets/{SecretsView-17df66ee.js → SecretsView-c6afc915.js} +2 -2
- flowfile/web/static/assets/{Select-0aee4c54.js → Select-fcd002b6.js} +9 -9
- flowfile/web/static/assets/{SettingsSection-cd341bb6.js → SettingsSection-5ce15962.js} +1 -1
- flowfile/web/static/assets/{SettingsSection-0784e157.js → SettingsSection-c6b1362c.js} +1 -1
- flowfile/web/static/assets/{SettingsSection-f2002a6d.js → SettingsSection-cebb91d5.js} +1 -1
- flowfile/web/static/assets/SetupView-2d12e01f.js +160 -0
- flowfile/web/static/assets/SetupView-ec26f76a.css +230 -0
- flowfile/web/static/assets/{SingleSelect-460cc0ea.js → SingleSelect-b67de4eb.js} +2 -2
- flowfile/web/static/assets/{SingleSelect.vue_vue_type_script_setup_true_lang-30741bb2.js → SingleSelect.vue_vue_type_script_setup_true_lang-eedb70eb.js} +1 -1
- flowfile/web/static/assets/{SliderInput-5d926864.js → SliderInput-fd8134ac.js} +1 -1
- flowfile/web/static/assets/Sort-4abb7fae.css +9 -0
- flowfile/web/static/assets/{Sort-3cdc971b.js → Sort-c005a573.js} +9 -9
- flowfile/web/static/assets/{TextInput-a2d0bfbd.js → TextInput-1bb31dab.js} +2 -2
- flowfile/web/static/assets/{TextInput.vue_vue_type_script_setup_true_lang-abad1ca2.js → TextInput.vue_vue_type_script_setup_true_lang-a51fe730.js} +1 -1
- flowfile/web/static/assets/{TextToRows-918945f7.js → TextToRows-4f363753.js} +9 -9
- flowfile/web/static/assets/{ToggleSwitch-f0ef5196.js → ToggleSwitch-ca0f2e5e.js} +2 -2
- flowfile/web/static/assets/{ToggleSwitch.vue_vue_type_script_setup_true_lang-5605c793.js → ToggleSwitch.vue_vue_type_script_setup_true_lang-49aa41d8.js} +1 -1
- flowfile/web/static/assets/{UnavailableFields-54d2f518.css → UnavailableFields-394a1f78.css} +13 -13
- flowfile/web/static/assets/{UnavailableFields-bdad6144.js → UnavailableFields-f6147968.js} +4 -4
- flowfile/web/static/assets/{Union-e8ab8c86.js → Union-c65f17b7.js} +6 -6
- flowfile/web/static/assets/Unique-2b705521.css +3 -0
- flowfile/web/static/assets/{Unique-8cd4f976.js → Unique-a1d96fb2.js} +12 -12
- flowfile/web/static/assets/{Unpivot-710a2948.css → Unpivot-b6ad6427.css} +6 -6
- flowfile/web/static/assets/{Unpivot-8da14095.js → Unpivot-c2657ff3.js} +11 -11
- flowfile/web/static/assets/{UnpivotValidation-6f7d89ff.js → UnpivotValidation-28e29a3b.js} +1 -1
- flowfile/web/static/assets/{VueGraphicWalker-3fb312e1.js → VueGraphicWalker-2fc3ddd4.js} +1 -1
- flowfile/web/static/assets/{api-24483f0d.js → api-df48ec50.js} +1 -1
- flowfile/web/static/assets/{api-8b81fa73.js → api-ee542cf7.js} +1 -1
- flowfile/web/static/assets/{dropDown-3d8dc5fa.css → dropDown-1d6acbd9.css} +26 -26
- flowfile/web/static/assets/{dropDown-ac0fda9d.js → dropDown-7576a76a.js} +3 -3
- flowfile/web/static/assets/{fullEditor-5497a84a.js → fullEditor-7583bef5.js} +3 -3
- flowfile/web/static/assets/{fullEditor-a0be62b3.css → fullEditor-fe9f7e18.css} +3 -3
- flowfile/web/static/assets/{genericNodeSettings-99014e1d.js → genericNodeSettings-0155288b.js} +2 -3
- flowfile/web/static/assets/{index-3ba44389.js → index-057d770d.js} +2 -2
- flowfile/web/static/assets/{index-07dda503.js → index-aeec439d.js} +1 -1
- flowfile/web/static/assets/{index-fb6493ae.js → index-ca6799de.js} +2293 -196
- flowfile/web/static/assets/{index-e6289dd0.css → index-d60c9dd4.css} +560 -10
- flowfile/web/static/assets/nodeInput-d478b9ac.js +2 -0
- flowfile/web/static/assets/{outputCsv-8f8ba42d.js → outputCsv-c492b15e.js} +3 -3
- flowfile/web/static/assets/outputCsv-cc84e09f.css +2499 -0
- flowfile/web/static/assets/{outputExcel-393f4fef.js → outputExcel-13bfa10f.js} +1 -1
- flowfile/web/static/assets/{outputParquet-07c81f65.js → outputParquet-9be1523a.js} +1 -1
- flowfile/web/static/assets/{readCsv-07f6d9ad.js → readCsv-5a49a8c9.js} +1 -1
- flowfile/web/static/assets/{readExcel-ed69bc8f.js → readExcel-27c30ad8.js} +3 -3
- flowfile/web/static/assets/{readParquet-e3ed4528.js → readParquet-446bde68.js} +1 -1
- flowfile/web/static/assets/{secrets.api-002e7d7e.js → secrets.api-34431884.js} +1 -1
- flowfile/web/static/assets/{selectDynamic-80b92899.js → selectDynamic-5754a2b1.js} +2 -3
- flowfile/web/static/assets/{vue-codemirror.esm-0965f39f.js → vue-codemirror.esm-8f46fb36.js} +1 -1
- flowfile/web/static/assets/{vue-content-loader.es-c506ad97.js → vue-content-loader.es-808fe33a.js} +1 -1
- flowfile/web/static/index.html +2 -2
- {flowfile-0.5.3.dist-info → flowfile-0.5.6.dist-info}/METADATA +2 -2
- {flowfile-0.5.3.dist-info → flowfile-0.5.6.dist-info}/RECORD +139 -134
- flowfile_core/auth/secrets.py +56 -13
- flowfile_core/fileExplorer/funcs.py +26 -4
- flowfile_core/flowfile/code_generator/__init__.py +11 -0
- flowfile_core/flowfile/code_generator/code_generator.py +347 -2
- flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +13 -1
- flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +12 -0
- flowfile_core/flowfile/flow_graph.py +2 -0
- flowfile_core/flowfile/flow_node/flow_node.py +52 -28
- flowfile_core/flowfile/node_designer/__init__.py +4 -0
- flowfile_core/flowfile/node_designer/ui_components.py +144 -1
- flowfile_core/main.py +2 -4
- flowfile_core/routes/public.py +43 -1
- flowfile_core/schemas/cloud_storage_schemas.py +39 -15
- flowfile_core/secret_manager/secret_manager.py +107 -6
- flowfile_frame/__init__.py +11 -0
- flowfile_frame/database/__init__.py +36 -0
- flowfile_frame/database/connection_manager.py +205 -0
- flowfile_frame/database/frame_helpers.py +249 -0
- flowfile_worker/configs.py +31 -15
- flowfile_worker/secrets.py +105 -15
- flowfile_worker/spawner.py +10 -6
- flowfile/web/static/assets/ContextMenu-26d4dd27.css +0 -26
- flowfile/web/static/assets/ContextMenu-31ee57f0.js +0 -41
- flowfile/web/static/assets/ContextMenu-69a74055.js +0 -41
- flowfile/web/static/assets/ContextMenu-8e2051c6.js +0 -41
- flowfile/web/static/assets/ContextMenu-8ec1729e.css +0 -26
- flowfile/web/static/assets/ContextMenu-9b310c60.css +0 -26
- flowfile/web/static/assets/CustomNode-59e99a86.css +0 -32
- flowfile/web/static/assets/GroupBy-be7ac0bf.css +0 -51
- flowfile/web/static/assets/PopOver-b22f049e.js +0 -939
- flowfile/web/static/assets/SQLQueryComponent-1c2f26b4.css +0 -27
- flowfile/web/static/assets/Sort-8a871341.css +0 -51
- flowfile/web/static/assets/Unique-9fb2f567.css +0 -51
- flowfile/web/static/assets/nodeInput-0eb13f1a.js +0 -2
- flowfile/web/static/assets/outputCsv-b9a072af.css +0 -2499
- {flowfile-0.5.3.dist-info → flowfile-0.5.6.dist-info}/WHEEL +0 -0
- {flowfile-0.5.3.dist-info → flowfile-0.5.6.dist-info}/entry_points.txt +0 -0
- {flowfile-0.5.3.dist-info → flowfile-0.5.6.dist-info}/licenses/LICENSE +0 -0
flowfile/__init__.py
CHANGED
|
@@ -70,10 +70,16 @@ from flowfile_frame import (
|
|
|
70
70
|
concat,
|
|
71
71
|
create_cloud_storage_connection,
|
|
72
72
|
create_cloud_storage_connection_if_not_exists,
|
|
73
|
+
create_database_connection,
|
|
74
|
+
create_database_connection_if_not_exists,
|
|
73
75
|
del_cloud_storage_connection,
|
|
76
|
+
del_database_connection,
|
|
74
77
|
from_dict,
|
|
75
78
|
get_all_available_cloud_storage_connections,
|
|
79
|
+
get_all_available_database_connections,
|
|
80
|
+
get_database_connection_by_name,
|
|
76
81
|
read_csv,
|
|
82
|
+
read_database,
|
|
77
83
|
read_parquet,
|
|
78
84
|
scan_csv,
|
|
79
85
|
scan_csv_from_cloud_storage,
|
|
@@ -81,6 +87,7 @@ from flowfile_frame import (
|
|
|
81
87
|
scan_json_from_cloud_storage,
|
|
82
88
|
scan_parquet,
|
|
83
89
|
scan_parquet_from_cloud_storage,
|
|
90
|
+
write_database,
|
|
84
91
|
)
|
|
85
92
|
from flowfile_frame.expr import col, column, count, cum_count, len, lit, max, mean, min, sum, when
|
|
86
93
|
from flowfile_frame.flow_frame import FlowFrame
|
|
@@ -125,10 +132,19 @@ __all__ = [
|
|
|
125
132
|
"scan_parquet_from_cloud_storage",
|
|
126
133
|
"scan_json_from_cloud_storage",
|
|
127
134
|
"scan_csv_from_cloud_storage",
|
|
135
|
+
# Cloud storage connection management
|
|
128
136
|
"get_all_available_cloud_storage_connections",
|
|
129
137
|
"create_cloud_storage_connection",
|
|
130
138
|
"del_cloud_storage_connection",
|
|
131
139
|
"create_cloud_storage_connection_if_not_exists",
|
|
140
|
+
# Database functions
|
|
141
|
+
"read_database",
|
|
142
|
+
"write_database",
|
|
143
|
+
"create_database_connection",
|
|
144
|
+
"create_database_connection_if_not_exists",
|
|
145
|
+
"del_database_connection",
|
|
146
|
+
"get_all_available_database_connections",
|
|
147
|
+
"get_database_connection_by_name",
|
|
132
148
|
"FlowGraph",
|
|
133
149
|
"FlowDataEngine",
|
|
134
150
|
"node_interface",
|
flowfile/__main__.py
CHANGED
|
@@ -1,5 +1,88 @@
|
|
|
1
1
|
# flowfile/__main__.py
|
|
2
2
|
|
|
3
|
+
import sys
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def run_flow(flow_path: str) -> int:
|
|
8
|
+
"""
|
|
9
|
+
Load and execute a flow from a YAML/JSON file.
|
|
10
|
+
|
|
11
|
+
Args:
|
|
12
|
+
flow_path: Path to the flow file (.yaml, .yml, or .json)
|
|
13
|
+
|
|
14
|
+
Returns:
|
|
15
|
+
Exit code (0 for success, 1 for failure)
|
|
16
|
+
"""
|
|
17
|
+
# Disable worker communication for CLI execution
|
|
18
|
+
from flowfile_core.configs.settings import OFFLOAD_TO_WORKER
|
|
19
|
+
|
|
20
|
+
OFFLOAD_TO_WORKER.set(False)
|
|
21
|
+
|
|
22
|
+
from flowfile_core.flowfile.manage.io_flowfile import open_flow
|
|
23
|
+
|
|
24
|
+
path = Path(flow_path)
|
|
25
|
+
if not path.exists():
|
|
26
|
+
print(f"Error: File not found: {flow_path}", file=sys.stderr)
|
|
27
|
+
return 1
|
|
28
|
+
|
|
29
|
+
if path.suffix.lower() not in (".yaml", ".yml", ".json"):
|
|
30
|
+
print(f"Error: Unsupported file format: {path.suffix}", file=sys.stderr)
|
|
31
|
+
print("Supported formats: .yaml, .yml, .json", file=sys.stderr)
|
|
32
|
+
return 1
|
|
33
|
+
|
|
34
|
+
print(f"Loading flow from: {flow_path}")
|
|
35
|
+
|
|
36
|
+
try:
|
|
37
|
+
flow = open_flow(path)
|
|
38
|
+
except Exception as e:
|
|
39
|
+
print(f"Error loading flow: {e}", file=sys.stderr)
|
|
40
|
+
return 1
|
|
41
|
+
|
|
42
|
+
# Force local execution for CLI - no worker service needed
|
|
43
|
+
flow.execution_location = "local"
|
|
44
|
+
|
|
45
|
+
# Remove explore_data nodes - they're UI-only and require a worker service
|
|
46
|
+
explore_data_nodes = [n.node_id for n in flow.nodes if n.node_type == "explore_data"]
|
|
47
|
+
for node_id in explore_data_nodes:
|
|
48
|
+
flow.delete_node(node_id)
|
|
49
|
+
if explore_data_nodes:
|
|
50
|
+
print(f"Skipping {len(explore_data_nodes)} explore_data node(s) (UI-only)")
|
|
51
|
+
|
|
52
|
+
flow_name = flow.flow_settings.name or f"Flow {flow.flow_id}"
|
|
53
|
+
print(f"Running flow: {flow_name} (id={flow.flow_id})")
|
|
54
|
+
print(f"Nodes: {len(flow.nodes)}")
|
|
55
|
+
flow.print_tree()
|
|
56
|
+
print("-" * 40)
|
|
57
|
+
|
|
58
|
+
try:
|
|
59
|
+
result = flow.run_graph()
|
|
60
|
+
except Exception as e:
|
|
61
|
+
print(f"Error running flow: {e}", file=sys.stderr)
|
|
62
|
+
return 1
|
|
63
|
+
|
|
64
|
+
if result is None:
|
|
65
|
+
print("Error: Flow execution returned no result", file=sys.stderr)
|
|
66
|
+
return 1
|
|
67
|
+
|
|
68
|
+
# Display results
|
|
69
|
+
print("-" * 40)
|
|
70
|
+
if result.success:
|
|
71
|
+
duration = ""
|
|
72
|
+
if result.start_time and result.end_time:
|
|
73
|
+
duration = f" in {(result.end_time - result.start_time).total_seconds():.2f}s"
|
|
74
|
+
print(f"Flow completed successfully{duration}")
|
|
75
|
+
print(f"Nodes completed: {result.nodes_completed}/{result.number_of_nodes}")
|
|
76
|
+
else:
|
|
77
|
+
print("Flow execution failed", file=sys.stderr)
|
|
78
|
+
for node_result in result.node_step_result:
|
|
79
|
+
if not node_result.success and node_result.error:
|
|
80
|
+
node_name = node_result.node_name or f"Node {node_result.node_id}"
|
|
81
|
+
print(f" - {node_name}: {node_result.error}", file=sys.stderr)
|
|
82
|
+
return 1
|
|
83
|
+
|
|
84
|
+
return 0
|
|
85
|
+
|
|
3
86
|
|
|
4
87
|
def main():
|
|
5
88
|
"""
|
|
@@ -12,8 +95,9 @@ def main():
|
|
|
12
95
|
parser = argparse.ArgumentParser(description="FlowFile: A visual ETL tool with a Polars-like API")
|
|
13
96
|
parser.add_argument("command", nargs="?", choices=["run"], help="Command to execute")
|
|
14
97
|
parser.add_argument(
|
|
15
|
-
"component", nargs="?", choices=["ui", "core", "worker"], help="Component to run
|
|
98
|
+
"component", nargs="?", choices=["ui", "core", "worker", "flow"], help="Component to run"
|
|
16
99
|
)
|
|
100
|
+
parser.add_argument("file_path", nargs="?", help="Path to flow file (for 'flow' component)")
|
|
17
101
|
parser.add_argument("--host", default="127.0.0.1", help="Host to bind the server to")
|
|
18
102
|
parser.add_argument("--port", type=int, default=63578, help="Port to bind the server to")
|
|
19
103
|
parser.add_argument("--no-browser", action="store_true", help="Don't open a browser window")
|
|
@@ -37,6 +121,12 @@ def main():
|
|
|
37
121
|
from flowfile_worker.main import run as run_worker
|
|
38
122
|
|
|
39
123
|
run_worker(host=args.host, port=args.port)
|
|
124
|
+
elif args.component == "flow":
|
|
125
|
+
if not args.file_path:
|
|
126
|
+
print("Error: 'flow' component requires a file path", file=sys.stderr)
|
|
127
|
+
print("Usage: flowfile run flow <path-to-flow-file>", file=sys.stderr)
|
|
128
|
+
sys.exit(1)
|
|
129
|
+
sys.exit(run_flow(args.file_path))
|
|
40
130
|
else:
|
|
41
131
|
# Default action - show info
|
|
42
132
|
print(f"FlowFile v{flowfile.__version__}")
|
|
@@ -45,6 +135,9 @@ def main():
|
|
|
45
135
|
print(" # Start the FlowFile web UI with integrated services")
|
|
46
136
|
print(" flowfile run ui")
|
|
47
137
|
print("")
|
|
138
|
+
print(" # Run a flow from a file")
|
|
139
|
+
print(" flowfile run flow my_pipeline.yaml")
|
|
140
|
+
print("")
|
|
48
141
|
print(" # Advanced: Run individual components")
|
|
49
142
|
print(" flowfile run core # Start only the core service")
|
|
50
143
|
print(" flowfile run worker # Start only the worker service")
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { k as axios, d as defineComponent, h as useAuthStore, G as computed, r as ref, J as onMounted, c as createElementBlock, z as createVNode, A as withCtx, an as Transition, a as createBaseVNode, w as withModifiers, i as withDirectives, v as vModelText, j as vModelDynamic, n as normalizeClass, f as createTextVNode, e as createCommentVNode, au as vModelCheckbox, t as toDisplayString, K as Fragment, L as renderList, o as openBlock, g as _export_sfc } from "./index-ca6799de.js";
|
|
2
2
|
class UserService {
|
|
3
3
|
/**
|
|
4
4
|
* Get all users (admin only)
|
flowfile/web/static/assets/{CloudConnectionView-f13f202b.js → CloudConnectionView-7a3042c6.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { f as fetchCloudStorageConnectionsInterfaces, c as createCloudStorageConnectionApi, d as deleteCloudStorageConnectionApi } from "./api-
|
|
2
|
-
import { d as defineComponent, r as ref,
|
|
1
|
+
import { f as fetchCloudStorageConnectionsInterfaces, c as createCloudStorageConnectionApi, d as deleteCloudStorageConnectionApi } from "./api-ee542cf7.js";
|
|
2
|
+
import { d as defineComponent, r as ref, H as watch, G as computed, o as openBlock, c as createElementBlock, a as createBaseVNode, i as withDirectives, v as vModelText, at as vModelSelect, K as Fragment, L as renderList, t as toDisplayString, e as createCommentVNode, j as vModelDynamic, n as normalizeClass, au as vModelCheckbox, w as withModifiers, J as onMounted, f as createTextVNode, z as createVNode, A as withCtx, B as unref, N as ElMessage, av as ElDialog, aw as ElButton, g as _export_sfc } from "./index-ca6799de.js";
|
|
3
3
|
const _hoisted_1$1 = { class: "form-grid" };
|
|
4
4
|
const _hoisted_2$1 = { class: "form-field" };
|
|
5
5
|
const _hoisted_3$1 = { class: "form-field" };
|
|
@@ -776,8 +776,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
776
776
|
};
|
|
777
777
|
}
|
|
778
778
|
});
|
|
779
|
-
const
|
|
780
|
-
const CloudConnectionView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
779
|
+
const CloudConnectionView_vue_vue_type_style_index_0_scoped_0a624123_lang = "";
|
|
780
|
+
const CloudConnectionView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-0a624123"]]);
|
|
781
781
|
export {
|
|
782
782
|
CloudConnectionView as default
|
|
783
783
|
};
|
flowfile/web/static/assets/{CloudConnectionView-36bcd6df.css → CloudConnectionView-cf85f943.css}
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
|
|
2
|
-
.description-text[data-v-
|
|
2
|
+
.description-text[data-v-0a624123] {
|
|
3
3
|
color: var(--color-text-secondary);
|
|
4
4
|
margin-top: var(--spacing-2);
|
|
5
5
|
font-size: var(--font-size-sm);
|
|
6
6
|
}
|
|
7
|
-
.info-box[data-v-
|
|
7
|
+
.info-box[data-v-0a624123] {
|
|
8
8
|
display: flex;
|
|
9
9
|
gap: var(--spacing-4);
|
|
10
10
|
padding: var(--spacing-4);
|
|
@@ -12,28 +12,28 @@
|
|
|
12
12
|
border-left: 4px solid var(--color-accent);
|
|
13
13
|
border-radius: var(--border-radius-md);
|
|
14
14
|
}
|
|
15
|
-
.info-box i[data-v-
|
|
15
|
+
.info-box i[data-v-0a624123] {
|
|
16
16
|
color: var(--color-accent);
|
|
17
17
|
font-size: var(--font-size-2xl);
|
|
18
18
|
margin-top: var(--spacing-2);
|
|
19
19
|
}
|
|
20
|
-
.info-box p[data-v-
|
|
20
|
+
.info-box p[data-v-0a624123] {
|
|
21
21
|
margin: 0;
|
|
22
22
|
margin-bottom: var(--spacing-2);
|
|
23
23
|
font-size: var(--font-size-sm);
|
|
24
24
|
color: var(--color-text-secondary);
|
|
25
25
|
}
|
|
26
|
-
.info-box p[data-v-
|
|
26
|
+
.info-box p[data-v-0a624123]:last-child {
|
|
27
27
|
margin-bottom: 0;
|
|
28
28
|
}
|
|
29
|
-
.info-box p strong[data-v-
|
|
29
|
+
.info-box p strong[data-v-0a624123] {
|
|
30
30
|
color: var(--color-text-primary);
|
|
31
31
|
}
|
|
32
|
-
.modal-description[data-v-
|
|
32
|
+
.modal-description[data-v-0a624123] {
|
|
33
33
|
color: var(--color-text-secondary);
|
|
34
34
|
font-size: var(--font-size-sm);
|
|
35
35
|
}
|
|
36
|
-
.badge[data-v-
|
|
36
|
+
.badge[data-v-0a624123] {
|
|
37
37
|
background-color: var(--color-accent-subtle);
|
|
38
38
|
color: var(--color-accent);
|
|
39
39
|
border-radius: var(--border-radius-full);
|
|
@@ -42,31 +42,31 @@
|
|
|
42
42
|
font-weight: var(--font-weight-medium);
|
|
43
43
|
margin-left: var(--spacing-2);
|
|
44
44
|
}
|
|
45
|
-
.auth-badge[data-v-
|
|
45
|
+
.auth-badge[data-v-0a624123] {
|
|
46
46
|
background-color: var(--color-info-light);
|
|
47
47
|
color: var(--color-info);
|
|
48
48
|
}
|
|
49
|
-
.connection-details[data-v-
|
|
49
|
+
.connection-details[data-v-0a624123] {
|
|
50
50
|
font-size: var(--font-size-xs);
|
|
51
51
|
color: var(--color-text-tertiary);
|
|
52
52
|
margin-top: var(--spacing-1);
|
|
53
53
|
}
|
|
54
|
-
.separator[data-v-
|
|
54
|
+
.separator[data-v-0a624123] {
|
|
55
55
|
margin: 0 var(--spacing-2);
|
|
56
56
|
}
|
|
57
|
-
.hint-text[data-v-
|
|
57
|
+
.hint-text[data-v-0a624123] {
|
|
58
58
|
color: var(--color-text-tertiary);
|
|
59
59
|
font-size: var(--font-size-sm);
|
|
60
60
|
margin-top: var(--spacing-2);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
/* Cloud-specific styles */
|
|
64
|
-
.fa-brands[data-v-
|
|
64
|
+
.fa-brands[data-v-0a624123] {
|
|
65
65
|
font-size: var(--font-size-xl);
|
|
66
66
|
}
|
|
67
|
-
.fa-aws[data-v-
|
|
68
|
-
color:
|
|
67
|
+
.fa-aws[data-v-0a624123] {
|
|
68
|
+
color: var(--color-brand-aws);
|
|
69
69
|
}
|
|
70
|
-
.fa-microsoft[data-v-
|
|
71
|
-
color:
|
|
70
|
+
.fa-microsoft[data-v-0a624123] {
|
|
71
|
+
color: var(--color-brand-microsoft);
|
|
72
72
|
}
|
flowfile/web/static/assets/{CloudStorageReader-0023d4a5.js → CloudStorageReader-709c4037.js}
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { d as defineComponent, r as ref, o as openBlock, c as createElementBlock,
|
|
2
|
-
import { C as CodeLoader } from "./vue-content-loader.es-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import "./
|
|
7
|
-
import "./index-
|
|
8
|
-
import "./vue-codemirror.esm-
|
|
1
|
+
import { d as defineComponent, l as useNodeStore, r as ref, o as openBlock, c as createElementBlock, z as createVNode, A as withCtx, a as createBaseVNode, i as withDirectives, at as vModelSelect, K as Fragment, L as renderList, t as toDisplayString, f as createTextVNode, e as createCommentVNode, v as vModelText, au as vModelCheckbox, C as createBlock, B as unref, N as ElMessage, g as _export_sfc } from "./index-ca6799de.js";
|
|
2
|
+
import { C as CodeLoader } from "./vue-content-loader.es-808fe33a.js";
|
|
3
|
+
import { f as fetchCloudStorageConnectionsInterfaces } from "./api-ee542cf7.js";
|
|
4
|
+
import { G as GenericNodeSettings } from "./genericNodeSettings-0155288b.js";
|
|
5
|
+
import "./DesignerView-a4466dab.js";
|
|
6
|
+
import "./PopOver-ddcfe4f6.js";
|
|
7
|
+
import "./index-057d770d.js";
|
|
8
|
+
import "./vue-codemirror.esm-8f46fb36.js";
|
|
9
9
|
const createNodeCloudStorageReader = (flowId, nodeId) => {
|
|
10
10
|
const cloudStorageReadSettings = {
|
|
11
11
|
auth_mode: "aws-cli",
|
flowfile/web/static/assets/{CloudStorageWriter-8e781e11.js → CloudStorageWriter-604c51a8.js}
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { d as defineComponent, r as ref, o as openBlock, c as createElementBlock,
|
|
2
|
-
import { C as CodeLoader } from "./vue-content-loader.es-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import "./
|
|
7
|
-
import "./index-
|
|
8
|
-
import "./vue-codemirror.esm-
|
|
1
|
+
import { d as defineComponent, l as useNodeStore, r as ref, o as openBlock, c as createElementBlock, z as createVNode, A as withCtx, a as createBaseVNode, i as withDirectives, at as vModelSelect, K as Fragment, L as renderList, t as toDisplayString, f as createTextVNode, e as createCommentVNode, v as vModelText, C as createBlock, B as unref, N as ElMessage, g as _export_sfc } from "./index-ca6799de.js";
|
|
2
|
+
import { C as CodeLoader } from "./vue-content-loader.es-808fe33a.js";
|
|
3
|
+
import { f as fetchCloudStorageConnectionsInterfaces } from "./api-ee542cf7.js";
|
|
4
|
+
import { G as GenericNodeSettings } from "./genericNodeSettings-0155288b.js";
|
|
5
|
+
import "./DesignerView-a4466dab.js";
|
|
6
|
+
import "./PopOver-ddcfe4f6.js";
|
|
7
|
+
import "./index-057d770d.js";
|
|
8
|
+
import "./vue-codemirror.esm-8f46fb36.js";
|
|
9
9
|
const createNodeCloudStorageWriter = (flowId, nodeId) => {
|
|
10
10
|
const cloudStorageWriteSettings = {
|
|
11
11
|
auth_mode: "aws-cli",
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
|
|
2
|
+
.component-container[data-v-d3070256] {
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
gap: var(--spacing-4);
|
|
6
|
+
}
|
|
7
|
+
.config-section[data-v-d3070256] {
|
|
8
|
+
display: flex;
|
|
9
|
+
flex-direction: column;
|
|
10
|
+
gap: var(--spacing-3);
|
|
11
|
+
padding: var(--spacing-4);
|
|
12
|
+
background-color: var(--color-background-secondary);
|
|
13
|
+
border-radius: var(--border-radius-lg);
|
|
14
|
+
}
|
|
15
|
+
.config-row[data-v-d3070256] {
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
gap: var(--spacing-1);
|
|
19
|
+
}
|
|
20
|
+
.config-label[data-v-d3070256] {
|
|
21
|
+
font-size: var(--font-size-base);
|
|
22
|
+
font-weight: var(--font-weight-medium);
|
|
23
|
+
color: var(--color-text-secondary);
|
|
24
|
+
}
|
|
25
|
+
.column-list-wrapper[data-v-d3070256] {
|
|
26
|
+
margin-top: var(--spacing-2);
|
|
27
|
+
}
|
|
28
|
+
.listbox-subtitle[data-v-d3070256] {
|
|
29
|
+
font-size: var(--font-size-base);
|
|
30
|
+
font-weight: var(--font-weight-semibold);
|
|
31
|
+
color: var(--color-text-primary);
|
|
32
|
+
margin-bottom: var(--spacing-2);
|
|
33
|
+
}
|
|
34
|
+
.listbox[data-v-d3070256] {
|
|
35
|
+
max-height: 200px;
|
|
36
|
+
overflow-y: auto;
|
|
37
|
+
border: 1px solid var(--color-border-primary);
|
|
38
|
+
border-radius: var(--border-radius-lg);
|
|
39
|
+
padding: 0;
|
|
40
|
+
margin: 0;
|
|
41
|
+
list-style: none;
|
|
42
|
+
background-color: var(--color-background-primary);
|
|
43
|
+
}
|
|
44
|
+
.listbox li[data-v-d3070256] {
|
|
45
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
46
|
+
cursor: pointer;
|
|
47
|
+
transition: background-color var(--transition-normal) var(--transition-timing);
|
|
48
|
+
color: var(--color-text-primary);
|
|
49
|
+
}
|
|
50
|
+
.listbox li[data-v-d3070256]:hover {
|
|
51
|
+
background-color: var(--color-background-hover);
|
|
52
|
+
}
|
|
53
|
+
.listbox li.is-selected[data-v-d3070256] {
|
|
54
|
+
background-color: var(--color-background-selected);
|
|
55
|
+
color: var(--color-accent);
|
|
56
|
+
}
|
|
57
|
+
.column-type[data-v-d3070256] {
|
|
58
|
+
font-size: var(--font-size-sm);
|
|
59
|
+
color: var(--color-text-tertiary);
|
|
60
|
+
margin-left: var(--spacing-2);
|
|
61
|
+
}
|
|
62
|
+
.context-menu[data-v-d3070256] {
|
|
63
|
+
position: fixed;
|
|
64
|
+
z-index: var(--z-index-dropdown);
|
|
65
|
+
border: 1px solid var(--color-border-primary);
|
|
66
|
+
background-color: var(--color-background-primary);
|
|
67
|
+
padding: var(--spacing-2);
|
|
68
|
+
box-shadow: var(--shadow-lg);
|
|
69
|
+
border-radius: var(--border-radius-sm);
|
|
70
|
+
user-select: none;
|
|
71
|
+
}
|
|
72
|
+
.context-menu button[data-v-d3070256] {
|
|
73
|
+
display: block;
|
|
74
|
+
background: none;
|
|
75
|
+
border: none;
|
|
76
|
+
padding: var(--spacing-1-5) var(--spacing-3);
|
|
77
|
+
text-align: left;
|
|
78
|
+
width: 100%;
|
|
79
|
+
cursor: pointer;
|
|
80
|
+
border-radius: var(--border-radius-sm);
|
|
81
|
+
font-size: var(--font-size-base);
|
|
82
|
+
color: var(--color-text-primary);
|
|
83
|
+
transition: background-color var(--transition-fast) var(--transition-timing);
|
|
84
|
+
}
|
|
85
|
+
.context-menu button[data-v-d3070256]:hover {
|
|
86
|
+
background-color: var(--color-background-hover);
|
|
87
|
+
}
|
|
88
|
+
.table-wrapper[data-v-d3070256] {
|
|
89
|
+
max-height: 300px;
|
|
90
|
+
box-shadow: var(--shadow-sm);
|
|
91
|
+
border-radius: var(--border-radius-lg);
|
|
92
|
+
overflow: auto;
|
|
93
|
+
border: 1px solid var(--color-border-primary);
|
|
94
|
+
}
|
|
95
|
+
.styled-table[data-v-d3070256] {
|
|
96
|
+
width: 100%;
|
|
97
|
+
border-collapse: collapse;
|
|
98
|
+
font-size: var(--font-size-base);
|
|
99
|
+
background-color: var(--color-background-primary);
|
|
100
|
+
}
|
|
101
|
+
.styled-table thead[data-v-d3070256] {
|
|
102
|
+
background-color: var(--table-header-bg);
|
|
103
|
+
position: sticky;
|
|
104
|
+
top: 0;
|
|
105
|
+
}
|
|
106
|
+
.styled-table th[data-v-d3070256],
|
|
107
|
+
.styled-table td[data-v-d3070256] {
|
|
108
|
+
padding: var(--spacing-2-5) var(--spacing-3);
|
|
109
|
+
text-align: left;
|
|
110
|
+
border-bottom: 1px solid var(--table-border);
|
|
111
|
+
}
|
|
112
|
+
.styled-table th[data-v-d3070256] {
|
|
113
|
+
font-weight: var(--font-weight-semibold);
|
|
114
|
+
color: var(--color-text-secondary);
|
|
115
|
+
}
|
|
116
|
+
.styled-table td[data-v-d3070256] {
|
|
117
|
+
color: var(--color-text-primary);
|
|
118
|
+
}
|
|
119
|
+
.styled-table tbody tr[data-v-d3070256]:hover {
|
|
120
|
+
background-color: var(--table-row-hover);
|
|
121
|
+
}
|
|
122
|
+
.styled-table th[data-v-d3070256]:nth-child(1),
|
|
123
|
+
.styled-table td[data-v-d3070256]:nth-child(1) {
|
|
124
|
+
width: 25%;
|
|
125
|
+
}
|
|
126
|
+
.styled-table th[data-v-d3070256]:nth-child(2),
|
|
127
|
+
.styled-table td[data-v-d3070256]:nth-child(2) {
|
|
128
|
+
width: 25%;
|
|
129
|
+
}
|
|
130
|
+
.styled-table th[data-v-d3070256]:nth-child(3),
|
|
131
|
+
.styled-table td[data-v-d3070256]:nth-child(3) {
|
|
132
|
+
width: 40%;
|
|
133
|
+
}
|
|
134
|
+
.styled-table th[data-v-d3070256]:nth-child(4),
|
|
135
|
+
.styled-table td[data-v-d3070256]:nth-child(4) {
|
|
136
|
+
width: 10%;
|
|
137
|
+
text-align: center;
|
|
138
|
+
}
|
|
139
|
+
.action-cell[data-v-d3070256] {
|
|
140
|
+
text-align: center;
|
|
141
|
+
}
|
|
142
|
+
.action-cell .el-button[data-v-d3070256] {
|
|
143
|
+
padding: var(--spacing-1);
|
|
144
|
+
}
|
|
145
|
+
.empty-state[data-v-d3070256] {
|
|
146
|
+
padding: var(--spacing-8);
|
|
147
|
+
text-align: center;
|
|
148
|
+
color: var(--color-text-secondary);
|
|
149
|
+
background-color: var(--color-background-secondary);
|
|
150
|
+
border-radius: var(--border-radius-lg);
|
|
151
|
+
}
|
|
152
|
+
.empty-state p[data-v-d3070256] {
|
|
153
|
+
margin: 0;
|
|
154
|
+
}
|
|
155
|
+
.empty-state .hint[data-v-d3070256] {
|
|
156
|
+
font-size: var(--font-size-base);
|
|
157
|
+
margin-top: var(--spacing-2);
|
|
158
|
+
color: var(--color-text-tertiary);
|
|
159
|
+
}
|