Flowfile 0.3.9__py3-none-any.whl → 0.3.10__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 (138) hide show
  1. flowfile/__init__.py +1 -1
  2. flowfile/api.py +0 -1
  3. flowfile/web/static/assets/{CloudConnectionManager-c97c25f8.js → CloudConnectionManager-d7c2c028.js} +2 -2
  4. flowfile/web/static/assets/{CloudStorageReader-f1ff509e.js → CloudStorageReader-d467329f.js} +11 -78
  5. flowfile/web/static/assets/{CloudStorageWriter-034f8b78.js → CloudStorageWriter-071b8b00.js} +12 -79
  6. flowfile/web/static/assets/{CloudStorageWriter-49c9a4b2.css → CloudStorageWriter-b0ee067f.css} +24 -24
  7. flowfile/web/static/assets/ContextMenu-2dea5e27.js +41 -0
  8. flowfile/web/static/assets/{SettingsSection-9c836ecc.css → ContextMenu-4c74eef1.css} +0 -21
  9. flowfile/web/static/assets/ContextMenu-63cfa99b.css +26 -0
  10. flowfile/web/static/assets/ContextMenu-785554c4.js +41 -0
  11. flowfile/web/static/assets/ContextMenu-a51e19ea.js +41 -0
  12. flowfile/web/static/assets/ContextMenu-c13f91d0.css +26 -0
  13. flowfile/web/static/assets/{CrossJoin-41efa4cb.css → CrossJoin-1119d18e.css} +18 -18
  14. flowfile/web/static/assets/{CrossJoin-9e156ebe.js → CrossJoin-cf68ec7a.js} +14 -84
  15. flowfile/web/static/assets/{DatabaseConnectionSettings-d5c625b3.js → DatabaseConnectionSettings-435c5dd8.js} +3 -3
  16. flowfile/web/static/assets/{DatabaseManager-265adc5e.js → DatabaseManager-349e33a8.js} +2 -2
  17. flowfile/web/static/assets/{DatabaseReader-0b10551e.js → DatabaseReader-8075bd28.js} +14 -114
  18. flowfile/web/static/assets/{DatabaseReader-f50c6558.css → DatabaseReader-ae61773c.css} +0 -27
  19. flowfile/web/static/assets/{DatabaseWriter-c17c6916.js → DatabaseWriter-3e2dda89.js} +13 -74
  20. flowfile/web/static/assets/{ExploreData-5bdae813.css → ExploreData-2d0cf4db.css} +8 -14
  21. flowfile/web/static/assets/ExploreData-76ec698c.js +192 -0
  22. flowfile/web/static/assets/{ExternalSource-3a66556c.js → ExternalSource-609a265c.js} +8 -79
  23. flowfile/web/static/assets/{Filter-91ad87e7.js → Filter-97cff793.js} +12 -85
  24. flowfile/web/static/assets/{Filter-a9d08ba1.css → Filter-f62091b3.css} +3 -3
  25. flowfile/web/static/assets/{Formula-3c395ab1.js → Formula-09de0ec9.js} +18 -85
  26. flowfile/web/static/assets/{Formula-29f19d21.css → Formula-bb96803d.css} +4 -4
  27. flowfile/web/static/assets/{FuzzyMatch-6857de82.css → FuzzyMatch-1010f966.css} +42 -42
  28. flowfile/web/static/assets/{FuzzyMatch-2df0d230.js → FuzzyMatch-bdf70248.js} +16 -87
  29. flowfile/web/static/assets/{GraphSolver-d285877f.js → GraphSolver-0b5a0e05.js} +13 -159
  30. flowfile/web/static/assets/GraphSolver-f0cb7bfb.css +22 -0
  31. flowfile/web/static/assets/{Unique-b5615727.css → GroupBy-b9505323.css} +8 -8
  32. flowfile/web/static/assets/{GroupBy-0bd1cc6b.js → GroupBy-eaddadde.js} +12 -75
  33. flowfile/web/static/assets/{Join-5a78a203.js → Join-3313371b.js} +15 -85
  34. flowfile/web/static/assets/{Join-f45eff22.css → Join-fd79b451.css} +20 -20
  35. flowfile/web/static/assets/{ManualInput-a71b52c6.css → ManualInput-3246a08d.css} +20 -20
  36. flowfile/web/static/assets/{ManualInput-93aef9d6.js → ManualInput-e8bfc0be.js} +11 -82
  37. flowfile/web/static/assets/{Output-411ecaee.js → Output-7303bb09.js} +13 -243
  38. flowfile/web/static/assets/Output-ddc9079f.css +37 -0
  39. flowfile/web/static/assets/{Pivot-89db4b04.js → Pivot-3b1c54ef.js} +14 -138
  40. flowfile/web/static/assets/Pivot-cf333e3d.css +22 -0
  41. flowfile/web/static/assets/PivotValidation-3bb36c8f.js +61 -0
  42. flowfile/web/static/assets/PivotValidation-891ddfb0.css +13 -0
  43. flowfile/web/static/assets/PivotValidation-c46cd420.css +13 -0
  44. flowfile/web/static/assets/PivotValidation-eaa819c0.js +61 -0
  45. flowfile/web/static/assets/{PolarsCode-a9f974f8.js → PolarsCode-aa12e25d.js} +13 -80
  46. flowfile/web/static/assets/Read-6b17491f.css +62 -0
  47. flowfile/web/static/assets/Read-a2bfc618.js +243 -0
  48. flowfile/web/static/assets/RecordCount-aa0dc082.js +53 -0
  49. flowfile/web/static/assets/{RecordId-55ae7d36.js → RecordId-48ee1a3b.js} +8 -80
  50. flowfile/web/static/assets/SQLQueryComponent-36cef432.css +27 -0
  51. flowfile/web/static/assets/SQLQueryComponent-e149dbf2.js +38 -0
  52. flowfile/web/static/assets/{Sample-b4a18476.js → Sample-f06cb97a.js} +8 -77
  53. flowfile/web/static/assets/{SecretManager-b066d13a.js → SecretManager-37f34886.js} +2 -2
  54. flowfile/web/static/assets/{Select-727688dc.js → Select-b60e6c47.js} +11 -85
  55. flowfile/web/static/assets/SettingsSection-2e4d03c4.css +21 -0
  56. flowfile/web/static/assets/SettingsSection-5c696bee.css +20 -0
  57. flowfile/web/static/assets/SettingsSection-70e5a7b1.js +53 -0
  58. flowfile/web/static/assets/SettingsSection-71e6b7e3.css +21 -0
  59. flowfile/web/static/assets/{SettingsSection-695ac487.js → SettingsSection-75b6cf4f.js} +2 -40
  60. flowfile/web/static/assets/SettingsSection-e57a672e.js +45 -0
  61. flowfile/web/static/assets/{GroupBy-ab1ea74b.css → Sort-3643d625.css} +8 -8
  62. flowfile/web/static/assets/{Sort-be3339a8.js → Sort-51b1ee4d.js} +12 -97
  63. flowfile/web/static/assets/{TextToRows-7b8998da.js → TextToRows-26835f8f.js} +14 -83
  64. flowfile/web/static/assets/{TextToRows-c92d1ec2.css → TextToRows-5d2c1190.css} +9 -9
  65. flowfile/web/static/assets/{UnavailableFields-8b0cb48e.js → UnavailableFields-88a4cd0c.js} +2 -2
  66. flowfile/web/static/assets/Union-4d0088eb.js +77 -0
  67. flowfile/web/static/assets/{Union-8d9ac7f9.css → Union-af6c3d9b.css} +6 -6
  68. flowfile/web/static/assets/{Unique-af5a80b4.js → Unique-7d554a62.js} +22 -91
  69. flowfile/web/static/assets/{Sort-7ccfa0fe.css → Unique-f9fb0809.css} +8 -8
  70. flowfile/web/static/assets/Unpivot-1e422df3.css +30 -0
  71. flowfile/web/static/assets/{Unpivot-5195d411.js → Unpivot-4668595c.js} +12 -166
  72. flowfile/web/static/assets/UnpivotValidation-0d240eeb.css +13 -0
  73. flowfile/web/static/assets/UnpivotValidation-d4f0e0e8.js +51 -0
  74. flowfile/web/static/assets/{ExploreData-18a4fe52.js → VueGraphicWalker-5324d566.js} +4 -264
  75. flowfile/web/static/assets/VueGraphicWalker-ed5ab88b.css +6 -0
  76. flowfile/web/static/assets/{api-cb00cce6.js → api-271ed117.js} +1 -1
  77. flowfile/web/static/assets/{api-023d1733.js → api-31e4fea6.js} +1 -1
  78. flowfile/web/static/assets/{designer-2197d782.css → designer-091bdc3f.css} +819 -184
  79. flowfile/web/static/assets/{designer-6c322d8e.js → designer-bf3d9487.js} +2191 -703
  80. flowfile/web/static/assets/{documentation-4d1fafe1.js → documentation-4d0a1cea.js} +1 -1
  81. flowfile/web/static/assets/{dropDown-0b46dd77.js → dropDown-025888df.js} +1 -1
  82. flowfile/web/static/assets/{fullEditor-ec4e4f95.js → fullEditor-1df991ec.js} +2 -2
  83. flowfile/web/static/assets/{genericNodeSettings-def5879b.js → genericNodeSettings-d3b2b2ac.js} +3 -3
  84. flowfile/web/static/assets/{index-683fc198.js → index-d0518598.js} +210 -31
  85. flowfile/web/static/assets/{Output-48f81019.css → outputCsv-9cc59e0b.css} +0 -143
  86. flowfile/web/static/assets/outputCsv-d8457527.js +86 -0
  87. flowfile/web/static/assets/outputExcel-b41305c0.css +102 -0
  88. flowfile/web/static/assets/outputExcel-be89153e.js +56 -0
  89. flowfile/web/static/assets/outputParquet-cf8cf3f2.css +4 -0
  90. flowfile/web/static/assets/outputParquet-fabb445a.js +31 -0
  91. flowfile/web/static/assets/readCsv-bca3ed53.css +52 -0
  92. flowfile/web/static/assets/readCsv-e8359522.js +178 -0
  93. flowfile/web/static/assets/readExcel-dabaf51b.js +203 -0
  94. flowfile/web/static/assets/readExcel-e1b381ea.css +64 -0
  95. flowfile/web/static/assets/readParquet-cee068e2.css +19 -0
  96. flowfile/web/static/assets/readParquet-e0771ef2.js +26 -0
  97. flowfile/web/static/assets/{secretApi-baceb6f9.js → secretApi-ce823eee.js} +1 -1
  98. flowfile/web/static/assets/{selectDynamic-de91449a.js → selectDynamic-5476546e.js} +7 -7
  99. flowfile/web/static/assets/{selectDynamic-b062bc9b.css → selectDynamic-aa913ff4.css} +16 -16
  100. flowfile/web/static/assets/{vue-codemirror.esm-dc5e3348.js → vue-codemirror.esm-9ed00d50.js} +29 -33
  101. flowfile/web/static/assets/{vue-content-loader.es-ba94b82f.js → vue-content-loader.es-7bca2d9b.js} +1 -1
  102. flowfile/web/static/index.html +1 -1
  103. {flowfile-0.3.9.dist-info → flowfile-0.3.10.dist-info}/METADATA +1 -1
  104. {flowfile-0.3.9.dist-info → flowfile-0.3.10.dist-info}/RECORD +129 -97
  105. flowfile_core/configs/flow_logger.py +5 -13
  106. flowfile_core/configs/node_store/nodes.py +303 -44
  107. flowfile_core/configs/settings.py +2 -1
  108. flowfile_core/database/connection.py +5 -21
  109. flowfile_core/fileExplorer/funcs.py +239 -121
  110. flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +28 -8
  111. flowfile_core/flowfile/flow_graph.py +97 -33
  112. flowfile_core/flowfile/flow_node/flow_node.py +41 -9
  113. flowfile_core/flowfile/handler.py +22 -3
  114. flowfile_core/flowfile/schema_callbacks.py +8 -4
  115. flowfile_core/flowfile/setting_generator/settings.py +0 -1
  116. flowfile_core/main.py +4 -1
  117. flowfile_core/routes/routes.py +59 -10
  118. flowfile_core/schemas/input_schema.py +0 -1
  119. flowfile_core/schemas/output_model.py +5 -2
  120. flowfile_core/schemas/schemas.py +2 -0
  121. flowfile_core/schemas/transform_schema.py +1 -0
  122. flowfile_worker/__init__.py +6 -35
  123. flowfile_worker/main.py +5 -2
  124. flowfile_worker/routes.py +47 -5
  125. shared/__init__.py +15 -0
  126. shared/storage_config.py +243 -0
  127. flowfile/web/static/assets/GraphSolver-17fd26db.css +0 -68
  128. flowfile/web/static/assets/Pivot-f415e85f.css +0 -35
  129. flowfile/web/static/assets/Read-80dc1675.css +0 -197
  130. flowfile/web/static/assets/Read-c3b1929c.js +0 -701
  131. flowfile/web/static/assets/RecordCount-4e95f98e.js +0 -122
  132. flowfile/web/static/assets/Union-89fd73dc.js +0 -146
  133. flowfile/web/static/assets/Unpivot-246e9bbd.css +0 -77
  134. flowfile/web/static/assets/nodeTitle-a16db7c3.js +0 -227
  135. flowfile/web/static/assets/nodeTitle-f4b12bcb.css +0 -134
  136. {flowfile-0.3.9.dist-info → flowfile-0.3.10.dist-info}/LICENSE +0 -0
  137. {flowfile-0.3.9.dist-info → flowfile-0.3.10.dist-info}/WHEEL +0 -0
  138. {flowfile-0.3.9.dist-info → flowfile-0.3.10.dist-info}/entry_points.txt +0 -0
@@ -1,51 +1,310 @@
1
1
  from typing import List
2
2
  from flowfile_core.schemas.schemas import NodeTemplate, NodeDefault, TransformTypeLiteral, NodeTypeLiteral
3
3
 
4
+ from typing import List
5
+ from flowfile_core.schemas.schemas import NodeTemplate, NodeDefault, TransformTypeLiteral, NodeTypeLiteral
6
+
4
7
  nodes_list: List[NodeTemplate] = [
5
- NodeTemplate(name='External source', item='external_source', input=0, output=1,
6
- image='external_source.png', node_group='input', prod_ready=False),
7
- NodeTemplate(name='Manual input', item='manual_input', input=0, output=1,
8
- image='manual_input.png', node_group='input'),
9
- NodeTemplate(name='Read data', item='read', input=0, output=1, image='input_data.png', node_group='input'),
10
- NodeTemplate(name='Join', color='#49494970', item='join', input=2, output=1, image='join.png',
11
- node_group='combine'),
12
- NodeTemplate(name='Formula', color='blue', item='formula', input=1, output=1, image='formula.png',
13
- node_group='transform'),
14
- # NodeTemplate(name='Sql editor', color='blue', item='sql_editor', input=1, output=1, image='sql.png'),
15
- NodeTemplate(name='Write data', item='output', input=1, output=0, image='output.png', node_group='output'),
16
- NodeTemplate(name='Select data', item='select', input=1, output=1, image='select.png', node_group='transform'),
17
- NodeTemplate(name='Filter data', item='filter', input=1, output=1, image='filter.png', node_group='transform'),
18
- NodeTemplate(name='Group by', item='group_by', input=1, output=1, image='group_by.png', node_group='aggregate'),
19
- NodeTemplate(name='Fuzzy match', item='fuzzy_match', input=2, output=1, image='fuzzy_match.png',
20
- node_group='combine'),
21
- NodeTemplate(name='Sort data', item='sort', input=1, output=1, image='sort.png', node_group='transform'),
22
- NodeTemplate(name='Add record Id', item='record_id', input=1, output=1, image='record_id.png',
23
- node_group='transform'),
24
- NodeTemplate(name='Take Sample', item='sample', input=1, output=1, image='sample.png', node_group='transform'),
25
- NodeTemplate(name='Explore data', item='explore_data', input=1, output=0,
26
- image='explore_data.png', node_group='output'),
27
- NodeTemplate(name='Pivot data', item='pivot', input=1, output=1, image='pivot.png', node_group='aggregate'),
28
- NodeTemplate(name='Unpivot data', item='unpivot', input=1, output=1, image='unpivot.png', node_group='aggregate'),
29
- NodeTemplate(name='Union data', item='union', input=10, output=1, image='union.png', multi=True,
30
- node_group='combine'),
31
- NodeTemplate(name='Drop duplicates', item='unique', input=1, output=1, image='unique.png', node_group='transform'),
32
- NodeTemplate(name='Graph solver', item='graph_solver', input=1, output=1, image='graph_solver.png',
33
- node_group='combine'),
34
- NodeTemplate(name='Count records', item='record_count', input=1, output=1, image='record_count.png',
35
- node_group='aggregate'),
36
- NodeTemplate(name='Cross join', item='cross_join', input=2, output=1, image='cross_join.png', node_group='combine'),
37
- NodeTemplate(name='Text to rows', item='text_to_rows', input=1, output=1, image='text_to_rows.png',
38
- node_group='transform'),
39
- NodeTemplate(name="Polars code", item="polars_code", input=10, output=1, image='polars_code.png',
40
- node_group='transform', multi=True, can_be_start=True),
41
- NodeTemplate(name="Read from Database", item="database_reader", input=0, output=1, image='database_reader.svg',
42
- node_group='input'),
43
- NodeTemplate(name='Write to Database', item='database_writer', input=1, output=0, image='database_writer.svg',
44
- node_group='output'),
45
- NodeTemplate(name='Read from cloud provider', item='cloud_storage_reader', input=0, output=1,
46
- image='cloud_storage_reader.png', node_group='input'),
47
- NodeTemplate(name='Write to cloud provider', item='cloud_storage_writer', input=1, output=0,
48
- image='cloud_storage_writer.png', node_group='output'),
8
+ NodeTemplate(
9
+ name='External source',
10
+ item='external_source',
11
+ input=0,
12
+ output=1,
13
+ image='external_source.png',
14
+ node_group='input',
15
+ prod_ready=False,
16
+ drawer_title="External Source",
17
+ drawer_intro="Connect to external data sources and APIs"
18
+ ),
19
+
20
+ NodeTemplate(
21
+ name='Manual input',
22
+ item='manual_input',
23
+ input=0,
24
+ output=1,
25
+ image='manual_input.png',
26
+ node_group='input',
27
+ drawer_title="Manual Input",
28
+ drawer_intro="Create data directly"
29
+ ),
30
+
31
+ NodeTemplate(
32
+ name='Read data',
33
+ item='read',
34
+ input=0,
35
+ output=1,
36
+ image='input_data.png',
37
+ node_group='input',
38
+ drawer_title="Read Data",
39
+ drawer_intro="Load data from CSV, Excel, or Parquet files"
40
+ ),
41
+
42
+ NodeTemplate(
43
+ name='Join',
44
+ item='join',
45
+ input=2,
46
+ output=1,
47
+ image='join.png',
48
+ node_group='combine',
49
+ drawer_title="Join Datasets",
50
+ drawer_intro="Merge two datasets based on matching column values"
51
+ ),
52
+
53
+ NodeTemplate(
54
+ name='Formula',
55
+ item='formula',
56
+ input=1,
57
+ output=1,
58
+ image='formula.png',
59
+ node_group='transform',
60
+ drawer_title="Formula Editor",
61
+ drawer_intro="Create or modify columns using custom expressions"
62
+ ),
63
+
64
+ NodeTemplate(
65
+ name='Write data',
66
+ item='output',
67
+ input=1,
68
+ output=0,
69
+ image='output.png',
70
+ node_group='output',
71
+ drawer_title="Write Data",
72
+ drawer_intro="Save your data as CSV, Excel, or Parquet files"
73
+ ),
74
+
75
+ NodeTemplate(
76
+ name='Select data',
77
+ item='select',
78
+ input=1,
79
+ output=1,
80
+ image='select.png',
81
+ node_group='transform',
82
+ drawer_title="Select Columns",
83
+ drawer_intro="Choose, rename, and reorder columns to keep"
84
+ ),
85
+
86
+ NodeTemplate(
87
+ name='Filter data',
88
+ item='filter',
89
+ input=1,
90
+ output=1,
91
+ image='filter.png',
92
+ node_group='transform',
93
+ drawer_title="Filter Rows",
94
+ drawer_intro="Keep only rows that match your conditions"
95
+ ),
96
+
97
+ NodeTemplate(
98
+ name='Group by',
99
+ item='group_by',
100
+ input=1,
101
+ output=1,
102
+ image='group_by.png',
103
+ node_group='aggregate',
104
+ drawer_title="Group By",
105
+ drawer_intro="Aggregate data by grouping and calculating statistics"
106
+ ),
107
+
108
+ NodeTemplate(
109
+ name='Fuzzy match',
110
+ item='fuzzy_match',
111
+ input=2,
112
+ output=1,
113
+ image='fuzzy_match.png',
114
+ node_group='combine',
115
+ drawer_title="Fuzzy Match",
116
+ drawer_intro="Join datasets based on similar values instead of exact matches"
117
+ ),
118
+
119
+ NodeTemplate(
120
+ name='Sort data',
121
+ item='sort',
122
+ input=1,
123
+ output=1,
124
+ image='sort.png',
125
+ node_group='transform',
126
+ drawer_title="Sort Data",
127
+ drawer_intro="Order your data by one or more columns"
128
+ ),
129
+
130
+ NodeTemplate(
131
+ name='Add record Id',
132
+ item='record_id',
133
+ input=1,
134
+ output=1,
135
+ image='record_id.png',
136
+ node_group='transform',
137
+ drawer_title="Add Record ID",
138
+ drawer_intro="Generate unique identifiers for each row"
139
+ ),
140
+
141
+ NodeTemplate(
142
+ name='Take Sample',
143
+ item='sample',
144
+ input=1,
145
+ output=1,
146
+ image='sample.png',
147
+ node_group='transform',
148
+ drawer_title="Take Sample",
149
+ drawer_intro="Work with a subset of your data"
150
+ ),
151
+
152
+ NodeTemplate(
153
+ name='Explore data',
154
+ item='explore_data',
155
+ input=1,
156
+ output=0,
157
+ image='explore_data.png',
158
+ node_group='output',
159
+ drawer_title="Explore Data",
160
+ drawer_intro="Interactive data exploration and analysis"
161
+ ),
162
+
163
+ NodeTemplate(
164
+ name='Pivot data',
165
+ item='pivot',
166
+ input=1,
167
+ output=1,
168
+ image='pivot.png',
169
+ node_group='aggregate',
170
+ drawer_title="Pivot Data",
171
+ drawer_intro="Convert data from long format to wide format"
172
+ ),
173
+
174
+ NodeTemplate(
175
+ name='Unpivot data',
176
+ item='unpivot',
177
+ input=1,
178
+ output=1,
179
+ image='unpivot.png',
180
+ node_group='aggregate',
181
+ drawer_title="Unpivot Data",
182
+ drawer_intro="Transform data from wide format to long format"
183
+ ),
184
+
185
+ NodeTemplate(
186
+ name='Union data',
187
+ item='union',
188
+ input=10,
189
+ output=1,
190
+ image='union.png',
191
+ multi=True,
192
+ node_group='combine',
193
+ drawer_title="Union Data",
194
+ drawer_intro="Stack multiple datasets by combining rows"
195
+ ),
196
+
197
+ NodeTemplate(
198
+ name='Drop duplicates',
199
+ item='unique',
200
+ input=1,
201
+ output=1,
202
+ image='unique.png',
203
+ node_group='transform',
204
+ drawer_title="Drop Duplicates",
205
+ drawer_intro="Remove duplicate rows based on selected columns"
206
+ ),
207
+
208
+ NodeTemplate(
209
+ name='Graph solver',
210
+ item='graph_solver',
211
+ input=1,
212
+ output=1,
213
+ image='graph_solver.png',
214
+ node_group='combine',
215
+ drawer_title="Graph Solver",
216
+ drawer_intro="Group related records in graph-structured data"
217
+ ),
218
+
219
+ NodeTemplate(
220
+ name='Count records',
221
+ item='record_count',
222
+ input=1,
223
+ output=1,
224
+ image='record_count.png',
225
+ node_group='aggregate',
226
+ drawer_title="Count Records",
227
+ drawer_intro="Calculate the total number of rows"
228
+ ),
229
+
230
+ NodeTemplate(
231
+ name='Cross join',
232
+ item='cross_join',
233
+ input=2,
234
+ output=1,
235
+ image='cross_join.png',
236
+ node_group='combine',
237
+ drawer_title="Cross Join",
238
+ drawer_intro="Create all possible combinations between two datasets"
239
+ ),
240
+
241
+ NodeTemplate(
242
+ name='Text to rows',
243
+ item='text_to_rows',
244
+ input=1,
245
+ output=1,
246
+ image='text_to_rows.png',
247
+ node_group='transform',
248
+ drawer_title="Text to Rows",
249
+ drawer_intro="Split text into multiple rows based on a delimiter"
250
+ ),
251
+
252
+ NodeTemplate(
253
+ name="Polars code",
254
+ item="polars_code",
255
+ input=10,
256
+ output=1,
257
+ image='polars_code.png',
258
+ node_group='transform',
259
+ multi=True,
260
+ can_be_start=True,
261
+ drawer_title="Polars Code",
262
+ drawer_intro="Write custom Polars DataFrame transformations"
263
+ ),
264
+
265
+ NodeTemplate(
266
+ name="Read from Database",
267
+ item="database_reader",
268
+ input=0,
269
+ output=1,
270
+ image='database_reader.svg',
271
+ node_group='input',
272
+ drawer_title="Database Reader",
273
+ drawer_intro="Load data from database tables or queries"
274
+ ),
275
+
276
+ NodeTemplate(
277
+ name='Write to Database',
278
+ item='database_writer',
279
+ input=1,
280
+ output=0,
281
+ image='database_writer.svg',
282
+ node_group='output',
283
+ drawer_title="Database Writer",
284
+ drawer_intro="Save data to database tables"
285
+ ),
286
+
287
+ NodeTemplate(
288
+ name='Read from cloud provider',
289
+ item='cloud_storage_reader',
290
+ input=0,
291
+ output=1,
292
+ image='cloud_storage_reader.png',
293
+ node_group='input',
294
+ drawer_title="Cloud Storage Reader",
295
+ drawer_intro="Read data from AWS S3 and other cloud storage"
296
+ ),
297
+
298
+ NodeTemplate(
299
+ name='Write to cloud provider',
300
+ item='cloud_storage_writer',
301
+ input=1,
302
+ output=0,
303
+ image='cloud_storage_writer.png',
304
+ node_group='output',
305
+ drawer_title="Cloud Storage Writer",
306
+ drawer_intro="Save data to AWS S3 and other cloud storage"
307
+ ),
49
308
  ]
50
309
 
51
310
  nodes_list.sort(key=lambda x: x.name)
@@ -7,6 +7,7 @@ import argparse
7
7
 
8
8
  from passlib.context import CryptContext
9
9
  from starlette.config import Config
10
+ from shared.storage_config import storage
10
11
 
11
12
  from flowfile_core.configs.utils import MutableBool
12
13
 
@@ -93,7 +94,7 @@ FILE_LOCATION = config("FILE_LOCATION", cast=str, default=".\\files\\")
93
94
  AVAILABLE_RAM = config("AVAILABLE_RAM", cast=int, default=8)
94
95
  WORKER_URL = config("FLOWFILE_WORKER_URL", cast=str, default=get_default_worker_url(WORKER_PORT))
95
96
  IS_RUNNING_IN_DOCKER = os.getenv('RUNNING_IN_DOCKER', 'false').lower() == 'true'
96
- TEMP_DIR = get_temp_dir()
97
+ TEMP_DIR = storage.temp_directory
97
98
 
98
99
  ALGORITHM = "HS256"
99
100
  ACCESS_TOKEN_EXPIRE_MINUTES = 120
@@ -5,37 +5,21 @@ import os
5
5
  import sys
6
6
  from pathlib import Path
7
7
  from flowfile_core.configs import logger
8
+ from shared.storage_config import storage
8
9
 
9
10
 
10
11
  def get_app_data_dir() -> Path:
11
12
  """Get the appropriate application data directory for the current platform."""
12
- app_name = "Flowfile"
13
13
 
14
- if sys.platform == "win32":
15
- # Windows: C:\Users\{username}\AppData\Local\flowfile
16
- base_dir = os.environ.get("LOCALAPPDATA")
17
- if not base_dir:
18
- base_dir = os.path.join(os.path.expanduser("~"), "AppData", "Local")
19
- elif sys.platform == "darwin":
20
- # macOS: ~/Library/Application Support/flowfile
21
- base_dir = os.path.join(os.path.expanduser("~"), "Library", "Application Support")
22
- else:
23
- # Linux: ~/.local/share/flowfile or use XDG_DATA_HOME
24
- base_dir = os.environ.get("XDG_DATA_HOME")
25
- if not base_dir:
26
- base_dir = os.path.join(os.path.expanduser("~"), ".local", "share")
27
-
28
- app_dir = Path(base_dir) / app_name
29
- app_dir.mkdir(parents=True, exist_ok=True)
30
-
31
- return app_dir
14
+ return storage.database_directory
32
15
 
33
16
 
34
17
  def get_database_url():
35
18
  """Get the database URL based on the current environment."""
36
19
  if os.environ.get("TESTING") == "True":
37
20
  # Use a temporary test database
38
- test_db_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../test_flowfile.db")
21
+ test_db_path = storage.temp_directory / "test_flowfile.db"
22
+ logger.debug(f"Using TESTING database URL: sqlite:///{test_db_path}")
39
23
  return f"sqlite:///{test_db_path}"
40
24
 
41
25
  custom_db_path = os.environ.get("FLOWFILE_DB_PATH")
@@ -94,4 +78,4 @@ def get_database_info():
94
78
  "path": str(get_database_path()) if get_database_path() else None,
95
79
  "app_data_dir": str(get_app_data_dir()),
96
80
  "platform": sys.platform
97
- }
81
+ }