Flowfile 0.3.5__py3-none-any.whl → 0.3.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of Flowfile might be problematic. Click here for more details.
- flowfile/__init__.py +27 -6
- flowfile/api.py +1 -0
- flowfile/web/__init__.py +2 -2
- flowfile/web/static/assets/CloudConnectionManager-2dfdce2f.css +86 -0
- flowfile/web/static/assets/CloudConnectionManager-c20a740f.js +783 -0
- flowfile/web/static/assets/CloudStorageReader-29d14fcc.css +143 -0
- flowfile/web/static/assets/CloudStorageReader-960b400a.js +437 -0
- flowfile/web/static/assets/CloudStorageWriter-49c9a4b2.css +138 -0
- flowfile/web/static/assets/CloudStorageWriter-e3decbdd.js +430 -0
- flowfile/web/static/assets/{CrossJoin-dfcf7351.js → CrossJoin-d67e2405.js} +8 -8
- flowfile/web/static/assets/{DatabaseConnectionSettings-b2afb1d7.js → DatabaseConnectionSettings-a81e0f7e.js} +2 -2
- flowfile/web/static/assets/{DatabaseManager-824a49b2.js → DatabaseManager-9ea35e84.js} +2 -2
- flowfile/web/static/assets/{DatabaseReader-a48124d8.js → DatabaseReader-9578bfa5.js} +9 -9
- flowfile/web/static/assets/{DatabaseWriter-b47cbae2.js → DatabaseWriter-19531098.js} +9 -9
- flowfile/web/static/assets/{ExploreData-fdfc45a4.js → ExploreData-40476474.js} +47141 -43697
- flowfile/web/static/assets/{ExternalSource-861b0e71.js → ExternalSource-2297ef96.js} +6 -6
- flowfile/web/static/assets/{Filter-f87bb897.js → Filter-f211c03a.js} +8 -8
- flowfile/web/static/assets/{Formula-b8cefc31.css → Formula-29f19d21.css} +10 -0
- flowfile/web/static/assets/{Formula-1e2ed720.js → Formula-4207ea31.js} +75 -9
- flowfile/web/static/assets/{FuzzyMatch-b6cc4fdd.js → FuzzyMatch-bf120df0.js} +9 -9
- flowfile/web/static/assets/{GraphSolver-6a371f4c.js → GraphSolver-5bb7497a.js} +5 -5
- flowfile/web/static/assets/{GroupBy-f7b7f472.js → GroupBy-92c81b65.js} +6 -6
- flowfile/web/static/assets/{Join-eec38203.js → Join-4e49a274.js} +23 -15
- flowfile/web/static/assets/{Join-41c0f331.css → Join-f45eff22.css} +20 -20
- flowfile/web/static/assets/{ManualInput-9aaa46fb.js → ManualInput-90998ae8.js} +106 -34
- flowfile/web/static/assets/{ManualInput-ac7b9972.css → ManualInput-a71b52c6.css} +29 -17
- flowfile/web/static/assets/{Output-3b2ca045.js → Output-81e3e917.js} +4 -4
- flowfile/web/static/assets/{Pivot-a4f5d88f.js → Pivot-a3419842.js} +6 -6
- flowfile/web/static/assets/{PolarsCode-49ce444f.js → PolarsCode-72710deb.js} +6 -6
- flowfile/web/static/assets/{Read-07acdc9a.js → Read-c4059daf.js} +6 -6
- flowfile/web/static/assets/{RecordCount-6a21da56.js → RecordCount-c2b5e095.js} +5 -5
- flowfile/web/static/assets/{RecordId-949bdc17.js → RecordId-10baf191.js} +6 -6
- flowfile/web/static/assets/{Sample-7afca6e1.js → Sample-3ed9a0ae.js} +5 -5
- flowfile/web/static/assets/{SecretManager-b41c029d.js → SecretManager-0d49c0e8.js} +2 -2
- flowfile/web/static/assets/{Select-32b28406.js → Select-8a02a0b3.js} +8 -8
- flowfile/web/static/assets/{SettingsSection-a0f15a05.js → SettingsSection-4c0f45f5.js} +1 -1
- flowfile/web/static/assets/{Sort-fc6ba0e2.js → Sort-f55c9f9d.js} +6 -6
- flowfile/web/static/assets/{TextToRows-23127596.js → TextToRows-5dbc2145.js} +8 -8
- flowfile/web/static/assets/{UnavailableFields-c42880a3.js → UnavailableFields-a1768e52.js} +2 -2
- flowfile/web/static/assets/{Union-39eecc6c.js → Union-f2aefdc9.js} +5 -5
- flowfile/web/static/assets/{Unique-a0e8fe61.js → Unique-46b250da.js} +8 -8
- flowfile/web/static/assets/{Unpivot-1e2d43f0.js → Unpivot-25ac84cc.js} +5 -5
- flowfile/web/static/assets/api-6ef0dcef.js +80 -0
- flowfile/web/static/assets/{api-44ca9e9c.js → api-a0abbdc7.js} +1 -1
- flowfile/web/static/assets/cloud_storage_reader-aa1415d6.png +0 -0
- flowfile/web/static/assets/{designer-267d44f1.js → designer-13eabd83.js} +36 -34
- flowfile/web/static/assets/{documentation-6c0810a2.js → documentation-b87e7f6f.js} +1 -1
- flowfile/web/static/assets/{dropDown-52790b15.js → dropDown-13564764.js} +1 -1
- flowfile/web/static/assets/{fullEditor-e272b506.js → fullEditor-fd2cd6f9.js} +2 -2
- flowfile/web/static/assets/{genericNodeSettings-4bdcf98e.js → genericNodeSettings-71e11604.js} +3 -3
- flowfile/web/static/assets/{index-e235a8bc.js → index-f6c15e76.js} +59 -22
- flowfile/web/static/assets/{nodeTitle-fc3fc4b7.js → nodeTitle-988d9efe.js} +3 -3
- flowfile/web/static/assets/{secretApi-cdc2a3fd.js → secretApi-dd636aa2.js} +1 -1
- flowfile/web/static/assets/{selectDynamic-96aa82cd.js → selectDynamic-af36165e.js} +3 -3
- flowfile/web/static/assets/{vue-codemirror.esm-25e75a08.js → vue-codemirror.esm-2847001e.js} +2 -1
- flowfile/web/static/assets/{vue-content-loader.es-6c4b1c24.js → vue-content-loader.es-0371da73.js} +1 -1
- flowfile/web/static/index.html +1 -1
- {flowfile-0.3.5.dist-info → flowfile-0.3.7.dist-info}/METADATA +9 -4
- {flowfile-0.3.5.dist-info → flowfile-0.3.7.dist-info}/RECORD +131 -124
- {flowfile-0.3.5.dist-info → flowfile-0.3.7.dist-info}/entry_points.txt +2 -0
- flowfile_core/__init__.py +3 -0
- flowfile_core/auth/jwt.py +39 -0
- flowfile_core/configs/node_store/nodes.py +9 -6
- flowfile_core/configs/settings.py +6 -5
- flowfile_core/database/connection.py +63 -15
- flowfile_core/database/init_db.py +0 -1
- flowfile_core/database/models.py +49 -2
- flowfile_core/flowfile/code_generator/code_generator.py +472 -17
- flowfile_core/flowfile/connection_manager/models.py +1 -1
- flowfile_core/flowfile/database_connection_manager/db_connections.py +216 -2
- flowfile_core/flowfile/extensions.py +1 -1
- flowfile_core/flowfile/flow_data_engine/cloud_storage_reader.py +259 -0
- flowfile_core/flowfile/flow_data_engine/create/funcs.py +19 -8
- flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +1062 -311
- flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +12 -2
- flowfile_core/flowfile/flow_data_engine/fuzzy_matching/settings_validator.py +1 -1
- flowfile_core/flowfile/flow_data_engine/join/__init__.py +2 -1
- flowfile_core/flowfile/flow_data_engine/join/utils.py +25 -0
- flowfile_core/flowfile/flow_data_engine/polars_code_parser.py +3 -1
- flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +29 -22
- flowfile_core/flowfile/flow_data_engine/utils.py +1 -40
- flowfile_core/flowfile/flow_graph.py +718 -253
- flowfile_core/flowfile/flow_graph_utils.py +2 -2
- flowfile_core/flowfile/flow_node/flow_node.py +563 -117
- flowfile_core/flowfile/flow_node/models.py +154 -20
- flowfile_core/flowfile/flow_node/schema_callback.py +3 -2
- flowfile_core/flowfile/handler.py +2 -33
- flowfile_core/flowfile/manage/open_flowfile.py +1 -2
- flowfile_core/flowfile/sources/external_sources/__init__.py +0 -2
- flowfile_core/flowfile/sources/external_sources/factory.py +4 -7
- flowfile_core/flowfile/util/calculate_layout.py +0 -2
- flowfile_core/flowfile/utils.py +35 -26
- flowfile_core/main.py +35 -15
- flowfile_core/routes/cloud_connections.py +77 -0
- flowfile_core/routes/logs.py +2 -7
- flowfile_core/routes/public.py +1 -0
- flowfile_core/routes/routes.py +130 -90
- flowfile_core/routes/secrets.py +72 -14
- flowfile_core/schemas/__init__.py +8 -0
- flowfile_core/schemas/cloud_storage_schemas.py +215 -0
- flowfile_core/schemas/input_schema.py +121 -71
- flowfile_core/schemas/output_model.py +19 -3
- flowfile_core/schemas/schemas.py +150 -12
- flowfile_core/schemas/transform_schema.py +175 -35
- flowfile_core/utils/utils.py +40 -1
- flowfile_core/utils/validate_setup.py +41 -0
- flowfile_frame/__init__.py +9 -1
- flowfile_frame/cloud_storage/frame_helpers.py +39 -0
- flowfile_frame/cloud_storage/secret_manager.py +73 -0
- flowfile_frame/expr.py +28 -1
- flowfile_frame/expr.pyi +76 -61
- flowfile_frame/flow_frame.py +481 -208
- flowfile_frame/flow_frame.pyi +140 -91
- flowfile_frame/flow_frame_methods.py +160 -22
- flowfile_frame/group_frame.py +3 -0
- flowfile_frame/utils.py +25 -3
- flowfile_worker/external_sources/s3_source/main.py +216 -0
- flowfile_worker/external_sources/s3_source/models.py +142 -0
- flowfile_worker/funcs.py +51 -6
- flowfile_worker/models.py +22 -2
- flowfile_worker/routes.py +40 -38
- flowfile_worker/utils.py +1 -1
- test_utils/s3/commands.py +46 -0
- test_utils/s3/data_generator.py +292 -0
- test_utils/s3/demo_data_generator.py +186 -0
- test_utils/s3/fixtures.py +214 -0
- flowfile/web/static/assets/AirbyteReader-1ac35765.css +0 -314
- flowfile/web/static/assets/AirbyteReader-e08044e5.js +0 -922
- flowfile/web/static/assets/dropDownGeneric-60f56a8a.js +0 -72
- flowfile/web/static/assets/dropDownGeneric-895680d6.css +0 -10
- flowfile_core/flowfile/sources/external_sources/airbyte_sources/airbyte.py +0 -159
- flowfile_core/flowfile/sources/external_sources/airbyte_sources/models.py +0 -172
- flowfile_core/flowfile/sources/external_sources/airbyte_sources/settings.py +0 -173
- flowfile_core/schemas/defaults.py +0 -9
- flowfile_core/schemas/external_sources/airbyte_schemas.py +0 -20
- flowfile_core/schemas/models.py +0 -193
- flowfile_worker/external_sources/airbyte_sources/cache_manager.py +0 -161
- flowfile_worker/external_sources/airbyte_sources/main.py +0 -89
- flowfile_worker/external_sources/airbyte_sources/models.py +0 -133
- flowfile_worker/external_sources/airbyte_sources/settings.py +0 -0
- {flowfile-0.3.5.dist-info → flowfile-0.3.7.dist-info}/LICENSE +0 -0
- {flowfile-0.3.5.dist-info → flowfile-0.3.7.dist-info}/WHEEL +0 -0
- {flowfile_core/flowfile/sources/external_sources/airbyte_sources → flowfile_frame/cloud_storage}/__init__.py +0 -0
- {flowfile_core/schemas/external_sources → flowfile_worker/external_sources/s3_source}/__init__.py +0 -0
- {flowfile_worker/external_sources/airbyte_sources → test_utils/s3}/__init__.py +0 -0
flowfile_core/schemas/schemas.py
CHANGED
|
@@ -1,27 +1,70 @@
|
|
|
1
|
-
from
|
|
2
|
-
from
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
from typing import Optional, List, Dict, Tuple, Any, Literal, Annotated
|
|
2
|
+
from pydantic import BaseModel, field_validator, ConfigDict, Field, StringConstraints
|
|
3
|
+
from flowfile_core.flowfile.utils import create_unique_id
|
|
5
4
|
ExecutionModeLiteral = Literal['Development', 'Performance']
|
|
6
5
|
ExecutionLocationsLiteral = Literal['auto', 'local', 'remote']
|
|
7
6
|
|
|
8
7
|
|
|
9
|
-
class
|
|
10
|
-
|
|
8
|
+
class FlowGraphConfig(BaseModel):
|
|
9
|
+
"""
|
|
10
|
+
Configuration model for a flow graph's basic properties.
|
|
11
|
+
|
|
12
|
+
Attributes:
|
|
13
|
+
flow_id (int): Unique identifier for the flow.
|
|
14
|
+
description (Optional[str]): A description of the flow.
|
|
15
|
+
save_location (Optional[str]): The location where the flow is saved.
|
|
16
|
+
name (str): The name of the flow.
|
|
17
|
+
path (str): The file path associated with the flow.
|
|
18
|
+
execution_mode (ExecutionModeLiteral): The mode of execution ('Development' or 'Performance').
|
|
19
|
+
execution_location (ExecutionLocationsLiteral): The location for execution ('auto', 'local', 'remote').
|
|
20
|
+
"""
|
|
21
|
+
flow_id: int = Field(default_factory=create_unique_id, description="Unique identifier for the flow.")
|
|
11
22
|
description: Optional[str] = None
|
|
12
23
|
save_location: Optional[str] = None
|
|
13
|
-
auto_save: bool = False
|
|
14
24
|
name: str = ''
|
|
15
|
-
|
|
16
|
-
path: str
|
|
25
|
+
path: str = ''
|
|
17
26
|
execution_mode: ExecutionModeLiteral = 'Performance'
|
|
27
|
+
execution_location: ExecutionLocationsLiteral = "auto"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class FlowSettings(FlowGraphConfig):
|
|
31
|
+
"""
|
|
32
|
+
Extends FlowGraphConfig with additional operational settings for a flow.
|
|
33
|
+
|
|
34
|
+
Attributes:
|
|
35
|
+
auto_save (bool): Flag to enable or disable automatic saving.
|
|
36
|
+
modified_on (Optional[float]): Timestamp of the last modification.
|
|
37
|
+
show_detailed_progress (bool): Flag to show detailed progress during execution.
|
|
38
|
+
is_running (bool): Indicates if the flow is currently running.
|
|
39
|
+
is_canceled (bool): Indicates if the flow execution has been canceled.
|
|
40
|
+
"""
|
|
41
|
+
auto_save: bool = False
|
|
42
|
+
modified_on: Optional[float] = None
|
|
18
43
|
show_detailed_progress: bool = True
|
|
19
44
|
is_running: bool = False
|
|
20
45
|
is_canceled: bool = False
|
|
21
|
-
|
|
46
|
+
|
|
47
|
+
@classmethod
|
|
48
|
+
def from_flow_settings_input(cls, flow_graph_config: FlowGraphConfig):
|
|
49
|
+
"""
|
|
50
|
+
Creates a FlowSettings instance from a FlowGraphConfig instance.
|
|
51
|
+
|
|
52
|
+
:param flow_graph_config: The base flow graph configuration.
|
|
53
|
+
:return: A new instance of FlowSettings with data from flow_graph_config.
|
|
54
|
+
"""
|
|
55
|
+
return cls.model_validate(flow_graph_config.model_dump())
|
|
22
56
|
|
|
23
57
|
|
|
24
58
|
class RawLogInput(BaseModel):
|
|
59
|
+
"""
|
|
60
|
+
Schema for a raw log message.
|
|
61
|
+
|
|
62
|
+
Attributes:
|
|
63
|
+
flowfile_flow_id (int): The ID of the flow that generated the log.
|
|
64
|
+
log_message (str): The content of the log message.
|
|
65
|
+
log_type (Literal["INFO", "ERROR"]): The type of log.
|
|
66
|
+
extra (Optional[dict]): Extra context data for the log.
|
|
67
|
+
"""
|
|
25
68
|
flowfile_flow_id: int
|
|
26
69
|
log_message: str
|
|
27
70
|
log_type: Literal["INFO", "ERROR"]
|
|
@@ -29,6 +72,20 @@ class RawLogInput(BaseModel):
|
|
|
29
72
|
|
|
30
73
|
|
|
31
74
|
class NodeTemplate(BaseModel):
|
|
75
|
+
"""
|
|
76
|
+
Defines the template for a node type, specifying its UI and functional characteristics.
|
|
77
|
+
|
|
78
|
+
Attributes:
|
|
79
|
+
name (str): The display name of the node.
|
|
80
|
+
item (str): The unique identifier for the node type.
|
|
81
|
+
input (int): The number of required input connections.
|
|
82
|
+
output (int): The number of output connections.
|
|
83
|
+
image (str): The filename of the icon for the node.
|
|
84
|
+
multi (bool): Whether the node accepts multiple main input connections.
|
|
85
|
+
node_group (str): The category group the node belongs to (e.g., 'input', 'transform').
|
|
86
|
+
prod_ready (bool): Whether the node is considered production-ready.
|
|
87
|
+
can_be_start (bool): Whether the node can be a starting point in a flow.
|
|
88
|
+
"""
|
|
32
89
|
name: str
|
|
33
90
|
item: str
|
|
34
91
|
input: int
|
|
@@ -41,6 +98,22 @@ class NodeTemplate(BaseModel):
|
|
|
41
98
|
|
|
42
99
|
|
|
43
100
|
class NodeInformation(BaseModel):
|
|
101
|
+
"""
|
|
102
|
+
Stores the state and configuration of a specific node instance within a flow.
|
|
103
|
+
|
|
104
|
+
Attributes:
|
|
105
|
+
id (Optional[int]): The unique ID of the node instance.
|
|
106
|
+
type (Optional[str]): The type of the node (e.g., 'join', 'filter').
|
|
107
|
+
is_setup (Optional[bool]): Whether the node has been configured.
|
|
108
|
+
description (Optional[str]): A user-provided description.
|
|
109
|
+
x_position (Optional[int]): The x-coordinate on the canvas.
|
|
110
|
+
y_position (Optional[int]): The y-coordinate on the canvas.
|
|
111
|
+
left_input_id (Optional[int]): The ID of the node connected to the left input.
|
|
112
|
+
right_input_id (Optional[int]): The ID of the node connected to the right input.
|
|
113
|
+
input_ids (Optional[List[int]]): A list of IDs for main input nodes.
|
|
114
|
+
outputs (Optional[List[int]]): A list of IDs for nodes this node outputs to.
|
|
115
|
+
setting_input (Optional[Any]): The specific settings for this node instance.
|
|
116
|
+
"""
|
|
44
117
|
id: Optional[int] = None
|
|
45
118
|
type: Optional[str] = None
|
|
46
119
|
is_setup: Optional[bool] = None
|
|
@@ -54,15 +127,34 @@ class NodeInformation(BaseModel):
|
|
|
54
127
|
setting_input: Optional[Any] = None
|
|
55
128
|
|
|
56
129
|
@property
|
|
57
|
-
def data(self):
|
|
130
|
+
def data(self) -> Any:
|
|
131
|
+
"""
|
|
132
|
+
Property to access the node's specific settings.
|
|
133
|
+
:return: The settings of the node.
|
|
134
|
+
"""
|
|
58
135
|
return self.setting_input
|
|
59
136
|
|
|
60
137
|
@property
|
|
61
|
-
def main_input_ids(self):
|
|
138
|
+
def main_input_ids(self) -> Optional[List[int]]:
|
|
139
|
+
"""
|
|
140
|
+
Property to access the main input node IDs.
|
|
141
|
+
:return: A list of main input node IDs.
|
|
142
|
+
"""
|
|
62
143
|
return self.input_ids
|
|
63
144
|
|
|
64
145
|
|
|
65
146
|
class FlowInformation(BaseModel):
|
|
147
|
+
"""
|
|
148
|
+
Represents the complete state of a flow, including settings, nodes, and connections.
|
|
149
|
+
|
|
150
|
+
Attributes:
|
|
151
|
+
flow_id (int): The unique ID of the flow.
|
|
152
|
+
flow_name (Optional[str]): The name of the flow.
|
|
153
|
+
flow_settings (FlowSettings): The settings for the flow.
|
|
154
|
+
data (Dict[int, NodeInformation]): A dictionary mapping node IDs to their information.
|
|
155
|
+
node_starts (List[int]): A list of starting node IDs.
|
|
156
|
+
node_connections (List[Tuple[int, int]]): A list of tuples representing connections between nodes.
|
|
157
|
+
"""
|
|
66
158
|
flow_id: int
|
|
67
159
|
flow_name: Optional[str] = ''
|
|
68
160
|
flow_settings: FlowSettings
|
|
@@ -72,16 +164,39 @@ class FlowInformation(BaseModel):
|
|
|
72
164
|
|
|
73
165
|
@field_validator('flow_name', mode="before")
|
|
74
166
|
def ensure_string(cls, v):
|
|
167
|
+
"""
|
|
168
|
+
Validator to ensure the flow_name is always a string.
|
|
169
|
+
:param v: The value to validate.
|
|
170
|
+
:return: The value as a string, or an empty string if it's None.
|
|
171
|
+
"""
|
|
75
172
|
return str(v) if v is not None else ''
|
|
76
173
|
|
|
77
174
|
|
|
78
175
|
class NodeInput(NodeTemplate):
|
|
176
|
+
"""
|
|
177
|
+
Represents a node as it is received from the frontend, including position.
|
|
178
|
+
|
|
179
|
+
Attributes:
|
|
180
|
+
id (int): The unique ID of the node instance.
|
|
181
|
+
pos_x (float): The x-coordinate on the canvas.
|
|
182
|
+
pos_y (float): The y-coordinate on the canvas.
|
|
183
|
+
"""
|
|
79
184
|
id: int
|
|
80
185
|
pos_x: float
|
|
81
186
|
pos_y: float
|
|
82
187
|
|
|
83
188
|
|
|
84
189
|
class NodeEdge(BaseModel):
|
|
190
|
+
"""
|
|
191
|
+
Represents a connection (edge) between two nodes in the frontend.
|
|
192
|
+
|
|
193
|
+
Attributes:
|
|
194
|
+
id (str): A unique identifier for the edge.
|
|
195
|
+
source (str): The ID of the source node.
|
|
196
|
+
target (str): The ID of the target node.
|
|
197
|
+
targetHandle (str): The specific input handle on the target node.
|
|
198
|
+
sourceHandle (str): The specific output handle on the source node.
|
|
199
|
+
"""
|
|
85
200
|
model_config = ConfigDict(coerce_numbers_to_str=True)
|
|
86
201
|
id: str
|
|
87
202
|
source: str
|
|
@@ -91,16 +206,39 @@ class NodeEdge(BaseModel):
|
|
|
91
206
|
|
|
92
207
|
|
|
93
208
|
class VueFlowInput(BaseModel):
|
|
209
|
+
"""
|
|
210
|
+
|
|
211
|
+
Represents the complete graph structure from the Vue-based frontend.
|
|
212
|
+
|
|
213
|
+
Attributes:
|
|
214
|
+
node_edges (List[NodeEdge]): A list of all edges in the graph.
|
|
215
|
+
node_inputs (List[NodeInput]): A list of all nodes in the graph.
|
|
216
|
+
"""
|
|
94
217
|
node_edges: List[NodeEdge]
|
|
95
218
|
node_inputs: List[NodeInput]
|
|
96
219
|
|
|
97
220
|
|
|
221
|
+
# Type literals for classifying nodes.
|
|
98
222
|
NodeTypeLiteral = Literal['input', 'output', 'process']
|
|
99
223
|
TransformTypeLiteral = Literal['narrow', 'wide', 'other']
|
|
100
224
|
|
|
101
225
|
|
|
102
226
|
class NodeDefault(BaseModel):
|
|
227
|
+
"""
|
|
228
|
+
Defines default properties for a node type.
|
|
229
|
+
|
|
230
|
+
Attributes:
|
|
231
|
+
node_name (str): The name of the node.
|
|
232
|
+
node_type (NodeTypeLiteral): The functional type of the node ('input', 'output', 'process').
|
|
233
|
+
transform_type (TransformTypeLiteral): The data transformation behavior ('narrow', 'wide', 'other').
|
|
234
|
+
has_default_settings (Optional[Any]): Indicates if the node has predefined default settings.
|
|
235
|
+
"""
|
|
103
236
|
node_name: str
|
|
104
237
|
node_type: NodeTypeLiteral
|
|
105
238
|
transform_type: TransformTypeLiteral
|
|
106
239
|
has_default_settings: Optional[Any] = None
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
# Define SecretRef here if not in a common location
|
|
243
|
+
SecretRef = Annotated[str, StringConstraints(min_length=1, max_length=100),
|
|
244
|
+
Field(description="An ID referencing an encrypted secret.")]
|