Flowfile 0.3.1.2__py3-none-any.whl → 0.3.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of Flowfile might be problematic. Click here for more details.

Files changed (100) hide show
  1. flowfile/__init__.py +2 -1
  2. flowfile/api.py +5 -3
  3. flowfile/web/__init__.py +3 -0
  4. flowfile/web/static/assets/{AirbyteReader-cb0c1d4a.js → AirbyteReader-2b1cf2d8.js} +10 -9
  5. flowfile/web/static/assets/{CrossJoin-a514fa59.js → CrossJoin-cc3ab73c.js} +8 -8
  6. flowfile/web/static/assets/{DatabaseConnectionSettings-f2cecf33.js → DatabaseConnectionSettings-307c4652.js} +2 -2
  7. flowfile/web/static/assets/{DatabaseManager-83ee3c98.js → DatabaseManager-69faa6e1.js} +10 -6
  8. flowfile/web/static/assets/{DatabaseReader-dc0c6881.js → DatabaseReader-e4134cd0.js} +9 -9
  9. flowfile/web/static/assets/{DatabaseWriter-5afe9f8d.js → DatabaseWriter-d32d75b1.js} +9 -9
  10. flowfile/web/static/assets/{ExploreData-c7ee19cf.js → ExploreData-5eb48389.js} +18639 -18629
  11. flowfile/web/static/assets/{ExternalSource-17b23a01.js → ExternalSource-29489051.js} +8 -21
  12. flowfile/web/static/assets/{Filter-90856b4f.js → Filter-031332bb.js} +9 -9
  13. flowfile/web/static/assets/{Formula-38b71e9e.js → Formula-3b900540.js} +15 -15
  14. flowfile/web/static/assets/{Formula-d60a74f4.css → Formula-b8cefc31.css} +4 -4
  15. flowfile/web/static/assets/{FuzzyMatch-d0f1fe81.js → FuzzyMatch-dee31153.js} +9 -9
  16. flowfile/web/static/assets/{GraphSolver-0c86bbc6.js → GraphSolver-ca74eb47.js} +5 -5
  17. flowfile/web/static/assets/{GroupBy-f2772e9f.js → GroupBy-081b6591.js} +8 -7
  18. flowfile/web/static/assets/{Join-bc3e1cf7.js → Join-b467376f.js} +11 -10
  19. flowfile/web/static/assets/{ManualInput-03aa0245.js → ManualInput-ffffb80a.js} +11 -8
  20. flowfile/web/static/assets/{Output-5b35eee8.js → Output-9a87d4ba.js} +4 -4
  21. flowfile/web/static/assets/{Pivot-7164087c.js → Pivot-ee3e6093.js} +8 -7
  22. flowfile/web/static/assets/{PolarsCode-3abf6507.js → PolarsCode-03921254.js} +13 -11
  23. flowfile/web/static/assets/{PopOver-b37ff9be.js → PopOver-3bdf8951.js} +1 -1
  24. flowfile/web/static/assets/{Read-65966a3e.js → Read-67fee3a0.js} +6 -6
  25. flowfile/web/static/assets/{RecordCount-c66c6d6d.js → RecordCount-a2acd02d.js} +7 -6
  26. flowfile/web/static/assets/{RecordId-826dc095.js → RecordId-0c8bcd77.js} +10 -8
  27. flowfile/web/static/assets/{Sample-4ed555c8.js → Sample-60594a3a.js} +7 -6
  28. flowfile/web/static/assets/{SecretManager-eac1e97d.js → SecretManager-bbcec2ac.js} +2 -2
  29. flowfile/web/static/assets/{Select-085f05cc.js → Select-9540e6ca.js} +8 -8
  30. flowfile/web/static/assets/{SettingsSection-1f5e79c1.js → SettingsSection-48f28104.js} +1 -1
  31. flowfile/web/static/assets/{Sort-3e6cb414.js → Sort-6dbe3633.js} +6 -6
  32. flowfile/web/static/assets/{TextToRows-606349bc.js → TextToRows-27aab4a8.js} +18 -13
  33. flowfile/web/static/assets/{UnavailableFields-b41976ed.js → UnavailableFields-8143044b.js} +2 -2
  34. flowfile/web/static/assets/{Union-fca91665.js → Union-52460248.js} +7 -6
  35. flowfile/web/static/assets/{Unique-a59f830e.js → Unique-f6962644.js} +8 -8
  36. flowfile/web/static/assets/{Unpivot-c3815565.js → Unpivot-1ff1e938.js} +5 -5
  37. flowfile/web/static/assets/{api-22b338bd.js → api-3b345d92.js} +1 -1
  38. flowfile/web/static/assets/{designer-e5bbe26f.js → designer-4736134f.js} +72 -42
  39. flowfile/web/static/assets/{documentation-08045cf2.js → documentation-b9545eba.js} +1 -1
  40. flowfile/web/static/assets/{dropDown-5e7e9a5a.js → dropDown-d5a4014c.js} +1 -1
  41. flowfile/web/static/assets/{dropDownGeneric-50a91b99.js → dropDownGeneric-1f4e32ec.js} +2 -2
  42. flowfile/web/static/assets/{fullEditor-705c6ccb.js → fullEditor-f4791c23.js} +3 -3
  43. flowfile/web/static/assets/{genericNodeSettings-65587f20.js → genericNodeSettings-1d456350.js} +3 -3
  44. flowfile/web/static/assets/{index-552863fd.js → index-f25c9283.js} +2608 -1570
  45. flowfile/web/static/assets/{nodeTitle-cf9bae3c.js → nodeTitle-cad6fd9d.js} +3 -3
  46. flowfile/web/static/assets/{secretApi-3ad510e1.js → secretApi-01f07e2c.js} +1 -1
  47. flowfile/web/static/assets/{selectDynamic-bd644891.js → selectDynamic-f46a4e3f.js} +3 -3
  48. flowfile/web/static/assets/{vue-codemirror.esm-dd17b478.js → vue-codemirror.esm-eb98fc8b.js} +15 -14
  49. flowfile/web/static/assets/{vue-content-loader.es-6b36f05e.js → vue-content-loader.es-860c0380.js} +1 -1
  50. flowfile/web/static/index.html +1 -1
  51. {flowfile-0.3.1.2.dist-info → flowfile-0.3.3.dist-info}/METADATA +1 -3
  52. {flowfile-0.3.1.2.dist-info → flowfile-0.3.3.dist-info}/RECORD +97 -88
  53. flowfile_core/configs/__init__.py +15 -4
  54. flowfile_core/configs/node_store/nodes.py +2 -4
  55. flowfile_core/configs/settings.py +5 -3
  56. flowfile_core/configs/utils.py +18 -0
  57. flowfile_core/flowfile/FlowfileFlow.py +84 -29
  58. flowfile_core/flowfile/database_connection_manager/db_connections.py +1 -1
  59. flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +55 -18
  60. flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +42 -9
  61. flowfile_core/flowfile/flow_data_engine/flow_file_column/utils.py +42 -3
  62. flowfile_core/flowfile/flow_data_engine/polars_code_parser.py +34 -2
  63. flowfile_core/flowfile/flow_data_engine/sample_data.py +25 -7
  64. flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +4 -3
  65. flowfile_core/flowfile/flow_data_engine/utils.py +1 -0
  66. flowfile_core/flowfile/flow_graph_utils.py +320 -0
  67. flowfile_core/flowfile/flow_node/flow_node.py +2 -1
  68. flowfile_core/flowfile/sources/external_sources/airbyte_sources/models.py +2 -2
  69. flowfile_core/flowfile/sources/external_sources/custom_external_sources/__init__.py +0 -1
  70. flowfile_core/flowfile/sources/external_sources/sql_source/sql_source.py +1 -1
  71. flowfile_core/flowfile/utils.py +34 -3
  72. flowfile_core/main.py +2 -3
  73. flowfile_core/routes/secrets.py +1 -1
  74. flowfile_core/schemas/input_schema.py +12 -14
  75. flowfile_core/schemas/transform_schema.py +25 -47
  76. flowfile_frame/__init__.py +11 -4
  77. flowfile_frame/adding_expr.py +280 -0
  78. flowfile_frame/config.py +9 -0
  79. flowfile_frame/expr.py +301 -83
  80. flowfile_frame/expr.pyi +2174 -0
  81. flowfile_frame/expr_name.py +258 -0
  82. flowfile_frame/flow_frame.py +616 -627
  83. flowfile_frame/flow_frame.pyi +336 -0
  84. flowfile_frame/flow_frame_methods.py +617 -0
  85. flowfile_frame/group_frame.py +89 -42
  86. flowfile_frame/join.py +1 -2
  87. flowfile_frame/lazy.py +704 -0
  88. flowfile_frame/lazy_methods.py +201 -0
  89. flowfile_frame/list_name_space.py +324 -0
  90. flowfile_frame/selectors.py +3 -0
  91. flowfile_frame/series.py +70 -0
  92. flowfile_frame/utils.py +80 -4
  93. flowfile/web/static/assets/GoogleSheet-854294a4.js +0 -2616
  94. flowfile/web/static/assets/GoogleSheet-92084da7.css +0 -233
  95. flowfile_core/flowfile/sources/external_sources/custom_external_sources/google_sheet.py +0 -74
  96. {flowfile-0.3.1.2.dist-info → flowfile-0.3.3.dist-info}/LICENSE +0 -0
  97. {flowfile-0.3.1.2.dist-info → flowfile-0.3.3.dist-info}/WHEEL +0 -0
  98. {flowfile-0.3.1.2.dist-info → flowfile-0.3.3.dist-info}/entry_points.txt +0 -0
  99. /flowfile_core/{secrets → secret_manager}/__init__.py +0 -0
  100. /flowfile_core/{secrets/secrets.py → secret_manager/secret_manager.py} +0 -0
@@ -1,233 +0,0 @@
1
-
2
- .context-menu[data-v-f96970aa] {
3
- position: fixed;
4
- z-index: 1000;
5
- border: 1px solid #ccc;
6
- background-color: white;
7
- padding: 8px;
8
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
9
- border-radius: 4px;
10
- user-select: none;
11
- }
12
- .context-menu button[data-v-f96970aa] {
13
- display: block;
14
- background: none;
15
- border: none;
16
- padding: 4px 8px;
17
- text-align: left;
18
- width: 100%;
19
- cursor: pointer;
20
- z-index: 1;
21
- }
22
- .context-menu button[data-v-f96970aa]:hover {
23
- background-color: #f0f0f0;
24
- }
25
- .selected[data-v-f96970aa] {
26
- background-color: #e0f7fa;
27
- }
28
- .table-wrapper[data-v-f96970aa] {
29
- position: relative;
30
- max-height: 300px;
31
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
32
- border-radius: 8px;
33
- overflow: auto;
34
- margin: 5px;
35
- }
36
- .buttons-container[data-v-f96970aa] {
37
- position: relative;
38
- display: flex;
39
- gap: 10px;
40
- justify-content: center;
41
- padding: 10px 0;
42
- min-width: 250px;
43
- z-index: 2;
44
- }
45
- button[data-v-f96970aa] {
46
- position: relative;
47
- display: inline-flex;
48
- align-items: center;
49
- justify-content: center;
50
- cursor: pointer;
51
- padding: 10px;
52
- background-color: #f5f5f5;
53
- border: 1px solid #ddd;
54
- border-radius: 4px;
55
- font-size: 16px;
56
- transition: background-color 0.3s ease;
57
- z-index: 2;
58
- }
59
- button[data-v-f96970aa]:hover {
60
- background-color: #b3b5ba;
61
- }
62
- button .material-icons[data-v-f96970aa] {
63
- margin-right: 8px;
64
- font-size: 20px;
65
- }
66
- .modal[data-v-f96970aa] {
67
- position: fixed;
68
- z-index: 1000;
69
- left: 0;
70
- top: 0;
71
- width: 100vw;
72
- height: 100vh;
73
- overflow: auto;
74
- background-color: rgba(0, 0, 0, 0.4);
75
- }
76
- .modal-content[data-v-f96970aa] {
77
- position: relative;
78
- background-color: #fefefe;
79
- margin: 10% auto;
80
- padding: 20px;
81
- border: 1px solid #888;
82
- width: 80%;
83
- z-index: 1001;
84
- }
85
- .pagination-buttons[data-v-f96970aa] {
86
- display: flex;
87
- gap: 10px;
88
- justify-content: center;
89
- margin-top: 20px;
90
- z-index: 2;
91
- }
92
- .grid-container[data-v-f96970aa] {
93
- position: relative;
94
- display: grid;
95
- grid-template-columns: repeat(5, 1fr);
96
- grid-gap: 10px;
97
- padding: 10px;
98
- z-index: 1;
99
- }
100
- .file-item[data-v-f96970aa] {
101
- display: flex;
102
- align-items: center;
103
- justify-content: left;
104
- text-align: center;
105
- padding: 10px;
106
- background-color: #f4f4f4;
107
- border-radius: 4px;
108
- }
109
- .file-icon[data-v-f96970aa] {
110
- width: 24px;
111
- height: auto;
112
- margin-right: 8px;
113
- }
114
- @media (max-width: 800px) {
115
- .grid-container[data-v-f96970aa] {
116
- grid-template-columns: repeat(2, 1fr);
117
- }
118
- }
119
- .breadcrumb[data-v-f96970aa] {
120
- margin: 10px 0;
121
- }
122
- .breadcrumb a[data-v-f96970aa] {
123
- cursor: pointer;
124
- color: #0275d8;
125
- text-decoration: none;
126
- }
127
- .breadcrumb a[data-v-f96970aa]:hover {
128
- text-decoration: underline;
129
- }
130
-
131
- /* Additional styles for el-select override */
132
- .el-select-dropdown .el-select-dropdown__item.selected[data-v-f96970aa] {
133
- background-color: #f5f5f5 !important;
134
- color: #000000;
135
- }
136
- .close[data-v-f96970aa] {
137
- position: relative;
138
- z-index: 1002;
139
- }
140
-
141
- .context-menu[data-v-dc36d3d0] {
142
- position: fixed;
143
- z-index: 1000;
144
- border: 1px solid #ccc;
145
- background-color: white;
146
- padding: 8px;
147
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
148
- border-radius: 4px;
149
- user-select: none;
150
- }
151
- .context-menu button[data-v-dc36d3d0] {
152
- display: block;
153
- background: none;
154
- border: none;
155
- padding: 4px 8px;
156
- text-align: left;
157
- width: 100%;
158
- cursor: pointer;
159
- z-index: 100;
160
- }
161
- .context-menu button[data-v-dc36d3d0]:hover {
162
- background-color: #f0f0f0;
163
- }
164
- .table-wrapper[data-v-dc36d3d0] {
165
- max-height: 300px; /* Adjust this value as needed */
166
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); /* subtle shadow for depth */
167
- border-radius: 8px; /* rounded corners */
168
- overflow: auto; /* ensures the rounded corners are applied to the child elements */
169
- margin: 5px; /* adds a small margin around the table */
170
- }
171
- .context-menu[data-v-dc36d3d0] {
172
- position: fixed;
173
- z-index: 1000;
174
- border: 1px solid #ccc;
175
- background-color: white;
176
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
177
- border-radius: 4px;
178
- }
179
- .context-menu ul[data-v-dc36d3d0] {
180
- list-style: none;
181
- padding: 0;
182
- margin: 0;
183
- }
184
- .context-menu li[data-v-dc36d3d0] {
185
- padding: 8px 16px;
186
- cursor: pointer;
187
- }
188
- .context-menu li[data-v-dc36d3d0]:hover {
189
- background-color: #f0f0f0;
190
- }
191
- .file-upload-wrapper[data-v-dc36d3d0] {
192
- position: relative;
193
- width: 100%;
194
- }
195
- .file-upload-input[data-v-dc36d3d0] {
196
- width: 100%;
197
- height: 40px;
198
- opacity: 0;
199
- position: absolute;
200
- top: 0;
201
- left: 0;
202
- z-index: 1;
203
- cursor: pointer;
204
- }
205
- .file-upload-label[data-v-dc36d3d0] {
206
- display: flex;
207
- align-items: center;
208
- justify-content: flex-start;
209
- background-color: #f5f5f5;
210
- border: 1px solid #ddd;
211
- border-radius: 4px;
212
- padding: 10px 15px;
213
- color: #333;
214
- font-size: 16px;
215
- font-weight: 500;
216
- text-align: left;
217
- user-select: none;
218
- cursor: pointer;
219
- transition: background-color 0.3s ease;
220
- }
221
- .file-upload-label[data-v-dc36d3d0]:hover {
222
- background-color: #e4e4e4;
223
- }
224
- .file-icon[data-v-dc36d3d0] {
225
- margin-right: 10px;
226
- font-size: 20px; /* Slightly larger icon for better visual balance */
227
- }
228
- .file-label-text[data-v-dc36d3d0] {
229
- flex-grow: 1; /* Ensures text takes the available space */
230
- margin-left: 10px; /* Spacing between icon and text */
231
- }
232
-
233
- /* Additional styling to align with Vuestic's modern and minimalistic design */
@@ -1,74 +0,0 @@
1
- import gspread
2
- from google.oauth2.credentials import Credentials
3
- from googleapiclient.discovery import build
4
- from typing import Dict, Any, Generator, List
5
- from flowfile_core.schemas.input_schema import GoogleSheet
6
-
7
-
8
- def getter(data: GoogleSheet) -> Generator[Dict[str, Any], None, None]:
9
- creds = Credentials(token=data.access_token.get_secret_value())
10
- gc = gspread.authorize(credentials=creds)
11
- worksheet = gc.open_by_key(data.sheet_id).worksheet(data.worksheet_name)
12
- all_values = worksheet.get_values()
13
- headers = all_values[0]
14
- for i, value in enumerate(all_values[1:]):
15
- yield {k: v for k, v in zip(headers, value)}
16
-
17
-
18
- def initial_getter(data: GoogleSheet):
19
- def inner_func():
20
- creds = Credentials(token=data.access_token.get_secret_value())
21
- service = build('sheets', 'v4', credentials=creds)
22
- _range = f'{data.worksheet_name}!1:2'
23
- result = service.spreadsheets().values().get(spreadsheetId=data.sheet_id, range=_range).execute().get('values', [])
24
- if len(result) > 1:
25
- align_data(result[0], result[1:])
26
- return [{k: v for k, v in zip(*result)}]
27
- return inner_func
28
-
29
-
30
- def align_data(headers: List[str], values: List[List[str]]) -> None:
31
- """
32
- Ensures that the number of columns in 'headers' matches the maximum row length in 'values'.
33
- If 'headers' has fewer columns, it appends 'unknown_column_{i}' for the missing columns.
34
- Then aligns all rows in 'values' and 'headers' to have the same length.
35
-
36
- Args:
37
- headers (List[str]): A list of column names (headers).
38
- values (List[List[str]]): A list of rows, where each row is a list of strings.
39
-
40
- Returns:
41
- None: The function modifies 'headers' and 'values' in place.
42
- """
43
- # Find the maximum number of values in any row
44
- max_number_of_values = max(len(row) for row in values)
45
-
46
- # Find the current number of columns
47
- number_of_cols = len(headers)
48
-
49
- # If headers have fewer columns than the maximum number of values, append missing columns
50
- if number_of_cols < max_number_of_values:
51
- headers.extend(f'unknown_column_{i}' for i in range(number_of_cols, max_number_of_values))
52
-
53
- # Align all rows and headers to have the same length
54
- align_list_len([headers] + values)
55
-
56
-
57
- def align_list_len(values: List[List[str]], default_value: str = '') -> None:
58
- """
59
- Aligns the size of each sublist in a list of lists by appending the default value to shorter sublists.
60
- Modifies the list of lists in place.
61
-
62
- Args:
63
- values (List[List[str]]): A list of lists where each sublist may have different lengths.
64
- default_value (str): The value to append to each sublist to align their lengths (default is an empty string).
65
-
66
- Returns:
67
- None
68
- """
69
- # Determine the maximum length of the sublists
70
- max_len = max(len(sublist) for sublist in values)
71
-
72
- # Extend each sublist to the maximum length by appending the default value
73
- for sublist in values:
74
- sublist.extend([default_value] * (max_len - len(sublist)))
File without changes