Flowfile 0.3.9__py3-none-any.whl → 0.5.1__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.
Files changed (201) hide show
  1. flowfile/__init__.py +8 -1
  2. flowfile/api.py +1 -3
  3. flowfile/web/static/assets/{CloudConnectionManager-c97c25f8.js → CloudConnectionManager-0dfba9f2.js} +2 -2
  4. flowfile/web/static/assets/{CloudStorageReader-f1ff509e.js → CloudStorageReader-d5b1b6c9.js} +11 -78
  5. flowfile/web/static/assets/{CloudStorageWriter-034f8b78.js → CloudStorageWriter-00d87aad.js} +12 -79
  6. flowfile/web/static/assets/{CloudStorageWriter-49c9a4b2.css → CloudStorageWriter-b0ee067f.css} +24 -24
  7. flowfile/web/static/assets/ColumnSelector-4685e75d.js +83 -0
  8. flowfile/web/static/assets/ColumnSelector-47996a16.css +10 -0
  9. flowfile/web/static/assets/ContextMenu-23e909da.js +41 -0
  10. flowfile/web/static/assets/{SettingsSection-9c836ecc.css → ContextMenu-4c74eef1.css} +0 -21
  11. flowfile/web/static/assets/ContextMenu-63cfa99b.css +26 -0
  12. flowfile/web/static/assets/ContextMenu-70ae0c79.js +41 -0
  13. flowfile/web/static/assets/ContextMenu-c13f91d0.css +26 -0
  14. flowfile/web/static/assets/ContextMenu-f149cf7c.js +41 -0
  15. flowfile/web/static/assets/{CrossJoin-41efa4cb.css → CrossJoin-1119d18e.css} +18 -18
  16. flowfile/web/static/assets/{CrossJoin-9e156ebe.js → CrossJoin-702a3edd.js} +14 -84
  17. flowfile/web/static/assets/CustomNode-74a37f74.css +32 -0
  18. flowfile/web/static/assets/CustomNode-b1519993.js +211 -0
  19. flowfile/web/static/assets/{DatabaseConnectionSettings-d5c625b3.js → DatabaseConnectionSettings-6f3e4ea5.js} +3 -3
  20. flowfile/web/static/assets/{DatabaseManager-265adc5e.js → DatabaseManager-cf5ef661.js} +2 -2
  21. flowfile/web/static/assets/{DatabaseReader-f50c6558.css → DatabaseReader-ae61773c.css} +0 -27
  22. flowfile/web/static/assets/{DatabaseReader-0b10551e.js → DatabaseReader-d38c7295.js} +14 -114
  23. flowfile/web/static/assets/{DatabaseWriter-c17c6916.js → DatabaseWriter-b04ef46a.js} +13 -74
  24. flowfile/web/static/assets/{ExploreData-5bdae813.css → ExploreData-2d0cf4db.css} +8 -14
  25. flowfile/web/static/assets/ExploreData-5fa10ed8.js +192 -0
  26. flowfile/web/static/assets/{ExternalSource-3a66556c.js → ExternalSource-d39af878.js} +8 -79
  27. flowfile/web/static/assets/{Filter-91ad87e7.js → Filter-9b6d08db.js} +12 -85
  28. flowfile/web/static/assets/{Filter-a9d08ba1.css → Filter-f62091b3.css} +3 -3
  29. flowfile/web/static/assets/{Formula-3c395ab1.js → Formula-6b04fb1d.js} +20 -87
  30. flowfile/web/static/assets/{Formula-29f19d21.css → Formula-bb96803d.css} +4 -4
  31. flowfile/web/static/assets/{FuzzyMatch-6857de82.css → FuzzyMatch-1010f966.css} +42 -42
  32. flowfile/web/static/assets/{FuzzyMatch-2df0d230.js → FuzzyMatch-999521f4.js} +16 -87
  33. flowfile/web/static/assets/{GraphSolver-d285877f.js → GraphSolver-17dd2198.js} +13 -159
  34. flowfile/web/static/assets/GraphSolver-f0cb7bfb.css +22 -0
  35. flowfile/web/static/assets/{GroupBy-0bd1cc6b.js → GroupBy-6b039e18.js} +12 -75
  36. flowfile/web/static/assets/{Unique-b5615727.css → GroupBy-b9505323.css} +8 -8
  37. flowfile/web/static/assets/{Join-5a78a203.js → Join-24d0f113.js} +15 -85
  38. flowfile/web/static/assets/{Join-f45eff22.css → Join-fd79b451.css} +20 -20
  39. flowfile/web/static/assets/{ManualInput-a71b52c6.css → ManualInput-3246a08d.css} +20 -20
  40. flowfile/web/static/assets/{ManualInput-93aef9d6.js → ManualInput-34639209.js} +11 -82
  41. flowfile/web/static/assets/MultiSelect-0e8724a3.js +5 -0
  42. flowfile/web/static/assets/MultiSelect.vue_vue_type_script_setup_true_lang-b0e538c2.js +63 -0
  43. flowfile/web/static/assets/NumericInput-3d63a470.js +5 -0
  44. flowfile/web/static/assets/NumericInput.vue_vue_type_script_setup_true_lang-e0edeccc.js +35 -0
  45. flowfile/web/static/assets/Output-283fe388.css +37 -0
  46. flowfile/web/static/assets/{Output-411ecaee.js → Output-edea9802.js} +62 -273
  47. flowfile/web/static/assets/{Pivot-89db4b04.js → Pivot-61d19301.js} +14 -138
  48. flowfile/web/static/assets/Pivot-cf333e3d.css +22 -0
  49. flowfile/web/static/assets/PivotValidation-891ddfb0.css +13 -0
  50. flowfile/web/static/assets/PivotValidation-c46cd420.css +13 -0
  51. flowfile/web/static/assets/PivotValidation-de9f43fe.js +61 -0
  52. flowfile/web/static/assets/PivotValidation-f97fec5b.js +61 -0
  53. flowfile/web/static/assets/{PolarsCode-a9f974f8.js → PolarsCode-bc3c9984.js} +13 -80
  54. flowfile/web/static/assets/Read-64a3f259.js +218 -0
  55. flowfile/web/static/assets/Read-e808b239.css +62 -0
  56. flowfile/web/static/assets/RecordCount-3d5039be.js +53 -0
  57. flowfile/web/static/assets/{RecordId-55ae7d36.js → RecordId-597510e0.js} +8 -80
  58. flowfile/web/static/assets/SQLQueryComponent-36cef432.css +27 -0
  59. flowfile/web/static/assets/SQLQueryComponent-df51adbe.js +38 -0
  60. flowfile/web/static/assets/{Sample-b4a18476.js → Sample-4be0a507.js} +8 -77
  61. flowfile/web/static/assets/{SecretManager-b066d13a.js → SecretManager-4839be57.js} +2 -2
  62. flowfile/web/static/assets/{Select-727688dc.js → Select-9b72f201.js} +11 -85
  63. flowfile/web/static/assets/SettingsSection-2e4d03c4.css +21 -0
  64. flowfile/web/static/assets/SettingsSection-5c696bee.css +20 -0
  65. flowfile/web/static/assets/SettingsSection-71e6b7e3.css +21 -0
  66. flowfile/web/static/assets/SettingsSection-7ded385d.js +45 -0
  67. flowfile/web/static/assets/{SettingsSection-695ac487.js → SettingsSection-e1e9c953.js} +2 -40
  68. flowfile/web/static/assets/SettingsSection-f0f75a42.js +53 -0
  69. flowfile/web/static/assets/SingleSelect-6c777aac.js +5 -0
  70. flowfile/web/static/assets/SingleSelect.vue_vue_type_script_setup_true_lang-33e3ff9b.js +62 -0
  71. flowfile/web/static/assets/SliderInput-7cb93e62.js +40 -0
  72. flowfile/web/static/assets/SliderInput-b8fb6a8c.css +4 -0
  73. flowfile/web/static/assets/{GroupBy-ab1ea74b.css → Sort-3643d625.css} +8 -8
  74. flowfile/web/static/assets/{Sort-be3339a8.js → Sort-6cbde21a.js} +12 -97
  75. flowfile/web/static/assets/TextInput-d9a40c11.js +5 -0
  76. flowfile/web/static/assets/TextInput.vue_vue_type_script_setup_true_lang-5896c375.js +32 -0
  77. flowfile/web/static/assets/{TextToRows-c92d1ec2.css → TextToRows-5d2c1190.css} +9 -9
  78. flowfile/web/static/assets/{TextToRows-7b8998da.js → TextToRows-c4fcbf4d.js} +14 -83
  79. flowfile/web/static/assets/ToggleSwitch-4ef91d19.js +5 -0
  80. flowfile/web/static/assets/ToggleSwitch.vue_vue_type_script_setup_true_lang-38478c20.js +31 -0
  81. flowfile/web/static/assets/{UnavailableFields-8b0cb48e.js → UnavailableFields-a03f512c.js} +2 -2
  82. flowfile/web/static/assets/{Union-8d9ac7f9.css → Union-af6c3d9b.css} +6 -6
  83. flowfile/web/static/assets/Union-bfe9b996.js +77 -0
  84. flowfile/web/static/assets/{Unique-af5a80b4.js → Unique-5d023a27.js} +23 -104
  85. flowfile/web/static/assets/{Sort-7ccfa0fe.css → Unique-f9fb0809.css} +8 -8
  86. flowfile/web/static/assets/Unpivot-1e422df3.css +30 -0
  87. flowfile/web/static/assets/{Unpivot-5195d411.js → Unpivot-91cc5354.js} +12 -166
  88. flowfile/web/static/assets/UnpivotValidation-0d240eeb.css +13 -0
  89. flowfile/web/static/assets/UnpivotValidation-7ee2de44.js +51 -0
  90. flowfile/web/static/assets/{ExploreData-18a4fe52.js → VueGraphicWalker-e51b9924.js} +4 -264
  91. flowfile/web/static/assets/VueGraphicWalker-ed5ab88b.css +6 -0
  92. flowfile/web/static/assets/{api-cb00cce6.js → api-c1bad5ca.js} +1 -1
  93. flowfile/web/static/assets/{api-023d1733.js → api-cf1221f0.js} +1 -1
  94. flowfile/web/static/assets/{designer-2197d782.css → designer-8da3ba3a.css} +859 -201
  95. flowfile/web/static/assets/{designer-6c322d8e.js → designer-9633482a.js} +2297 -733
  96. flowfile/web/static/assets/{documentation-4d1fafe1.js → documentation-ca400224.js} +1 -1
  97. flowfile/web/static/assets/{dropDown-0b46dd77.js → dropDown-614b998d.js} +1 -1
  98. flowfile/web/static/assets/{fullEditor-ec4e4f95.js → fullEditor-f7971590.js} +2 -2
  99. flowfile/web/static/assets/{genericNodeSettings-def5879b.js → genericNodeSettings-4fe5f36b.js} +3 -3
  100. flowfile/web/static/assets/{index-681a3ed0.css → index-50508d4d.css} +8 -0
  101. flowfile/web/static/assets/{index-683fc198.js → index-5429bbf8.js} +208 -31
  102. flowfile/web/static/assets/nodeInput-5d0d6b79.js +41 -0
  103. flowfile/web/static/assets/outputCsv-076b85ab.js +86 -0
  104. flowfile/web/static/assets/{Output-48f81019.css → outputCsv-9cc59e0b.css} +0 -143
  105. flowfile/web/static/assets/outputExcel-0fd17dbe.js +56 -0
  106. flowfile/web/static/assets/outputExcel-b41305c0.css +102 -0
  107. flowfile/web/static/assets/outputParquet-b61e0847.js +31 -0
  108. flowfile/web/static/assets/outputParquet-cf8cf3f2.css +4 -0
  109. flowfile/web/static/assets/readCsv-a8bb8b61.js +179 -0
  110. flowfile/web/static/assets/readCsv-c767cb37.css +52 -0
  111. flowfile/web/static/assets/readExcel-67b4aee0.js +201 -0
  112. flowfile/web/static/assets/readExcel-806d2826.css +64 -0
  113. flowfile/web/static/assets/readParquet-48c81530.css +19 -0
  114. flowfile/web/static/assets/readParquet-92ce1dbc.js +23 -0
  115. flowfile/web/static/assets/{secretApi-baceb6f9.js → secretApi-68435402.js} +1 -1
  116. flowfile/web/static/assets/{selectDynamic-de91449a.js → selectDynamic-92e25ee3.js} +7 -7
  117. flowfile/web/static/assets/{selectDynamic-b062bc9b.css → selectDynamic-aa913ff4.css} +16 -16
  118. flowfile/web/static/assets/user-defined-icon-0ae16c90.png +0 -0
  119. flowfile/web/static/assets/{vue-codemirror.esm-dc5e3348.js → vue-codemirror.esm-41b0e0d7.js} +65 -36
  120. flowfile/web/static/assets/{vue-content-loader.es-ba94b82f.js → vue-content-loader.es-2c8e608f.js} +1 -1
  121. flowfile/web/static/index.html +2 -2
  122. {flowfile-0.3.9.dist-info → flowfile-0.5.1.dist-info}/METADATA +5 -3
  123. {flowfile-0.3.9.dist-info → flowfile-0.5.1.dist-info}/RECORD +191 -121
  124. {flowfile-0.3.9.dist-info → flowfile-0.5.1.dist-info}/WHEEL +1 -1
  125. {flowfile-0.3.9.dist-info → flowfile-0.5.1.dist-info}/entry_points.txt +1 -0
  126. flowfile_core/__init__.py +3 -0
  127. flowfile_core/configs/flow_logger.py +5 -13
  128. flowfile_core/configs/node_store/__init__.py +30 -0
  129. flowfile_core/configs/node_store/nodes.py +383 -99
  130. flowfile_core/configs/node_store/user_defined_node_registry.py +193 -0
  131. flowfile_core/configs/settings.py +2 -1
  132. flowfile_core/database/connection.py +5 -21
  133. flowfile_core/fileExplorer/funcs.py +239 -121
  134. flowfile_core/flowfile/analytics/analytics_processor.py +1 -0
  135. flowfile_core/flowfile/code_generator/code_generator.py +62 -64
  136. flowfile_core/flowfile/flow_data_engine/create/funcs.py +73 -56
  137. flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +77 -86
  138. flowfile_core/flowfile/flow_data_engine/flow_file_column/interface.py +4 -0
  139. flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +19 -34
  140. flowfile_core/flowfile/flow_data_engine/flow_file_column/type_registry.py +36 -0
  141. flowfile_core/flowfile/flow_data_engine/fuzzy_matching/prepare_for_fuzzy_match.py +23 -23
  142. flowfile_core/flowfile/flow_data_engine/join/utils.py +1 -1
  143. flowfile_core/flowfile/flow_data_engine/join/verify_integrity.py +9 -4
  144. flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +212 -86
  145. flowfile_core/flowfile/flow_data_engine/utils.py +2 -0
  146. flowfile_core/flowfile/flow_graph.py +240 -54
  147. flowfile_core/flowfile/flow_node/flow_node.py +48 -13
  148. flowfile_core/flowfile/flow_node/models.py +2 -1
  149. flowfile_core/flowfile/handler.py +24 -5
  150. flowfile_core/flowfile/manage/compatibility_enhancements.py +404 -41
  151. flowfile_core/flowfile/manage/io_flowfile.py +394 -0
  152. flowfile_core/flowfile/node_designer/__init__.py +47 -0
  153. flowfile_core/flowfile/node_designer/_type_registry.py +197 -0
  154. flowfile_core/flowfile/node_designer/custom_node.py +371 -0
  155. flowfile_core/flowfile/node_designer/ui_components.py +277 -0
  156. flowfile_core/flowfile/schema_callbacks.py +17 -10
  157. flowfile_core/flowfile/setting_generator/settings.py +15 -10
  158. flowfile_core/main.py +5 -1
  159. flowfile_core/routes/routes.py +73 -30
  160. flowfile_core/routes/user_defined_components.py +55 -0
  161. flowfile_core/schemas/cloud_storage_schemas.py +0 -2
  162. flowfile_core/schemas/input_schema.py +228 -65
  163. flowfile_core/schemas/output_model.py +5 -2
  164. flowfile_core/schemas/schemas.py +153 -35
  165. flowfile_core/schemas/transform_schema.py +1083 -412
  166. flowfile_core/schemas/yaml_types.py +103 -0
  167. flowfile_core/types.py +156 -0
  168. flowfile_core/utils/validate_setup.py +3 -1
  169. flowfile_frame/__init__.py +3 -1
  170. flowfile_frame/flow_frame.py +31 -24
  171. flowfile_frame/flow_frame_methods.py +12 -9
  172. flowfile_worker/__init__.py +9 -35
  173. flowfile_worker/create/__init__.py +3 -21
  174. flowfile_worker/create/funcs.py +68 -56
  175. flowfile_worker/create/models.py +130 -62
  176. flowfile_worker/main.py +5 -2
  177. flowfile_worker/routes.py +52 -13
  178. shared/__init__.py +15 -0
  179. shared/storage_config.py +258 -0
  180. tools/migrate/README.md +56 -0
  181. tools/migrate/__init__.py +12 -0
  182. tools/migrate/__main__.py +131 -0
  183. tools/migrate/legacy_schemas.py +621 -0
  184. tools/migrate/migrate.py +598 -0
  185. tools/migrate/tests/__init__.py +0 -0
  186. tools/migrate/tests/conftest.py +23 -0
  187. tools/migrate/tests/test_migrate.py +627 -0
  188. tools/migrate/tests/test_migration_e2e.py +1010 -0
  189. tools/migrate/tests/test_node_migrations.py +813 -0
  190. flowfile/web/static/assets/GraphSolver-17fd26db.css +0 -68
  191. flowfile/web/static/assets/Pivot-f415e85f.css +0 -35
  192. flowfile/web/static/assets/Read-80dc1675.css +0 -197
  193. flowfile/web/static/assets/Read-c3b1929c.js +0 -701
  194. flowfile/web/static/assets/RecordCount-4e95f98e.js +0 -122
  195. flowfile/web/static/assets/Union-89fd73dc.js +0 -146
  196. flowfile/web/static/assets/Unpivot-246e9bbd.css +0 -77
  197. flowfile/web/static/assets/nodeTitle-a16db7c3.js +0 -227
  198. flowfile/web/static/assets/nodeTitle-f4b12bcb.css +0 -134
  199. flowfile_core/flowfile/manage/open_flowfile.py +0 -135
  200. {flowfile-0.3.9.dist-info → flowfile-0.5.1.dist-info/licenses}/LICENSE +0 -0
  201. /flowfile_core/flowfile/manage/manage_flowfile.py → /tools/__init__.py +0 -0
@@ -0,0 +1,61 @@
1
+ import { d as defineComponent, l as computed, c as openBlock, h as createBlock, w as withCtx, f as createVNode, p as createBaseVNode, u as unref, ar as ElIcon, e as createElementBlock, i as createCommentVNode, as as ElPopover, _ as _export_sfc } from "./index-5429bbf8.js";
2
+ const _hoisted_1 = { class: "validation-wrapper" };
3
+ const _hoisted_2 = {
4
+ key: 0,
5
+ class: "error-message"
6
+ };
7
+ const _hoisted_3 = {
8
+ key: 1,
9
+ class: "error-message"
10
+ };
11
+ const _hoisted_4 = {
12
+ key: 2,
13
+ class: "error-message"
14
+ };
15
+ const _sfc_main = /* @__PURE__ */ defineComponent({
16
+ __name: "PivotValidation",
17
+ props: {
18
+ pivotInput: {}
19
+ },
20
+ setup(__props) {
21
+ const props = __props;
22
+ const showValidationMessages = computed(() => {
23
+ return !props.pivotInput.pivot_column || !props.pivotInput.value_col || props.pivotInput.aggregations.length === 0;
24
+ });
25
+ return (_ctx, _cache) => {
26
+ return showValidationMessages.value ? (openBlock(), createBlock(unref(ElPopover), {
27
+ key: 0,
28
+ placement: "top",
29
+ width: "200",
30
+ trigger: "hover",
31
+ content: "Some required fields are missing"
32
+ }, {
33
+ reference: withCtx(() => [
34
+ createVNode(unref(ElIcon), {
35
+ color: "#FF6B6B",
36
+ class: "warning-icon"
37
+ }, {
38
+ default: withCtx(() => _cache[0] || (_cache[0] = [
39
+ createBaseVNode("i", { class: "el-icon-warning" }, null, -1)
40
+ ])),
41
+ _: 1,
42
+ __: [0]
43
+ })
44
+ ]),
45
+ default: withCtx(() => [
46
+ createBaseVNode("div", _hoisted_1, [
47
+ !_ctx.pivotInput.pivot_column ? (openBlock(), createElementBlock("p", _hoisted_2, "Pivot Column cannot be empty.")) : createCommentVNode("", true),
48
+ !_ctx.pivotInput.value_col ? (openBlock(), createElementBlock("p", _hoisted_3, "Value Column cannot be empty.")) : createCommentVNode("", true),
49
+ _ctx.pivotInput.aggregations.length === 0 ? (openBlock(), createElementBlock("p", _hoisted_4, " At least one aggregation must be selected. ")) : createCommentVNode("", true)
50
+ ])
51
+ ]),
52
+ _: 1
53
+ })) : createCommentVNode("", true);
54
+ };
55
+ }
56
+ });
57
+ const PivotValidation_vue_vue_type_style_index_0_scoped_1561039d_lang = "";
58
+ const PivotValidation = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-1561039d"]]);
59
+ export {
60
+ PivotValidation as default
61
+ };
@@ -0,0 +1,61 @@
1
+ import { d as defineComponent, l as computed, c as openBlock, h as createBlock, w as withCtx, f as createVNode, p as createBaseVNode, u as unref, ar as ElIcon, e as createElementBlock, i as createCommentVNode, as as ElPopover, _ as _export_sfc } from "./index-5429bbf8.js";
2
+ const _hoisted_1 = { class: "validation-wrapper" };
3
+ const _hoisted_2 = {
4
+ key: 0,
5
+ class: "error-message"
6
+ };
7
+ const _hoisted_3 = {
8
+ key: 1,
9
+ class: "error-message"
10
+ };
11
+ const _hoisted_4 = {
12
+ key: 2,
13
+ class: "error-message"
14
+ };
15
+ const _sfc_main = /* @__PURE__ */ defineComponent({
16
+ __name: "PivotValidation",
17
+ props: {
18
+ pivotInput: {}
19
+ },
20
+ setup(__props) {
21
+ const props = __props;
22
+ const showValidationMessages = computed(() => {
23
+ return !props.pivotInput.pivot_column || !props.pivotInput.value_col || props.pivotInput.aggregations.length === 0;
24
+ });
25
+ return (_ctx, _cache) => {
26
+ return showValidationMessages.value ? (openBlock(), createBlock(unref(ElPopover), {
27
+ key: 0,
28
+ placement: "top",
29
+ width: "200",
30
+ trigger: "hover",
31
+ content: "Some required fields are missing"
32
+ }, {
33
+ reference: withCtx(() => [
34
+ createVNode(unref(ElIcon), {
35
+ color: "#FF6B6B",
36
+ class: "warning-icon"
37
+ }, {
38
+ default: withCtx(() => _cache[0] || (_cache[0] = [
39
+ createBaseVNode("i", { class: "el-icon-warning" }, null, -1)
40
+ ])),
41
+ _: 1,
42
+ __: [0]
43
+ })
44
+ ]),
45
+ default: withCtx(() => [
46
+ createBaseVNode("div", _hoisted_1, [
47
+ !_ctx.pivotInput.pivot_column ? (openBlock(), createElementBlock("p", _hoisted_2, "Pivot Column cannot be empty.")) : createCommentVNode("", true),
48
+ !_ctx.pivotInput.value_col ? (openBlock(), createElementBlock("p", _hoisted_3, "Value Column cannot be empty.")) : createCommentVNode("", true),
49
+ _ctx.pivotInput.aggregations.length === 0 ? (openBlock(), createElementBlock("p", _hoisted_4, " At least one aggregation must be selected. ")) : createCommentVNode("", true)
50
+ ])
51
+ ]),
52
+ _: 1
53
+ })) : createCommentVNode("", true);
54
+ };
55
+ }
56
+ });
57
+ const PivotValidation_vue_vue_type_style_index_0_scoped_3eb585b2_lang = "";
58
+ const PivotValidation = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-3eb585b2"]]);
59
+ export {
60
+ PivotValidation as default
61
+ };
@@ -1,9 +1,8 @@
1
- import { C as CodeLoader } from "./vue-content-loader.es-ba94b82f.js";
2
- import { v as keymap, w as acceptCompletion, x as indentMore, q as EditorState, r as autocompletion, o as T, u as useNodeStore } from "./vue-codemirror.esm-dc5e3348.js";
3
- import { p as python, o as oneDark } from "./designer-6c322d8e.js";
4
- import { d as defineComponent, r as ref, X as shallowRef, m as watch, c as openBlock, e as createElementBlock, f as createVNode, u as unref, t as toDisplayString, i as createCommentVNode, w as withCtx, h as createBlock, n as onMounted, R as nextTick, a7 as Teleport } from "./index-683fc198.js";
5
- import { G as GenericNodeSettings } from "./genericNodeSettings-def5879b.js";
6
- import { N as NodeButton, a as NodeTitle } from "./nodeTitle-a16db7c3.js";
1
+ import { C as CodeLoader } from "./vue-content-loader.es-2c8e608f.js";
2
+ import { v as keymap, w as acceptCompletion, x as indentMore, q as EditorState, r as autocompletion, o as T, u as useNodeStore } from "./vue-codemirror.esm-41b0e0d7.js";
3
+ import { p as python, o as oneDark } from "./designer-9633482a.js";
4
+ import { d as defineComponent, r as ref, X as shallowRef, m as watch, c as openBlock, e as createElementBlock, f as createVNode, u as unref, t as toDisplayString, i as createCommentVNode, w as withCtx, h as createBlock } from "./index-5429bbf8.js";
5
+ import { G as GenericNodeSettings } from "./genericNodeSettings-4fe5f36b.js";
7
6
  const polarsCompletionVals = [
8
7
  // Polars basics
9
8
  { label: "pl", type: "variable", info: "Polars main module" },
@@ -39,12 +38,12 @@ const polarsCompletionVals = [
39
38
  { label: "float", type: "type" },
40
39
  { label: "bool", type: "type" }
41
40
  ];
42
- const _hoisted_1$2 = { class: "polars-editor-root" };
41
+ const _hoisted_1$1 = { class: "polars-editor-root" };
43
42
  const _hoisted_2 = {
44
43
  key: 0,
45
44
  class: "validation-error"
46
45
  };
47
- const _sfc_main$2 = /* @__PURE__ */ defineComponent({
46
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
48
47
  __name: "pythonEditor",
49
48
  props: {
50
49
  editorString: { type: String, required: true }
@@ -121,7 +120,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
121
120
  });
122
121
  __expose({ insertTextAtCursor });
123
122
  return (_ctx, _cache) => {
124
- return openBlock(), createElementBlock("div", _hoisted_1$2, [
123
+ return openBlock(), createElementBlock("div", _hoisted_1$1, [
125
124
  createVNode(unref(T), {
126
125
  modelValue: code.value,
127
126
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => code.value = $event),
@@ -171,12 +170,12 @@ input_df`
171
170
  };
172
171
  return nodePolarsCode;
173
172
  };
174
- const _hoisted_1$1 = {
173
+ const _hoisted_1 = {
175
174
  key: 0,
176
175
  class: "listbox-wrapper"
177
176
  };
178
- const _sfc_main$1 = /* @__PURE__ */ defineComponent({
179
- __name: "polarsCode",
177
+ const _sfc_main = /* @__PURE__ */ defineComponent({
178
+ __name: "PolarsCode",
180
179
  setup(__props, { expose: __expose }) {
181
180
  const showEditor = ref(false);
182
181
  const nodeStore = useNodeStore();
@@ -218,10 +217,10 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
218
217
  };
219
218
  __expose({ loadNodeData, pushNodeData });
220
219
  return (_ctx, _cache) => {
221
- return dataLoaded.value && nodePolarsCode.value ? (openBlock(), createElementBlock("div", _hoisted_1$1, [
220
+ return dataLoaded.value && nodePolarsCode.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
222
221
  createVNode(GenericNodeSettings, { "model-value": nodePolarsCode.value }, {
223
222
  default: withCtx(() => [
224
- showEditor.value && nodePolarsCode.value ? (openBlock(), createBlock(_sfc_main$2, {
223
+ showEditor.value && nodePolarsCode.value ? (openBlock(), createBlock(_sfc_main$1, {
225
224
  key: 0,
226
225
  ref_key: "editorChild",
227
226
  ref: editorChild,
@@ -235,72 +234,6 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
235
234
  };
236
235
  }
237
236
  });
238
- const _hoisted_1 = { ref: "el" };
239
- const _sfc_main = /* @__PURE__ */ defineComponent({
240
- __name: "PolarsCode",
241
- props: {
242
- nodeId: {
243
- type: Number,
244
- required: true
245
- }
246
- },
247
- setup(__props) {
248
- const nodeStore = useNodeStore();
249
- const childComp = ref(null);
250
- const props = __props;
251
- const drawer = ref(false);
252
- const closeOnDrawer = () => {
253
- var _a;
254
- drawer.value = false;
255
- (_a = childComp.value) == null ? void 0 : _a.pushNodeData();
256
- };
257
- const openDrawer = async () => {
258
- if (nodeStore.node_id === props.nodeId) {
259
- return;
260
- }
261
- nodeStore.closeDrawer();
262
- drawer.value = true;
263
- const drawerOpen = nodeStore.isDrawerOpen;
264
- nodeStore.isDrawerOpen = true;
265
- await nextTick();
266
- if (nodeStore.node_id === props.nodeId && drawerOpen) {
267
- return;
268
- }
269
- if (childComp.value) {
270
- childComp.value.loadNodeData(props.nodeId);
271
- nodeStore.openDrawer(closeOnDrawer);
272
- }
273
- };
274
- onMounted(async () => {
275
- await nextTick();
276
- });
277
- return (_ctx, _cache) => {
278
- return openBlock(), createElementBlock("div", _hoisted_1, [
279
- createVNode(NodeButton, {
280
- ref: "nodeButton",
281
- "node-id": __props.nodeId,
282
- "image-src": "polars_code.png",
283
- title: `${__props.nodeId}: Polars code`,
284
- onClick: openDrawer
285
- }, null, 8, ["node-id", "title"]),
286
- drawer.value ? (openBlock(), createBlock(Teleport, {
287
- key: 0,
288
- to: "#nodesettings"
289
- }, [
290
- createVNode(NodeTitle, {
291
- title: "Polars code",
292
- intro: "Use custom Polars code to transform data."
293
- }),
294
- createVNode(_sfc_main$1, {
295
- ref_key: "childComp",
296
- ref: childComp,
297
- "node-id": __props.nodeId
298
- }, null, 8, ["node-id"])
299
- ])) : createCommentVNode("", true)
300
- ], 512);
301
- };
302
- }
303
- });
304
237
  export {
305
238
  _sfc_main as default
306
239
  };
@@ -0,0 +1,218 @@
1
+ import { C as CodeLoader } from "./vue-content-loader.es-2c8e608f.js";
2
+ import ExcelTableConfig from "./readExcel-67b4aee0.js";
3
+ import CsvTableConfig from "./readCsv-a8bb8b61.js";
4
+ import ParquetTableConfig from "./readParquet-92ce1dbc.js";
5
+ import { c as isInputExcelTable, d as isInputCsvTable, e as isInputParquetTable } from "./nodeInput-5d0d6b79.js";
6
+ import { u as useNodeStore } from "./vue-codemirror.esm-41b0e0d7.js";
7
+ import { F as FileBrowser } from "./designer-9633482a.js";
8
+ import { d as defineComponent, r as ref, l as computed, b as resolveComponent, c as openBlock, e as createElementBlock, p as createBaseVNode, t as toDisplayString, u as unref, h as createBlock, i as createCommentVNode, f as createVNode, w as withCtx, _ as _export_sfc } from "./index-5429bbf8.js";
9
+ import "./dropDown-614b998d.js";
10
+ const _hoisted_1 = {
11
+ key: 0,
12
+ class: "listbox-wrapper"
13
+ };
14
+ const _hoisted_2 = { class: "listbox-wrapper" };
15
+ const _hoisted_3 = { class: "file-upload-container" };
16
+ const _hoisted_4 = {
17
+ for: "file-upload",
18
+ class: "file-upload-label"
19
+ };
20
+ const _hoisted_5 = { class: "file-label-text" };
21
+ const _hoisted_6 = { key: 0 };
22
+ const _hoisted_7 = { class: "listbox-wrapper" };
23
+ const _sfc_main = /* @__PURE__ */ defineComponent({
24
+ __name: "Read",
25
+ setup(__props, { expose: __expose }) {
26
+ const nodeStore = useNodeStore();
27
+ const selectedFile = ref(null);
28
+ const nodeRead = ref(null);
29
+ const receivedTable = ref(null);
30
+ const dataLoaded = ref(false);
31
+ const modalVisibleForOpen = ref(false);
32
+ const getDisplayFileName = computed(() => {
33
+ var _a, _b;
34
+ if ((_a = selectedFile.value) == null ? void 0 : _a.name) {
35
+ return selectedFile.value.name;
36
+ }
37
+ if ((_b = receivedTable.value) == null ? void 0 : _b.name) {
38
+ return receivedTable.value.name;
39
+ }
40
+ return "Choose a file...";
41
+ });
42
+ function createDefaultCsvSettings() {
43
+ return {
44
+ file_type: "csv",
45
+ reference: "",
46
+ starting_from_line: 0,
47
+ delimiter: ",",
48
+ has_headers: true,
49
+ encoding: "utf-8",
50
+ row_delimiter: "\n",
51
+ quote_char: '"',
52
+ infer_schema_length: 1e3,
53
+ truncate_ragged_lines: false,
54
+ ignore_errors: false
55
+ };
56
+ }
57
+ function createDefaultExcelSettings() {
58
+ return {
59
+ file_type: "excel",
60
+ sheet_name: "",
61
+ start_row: 0,
62
+ start_column: 0,
63
+ end_row: 0,
64
+ end_column: 0,
65
+ has_headers: true,
66
+ type_inference: false
67
+ };
68
+ }
69
+ function createDefaultParquetSettings() {
70
+ return {
71
+ file_type: "parquet"
72
+ };
73
+ }
74
+ const handleFileChange = (fileInfo) => {
75
+ var _a;
76
+ try {
77
+ if (!fileInfo) {
78
+ console.warn("No file info provided");
79
+ return;
80
+ }
81
+ const ext = (_a = fileInfo.name.split(".").pop()) == null ? void 0 : _a.toLowerCase();
82
+ if (!ext) {
83
+ console.warn("No file type detected");
84
+ return;
85
+ }
86
+ let fileType;
87
+ let tableSettings;
88
+ switch (ext) {
89
+ case "xlsx":
90
+ fileType = "excel";
91
+ tableSettings = createDefaultExcelSettings();
92
+ break;
93
+ case "csv":
94
+ case "txt":
95
+ fileType = "csv";
96
+ tableSettings = createDefaultCsvSettings();
97
+ break;
98
+ case "parquet":
99
+ fileType = "parquet";
100
+ tableSettings = createDefaultParquetSettings();
101
+ break;
102
+ default:
103
+ console.warn("Unsupported file type:", ext);
104
+ return;
105
+ }
106
+ receivedTable.value = {
107
+ name: fileInfo.name,
108
+ path: fileInfo.path,
109
+ file_type: fileType,
110
+ table_settings: tableSettings
111
+ };
112
+ selectedFile.value = fileInfo;
113
+ modalVisibleForOpen.value = false;
114
+ } catch (error) {
115
+ console.error("Error handling file change:", error);
116
+ }
117
+ };
118
+ const loadNodeData = async (nodeId) => {
119
+ var _a;
120
+ try {
121
+ const nodeResult = await nodeStore.getNodeData(nodeId, false);
122
+ if (!nodeResult) {
123
+ console.warn("No node result received");
124
+ dataLoaded.value = true;
125
+ return;
126
+ }
127
+ nodeRead.value = nodeResult.setting_input;
128
+ if (((_a = nodeResult.setting_input) == null ? void 0 : _a.is_setup) && nodeResult.setting_input.received_file) {
129
+ receivedTable.value = nodeResult.setting_input.received_file;
130
+ }
131
+ dataLoaded.value = true;
132
+ } catch (error) {
133
+ console.error("Error loading node data:", error);
134
+ dataLoaded.value = true;
135
+ }
136
+ };
137
+ const pushNodeData = async () => {
138
+ try {
139
+ dataLoaded.value = false;
140
+ if (!nodeRead.value || !receivedTable.value) {
141
+ console.warn("No node read value available");
142
+ dataLoaded.value = true;
143
+ return;
144
+ }
145
+ nodeRead.value.is_setup = true;
146
+ nodeRead.value.received_file = receivedTable.value;
147
+ await nodeStore.updateSettings(nodeRead);
148
+ } catch (error) {
149
+ console.error("Error pushing node data:", error);
150
+ } finally {
151
+ dataLoaded.value = true;
152
+ }
153
+ };
154
+ __expose({
155
+ loadNodeData,
156
+ pushNodeData
157
+ });
158
+ return (_ctx, _cache) => {
159
+ const _component_el_dialog = resolveComponent("el-dialog");
160
+ return dataLoaded.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
161
+ createBaseVNode("div", _hoisted_2, [
162
+ createBaseVNode("div", _hoisted_3, [
163
+ createBaseVNode("div", {
164
+ class: "file-upload-wrapper",
165
+ onClick: _cache[0] || (_cache[0] = ($event) => modalVisibleForOpen.value = true)
166
+ }, [
167
+ createBaseVNode("label", _hoisted_4, [
168
+ _cache[5] || (_cache[5] = createBaseVNode("i", { class: "fas fa-table file-icon" }, null, -1)),
169
+ createBaseVNode("span", _hoisted_5, toDisplayString(getDisplayFileName.value), 1)
170
+ ])
171
+ ])
172
+ ])
173
+ ]),
174
+ receivedTable.value ? (openBlock(), createElementBlock("div", _hoisted_6, [
175
+ createBaseVNode("div", _hoisted_7, [
176
+ _cache[6] || (_cache[6] = createBaseVNode("div", { class: "listbox-subtitle" }, "File Specs", -1)),
177
+ unref(isInputExcelTable)(receivedTable.value.table_settings) ? (openBlock(), createBlock(ExcelTableConfig, {
178
+ key: 0,
179
+ modelValue: receivedTable.value.table_settings,
180
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => receivedTable.value.table_settings = $event),
181
+ path: receivedTable.value.path
182
+ }, null, 8, ["modelValue", "path"])) : createCommentVNode("", true),
183
+ unref(isInputCsvTable)(receivedTable.value.table_settings) ? (openBlock(), createBlock(CsvTableConfig, {
184
+ key: 1,
185
+ modelValue: receivedTable.value.table_settings,
186
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => receivedTable.value.table_settings = $event)
187
+ }, null, 8, ["modelValue"])) : createCommentVNode("", true),
188
+ unref(isInputParquetTable)(receivedTable.value.table_settings) ? (openBlock(), createBlock(ParquetTableConfig, {
189
+ key: 2,
190
+ modelValue: receivedTable.value.table_settings,
191
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => receivedTable.value.table_settings = $event)
192
+ }, null, 8, ["modelValue"])) : createCommentVNode("", true)
193
+ ])
194
+ ])) : createCommentVNode("", true),
195
+ createVNode(_component_el_dialog, {
196
+ modelValue: modalVisibleForOpen.value,
197
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => modalVisibleForOpen.value = $event),
198
+ title: "Select a file to Read",
199
+ width: "70%"
200
+ }, {
201
+ default: withCtx(() => [
202
+ createVNode(FileBrowser, {
203
+ "allowed-file-types": ["csv", "txt", "parquet", "xlsx"],
204
+ mode: "open",
205
+ onFileSelected: handleFileChange
206
+ })
207
+ ]),
208
+ _: 1
209
+ }, 8, ["modelValue"])
210
+ ])) : (openBlock(), createBlock(unref(CodeLoader), { key: 1 }));
211
+ };
212
+ }
213
+ });
214
+ const Read_vue_vue_type_style_index_0_scoped_f404e0dc_lang = "";
215
+ const Read = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f404e0dc"]]);
216
+ export {
217
+ Read as default
218
+ };
@@ -0,0 +1,62 @@
1
+
2
+ .context-menu[data-v-f404e0dc] {
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
+ }
11
+ .context-menu button[data-v-f404e0dc] {
12
+ display: block;
13
+ background: none;
14
+ border: none;
15
+ padding: 4px 8px;
16
+ text-align: left;
17
+ width: 100%;
18
+ cursor: pointer;
19
+ }
20
+ .context-menu button[data-v-f404e0dc]:hover {
21
+ background-color: #f0f0f0;
22
+ }
23
+ .file-upload-wrapper[data-v-f404e0dc] {
24
+ position: relative;
25
+ width: 100%;
26
+ }
27
+ .file-upload-label[data-v-f404e0dc] {
28
+ display: flex;
29
+ align-items: center;
30
+ background-color: #f5f5f5;
31
+ border: 1px solid #ddd;
32
+ border-radius: 4px;
33
+ padding: 10px 15px;
34
+ color: #333;
35
+ font-size: 16px;
36
+ font-weight: 500;
37
+ cursor: pointer;
38
+ transition: background-color 0.3s ease;
39
+ }
40
+ .file-upload-label[data-v-f404e0dc]:hover {
41
+ background-color: #e4e4e4;
42
+ }
43
+ .file-icon[data-v-f404e0dc] {
44
+ margin-right: 10px;
45
+ font-size: 20px;
46
+ }
47
+ .file-label-text[data-v-f404e0dc] {
48
+ flex-grow: 1;
49
+ margin-left: 10px;
50
+ }
51
+ input[type="text"][data-v-f404e0dc] {
52
+ width: 100%;
53
+ padding: 8px;
54
+ border: 1px solid #ddd;
55
+ border-radius: 4px;
56
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
57
+ transition: border-color 0.2s ease;
58
+ }
59
+ input[type="text"][data-v-f404e0dc]:focus {
60
+ border-color: #3498db;
61
+ outline: none;
62
+ }
@@ -0,0 +1,53 @@
1
+ import { u as useNodeStore } from "./vue-codemirror.esm-41b0e0d7.js";
2
+ import { G as GenericNodeSettings } from "./genericNodeSettings-4fe5f36b.js";
3
+ import { d as defineComponent, r as ref, n as onMounted, R as nextTick, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, i as createCommentVNode } from "./index-5429bbf8.js";
4
+ import "./designer-9633482a.js";
5
+ const _hoisted_1 = {
6
+ key: 0,
7
+ class: "listbox-wrapper"
8
+ };
9
+ const _sfc_main = /* @__PURE__ */ defineComponent({
10
+ __name: "RecordCount",
11
+ setup(__props, { expose: __expose }) {
12
+ const nodeStore = useNodeStore();
13
+ const dataLoaded = ref(false);
14
+ const nodeData = ref(null);
15
+ const nodeRecordCount = ref(null);
16
+ const loadNodeData = async (nodeId) => {
17
+ var _a;
18
+ nodeData.value = await nodeStore.getNodeData(nodeId, false);
19
+ nodeRecordCount.value = (_a = nodeData.value) == null ? void 0 : _a.setting_input;
20
+ dataLoaded.value = true;
21
+ };
22
+ const pushNodeData = async () => {
23
+ if (nodeRecordCount.value) {
24
+ nodeStore.updateSettings(nodeRecordCount);
25
+ }
26
+ };
27
+ __expose({
28
+ loadNodeData,
29
+ pushNodeData
30
+ });
31
+ onMounted(async () => {
32
+ await nextTick();
33
+ });
34
+ return (_ctx, _cache) => {
35
+ return dataLoaded.value && nodeRecordCount.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
36
+ createVNode(GenericNodeSettings, {
37
+ modelValue: nodeRecordCount.value,
38
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => nodeRecordCount.value = $event)
39
+ }, {
40
+ default: withCtx(() => _cache[1] || (_cache[1] = [
41
+ createBaseVNode("p", null, " This node helps you quickly retrieve the total number of records from the selected table. It's a simple yet powerful tool to keep track of the data volume as you work through your tasks. ", -1),
42
+ createBaseVNode("p", null, "This node does not need a setup", -1)
43
+ ])),
44
+ _: 1,
45
+ __: [1]
46
+ }, 8, ["modelValue"])
47
+ ])) : createCommentVNode("", true);
48
+ };
49
+ }
50
+ });
51
+ export {
52
+ _sfc_main as default
53
+ };