@marimo-team/frontend 0.14.18-dev29 → 0.14.18-dev30
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.
- package/dist/assets/{ConnectedDataExplorerComponent-ByyTMxAe.js → ConnectedDataExplorerComponent-oOiI8-Is.js} +1 -1
- package/dist/assets/{ImageComparisonComponent-BEvMtMGK.js → ImageComparisonComponent-CrBtZ5gk.js} +1 -1
- package/dist/assets/{VegaLite-B6ZXw089.js → VegaLite-BruLY7Yo.js} +1 -1
- package/dist/assets/{_baseEach-BM02cWfw.js → _baseEach-Dtl0u6a9.js} +1 -1
- package/dist/assets/_baseMap-BbSMx7sO.js +1 -0
- package/dist/assets/{_baseUniq-B3VNhTaG.js → _baseUniq-oH3tH_Lx.js} +1 -1
- package/dist/assets/{_createAggregator-CBRdQRkQ.js → _createAggregator-DVbCk7I8.js} +1 -1
- package/dist/assets/{any-language-editor-EOMlEVeL.js → any-language-editor-DNTe-hGh.js} +1 -1
- package/dist/assets/{architectureDiagram-SUXI7LT5-Bz_etWhT.js → architectureDiagram-SUXI7LT5-BNE5Ocu0.js} +1 -1
- package/dist/assets/{blockDiagram-6J76NXCF-C3NjjGV1.js → blockDiagram-6J76NXCF-BkAnLDAP.js} +1 -1
- package/dist/assets/{c4Diagram-6F6E4RAY-Cfcu16fD.js → c4Diagram-6F6E4RAY-CMvcINsX.js} +1 -1
- package/dist/assets/channel-AZKaNSLi.js +1 -0
- package/dist/assets/{chunk-353BL4L5-D_x_But5.js → chunk-353BL4L5-DZ6k9BBV.js} +1 -1
- package/dist/assets/{chunk-67H74DCK-B78ctzkW.js → chunk-67H74DCK-Btl2ATCi.js} +1 -1
- package/dist/assets/{chunk-AACKK3MU-C_X3yBIA.js → chunk-AACKK3MU-Di82a8tq.js} +1 -1
- package/dist/assets/{chunk-BFAMUDN2-CmT_5Wnf.js → chunk-BFAMUDN2-C6ACh81N.js} +1 -1
- package/dist/assets/{chunk-E2GYISFI-TLOBmOmy.js → chunk-E2GYISFI-BGhna3Tu.js} +1 -1
- package/dist/assets/{chunk-OW32GOEJ-C1x0Lb_3.js → chunk-OW32GOEJ-BvQbpZtP.js} +6 -6
- package/dist/assets/{chunk-SKB7J2MH-t9L60ESv.js → chunk-SKB7J2MH-B5xc8b3Z.js} +1 -1
- package/dist/assets/{chunk-SZ463SBG-OsFZC8Fm.js → chunk-SZ463SBG-DqkT0n2R.js} +1 -1
- package/dist/assets/{circle-play-Coa1pbLo.js → circle-play-DPIHEaaR.js} +1 -1
- package/dist/assets/classDiagram-M3E45YP4-B7yw2nKS.js +1 -0
- package/dist/assets/classDiagram-v2-YAWTLIQI-B7yw2nKS.js +1 -0
- package/dist/assets/clone-4KJc73U3.js +1 -0
- package/dist/assets/common-keywords-Dg3Y2cJS.js +1 -0
- package/dist/assets/{compile-kBFbLKtC.js → compile-DiFbtiAE.js} +1 -1
- package/dist/assets/{dagre-JOIXM2OF-KIVae2Ja.js → dagre-JOIXM2OF-1P_Dgkjl.js} +1 -1
- package/dist/assets/{data-grid-overlay-editor-ClaYc6AL.js → data-grid-overlay-editor-Dghfz964.js} +1 -1
- package/dist/assets/{diagram-5UYTHUR4-CAegkM8o.js → diagram-5UYTHUR4-56oBr9Mj.js} +1 -1
- package/dist/assets/{diagram-VMROVX33-COZimksW.js → diagram-VMROVX33-Bg7PYU8p.js} +1 -1
- package/dist/assets/{diagram-ZTM2IBQH-RPzV6IQt.js → diagram-ZTM2IBQH-CPzEgjbH.js} +1 -1
- package/dist/assets/duckdb-keywords-CFYiiNsB.js +1 -0
- package/dist/assets/{edit-page-Bj7J0vUV.js → edit-page-DCrlym3M.js} +4 -4
- package/dist/assets/{erDiagram-3M52JZNH-DyyQZo2F.js → erDiagram-3M52JZNH-T300kYM8.js} +1 -1
- package/dist/assets/{flowDiagram-KYDEHFYC-BY45MXHx.js → flowDiagram-KYDEHFYC-BYZfYSI2.js} +1 -1
- package/dist/assets/{ganttDiagram-EK5VF46D-D0SJ9Vb8.js → ganttDiagram-EK5VF46D-BEDi_5bs.js} +1 -1
- package/dist/assets/{gitGraphDiagram-GW3U2K7C-DQIrG7Ne.js → gitGraphDiagram-GW3U2K7C-Cu1vg-Ae.js} +1 -1
- package/dist/assets/{glide-data-editor-CvbrMET8.js → glide-data-editor-lK9K3ps-.js} +4 -4
- package/dist/assets/{graph-BvDRm3kJ.js → graph-CDj368Ef.js} +1 -1
- package/dist/assets/{home-page-StH-FqwP.js → home-page-Bke3YQtW.js} +2 -2
- package/dist/assets/{index-FjwIsM4E.js → index-BIamDpT3.js} +1 -1
- package/dist/assets/{index-BxpEkFHY.js → index-BdPIybcd.js} +1 -1
- package/dist/assets/{index-BMlE8K6G.js → index-BfMKs8fK.js} +188 -179
- package/dist/assets/{index-DeBpKt6z.js → index-BgN5JveD.js} +1 -1
- package/dist/assets/{index-D6ttr-M5.js → index-BlIpJJ1s.js} +1 -1
- package/dist/assets/{index-B2AnidM8.js → index-C1sif23O.js} +1 -1
- package/dist/assets/{index-Dl0aViKc.js → index-C5zHu97c.js} +1 -1
- package/dist/assets/{index-C1Ev5kmm.js → index-CHUAhpF9.js} +1 -1
- package/dist/assets/{index-nhAJG0Zq.js → index-CHvSTvku.js} +1 -1
- package/dist/assets/{index-BklcjKLc.js → index-CV-cT8XZ.js} +1 -1
- package/dist/assets/{index-DqW_iv-8.js → index-CVJgiMKT.js} +1 -1
- package/dist/assets/index-Cd8lKjXa.js +68 -0
- package/dist/assets/{index-DcCjqlwv.js → index-D2wUEqSr.js} +1 -1
- package/dist/assets/{index-BSAd1_jA.js → index-DQeLlRNN.js} +1 -1
- package/dist/assets/{index-D9fGE-pM.js → index-DdE5sj7B.js} +1 -1
- package/dist/assets/{index-DWx68F4W.js → index-DpaljNVK.js} +1 -1
- package/dist/assets/{index-BqgXsw2X.js → index-DskNGo48.js} +1 -1
- package/dist/assets/{index-v9Rqt1AL.js → index-PXSGnTt_.js} +1 -1
- package/dist/assets/{index-QQV-w55W.js → index-UakLQEhR.js} +1 -1
- package/dist/assets/{index-DXQK0dbr.js → index-uLE7UQoA.js} +1 -1
- package/dist/assets/infoDiagram-LHK5PUON-DvKYogid.js +2 -0
- package/dist/assets/{journeyDiagram-EWQZEKCU-Cv34gpl9.js → journeyDiagram-EWQZEKCU-qFhtMoPK.js} +1 -1
- package/dist/assets/{kanban-definition-ZSS6B67P-FTq3yb2c.js → kanban-definition-ZSS6B67P-d4c_bpNj.js} +1 -1
- package/dist/assets/{layout-DGo16j-R.js → layout-B1YrGZ5o.js} +1 -1
- package/dist/assets/{linear-0J3_DIzy.js → linear-Ce9Ln0y7.js} +1 -1
- package/dist/assets/{links-h2K0p6lB.js → links--FJRrKkU.js} +12 -12
- package/dist/assets/{mermaid-BfTGIKjH.js → mermaid-TIsLiY_c.js} +26 -26
- package/dist/assets/min-pEaRzhJa.js +1 -0
- package/dist/assets/{mindmap-definition-6CBA2TL7-BFWeE5l4.js → mindmap-definition-6CBA2TL7-NzRV0KhB.js} +1 -1
- package/dist/assets/{number-overlay-editor-nJ_uE4OC.js → number-overlay-editor-wIfVoa2g.js} +2 -2
- package/dist/assets/{pieDiagram-NIOCPIFQ-CIPNZnyq.js → pieDiagram-NIOCPIFQ-DLjq0P3e.js} +3 -3
- package/dist/assets/{quadrantDiagram-2OG54O6I-DFTpGGxg.js → quadrantDiagram-2OG54O6I-9Oz1n3p6.js} +1 -1
- package/dist/assets/{react-plotly-BHmRdjjS.js → react-plotly-CpyIgXbT.js} +1 -1
- package/dist/assets/{requirementDiagram-QOLK2EJ7-bhqWzDfk.js → requirementDiagram-QOLK2EJ7-efmOhh-Y.js} +1 -1
- package/dist/assets/{run-page-C08qMCRH.js → run-page-CigF14nw.js} +1 -1
- package/dist/assets/{sankeyDiagram-4UZDY2LN-CaS2yE0B.js → sankeyDiagram-4UZDY2LN-C8d1HP5D.js} +1 -1
- package/dist/assets/{sequenceDiagram-SKLFT4DO-B7DEVd4j.js → sequenceDiagram-SKLFT4DO-YYvQS_Ez.js} +1 -1
- package/dist/assets/{slides-component-CT3uDvEm.js → slides-component-DaIiszro.js} +1 -1
- package/dist/assets/sortBy-DPhCeare.js +1 -0
- package/dist/assets/{stateDiagram-MI5ZYTHO-DcIY6HTB.js → stateDiagram-MI5ZYTHO-BUsXwOkv.js} +1 -1
- package/dist/assets/stateDiagram-v2-5AN5P6BG-C0_3uVRU.js +1 -0
- package/dist/assets/{storage-Ciru-sFj.js → storage-DVfCYCuA.js} +5 -5
- package/dist/assets/{terminal-Pn5QVsJZ.js → terminal-WkSrTXmZ.js} +1 -1
- package/dist/assets/time-CMDJBHm4.js +1 -0
- package/dist/assets/{timeline-definition-MYPXXCX6-Cd626Lgg.js → timeline-definition-MYPXXCX6-D6F16eAY.js} +1 -1
- package/dist/assets/{tracing-B1pgg2Ra.js → tracing-Bs9fWQQg.js} +2 -2
- package/dist/assets/{trash-CKCjDfOY.js → trash-BotaB4h_.js} +1 -1
- package/dist/assets/{treemap-75Q7IDZK-D6IH2czJ.js → treemap-75Q7IDZK-ReN7RgbK.js} +1 -1
- package/dist/assets/{vega-component-BbGjjrAW.js → vega-component-LxHHxxVY.js} +1 -1
- package/dist/assets/{xychartDiagram-H2YORKM3-Dk39Tmbz.js → xychartDiagram-H2YORKM3-BBA6XWcv.js} +1 -1
- package/dist/index.html +1 -1
- package/package.json +3 -2
- package/src/components/app-config/user-config-form.tsx +25 -0
- package/src/components/chat/markdown-renderer.tsx +1 -1
- package/src/components/editor/ai/add-cell-with-ai.tsx +1 -1
- package/src/components/editor/cell/CreateCellButton.tsx +1 -1
- package/src/components/editor/cell/code/language-toggle.tsx +1 -1
- package/src/components/editor/renderers/CellArray.tsx +1 -1
- package/src/core/codemirror/language/LanguageAdapters.ts +1 -1
- package/src/core/codemirror/language/__tests__/sql.test.ts +5 -5
- package/src/core/codemirror/language/extension.ts +1 -1
- package/src/core/codemirror/language/languages/sql/completion-sources.tsx +99 -0
- package/src/core/codemirror/language/languages/sql/completion-store.ts +191 -0
- package/src/core/codemirror/language/languages/{sql.ts → sql/sql.ts} +124 -248
- package/src/core/codemirror/language/languages/sql/utils.ts +42 -0
- package/src/core/codemirror/language/panel/panel.tsx +1 -1
- package/src/core/config/feature-flag.tsx +2 -0
- package/src/theme/useTheme.ts +1 -1
- package/dist/assets/_baseMap-CrbS00BX.js +0 -1
- package/dist/assets/channel-U5X5dN6K.js +0 -1
- package/dist/assets/classDiagram-M3E45YP4-7u91LcR8.js +0 -1
- package/dist/assets/classDiagram-v2-YAWTLIQI-7u91LcR8.js +0 -1
- package/dist/assets/clone-DltB19IA.js +0 -1
- package/dist/assets/infoDiagram-LHK5PUON-BI8vgvHA.js +0 -2
- package/dist/assets/min-BN2Aip45.js +0 -1
- package/dist/assets/sortBy-_N03fOwk.js +0 -1
- package/dist/assets/stateDiagram-v2-5AN5P6BG-BbbtK1gk.js +0 -1
- package/dist/assets/time-CzUrup3A.js +0 -1
- package/src/core/codemirror/language/languages/sql-dialects/README.md +0 -5
- package/src/core/codemirror/language/languages/sql-dialects/duckdb.ts +0 -22
- package/src/core/codemirror/language/languages/sql-dialects/spec_duckdb.py +0 -257
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
# Copyright 2025 Marimo. All rights reserved.
|
|
2
|
-
# /// script
|
|
3
|
-
# requires-python = ">=3.12"
|
|
4
|
-
# dependencies = [
|
|
5
|
-
# "duckdb==1.3.2",
|
|
6
|
-
# "marimo",
|
|
7
|
-
# "polars==1.31.0",
|
|
8
|
-
# "pyarrow==21.0.0",
|
|
9
|
-
# "sqlglot==27.4.1",
|
|
10
|
-
# ]
|
|
11
|
-
# ///
|
|
12
|
-
|
|
13
|
-
# Ignores lack of return type for functions
|
|
14
|
-
# ruff: noqa: ANN202
|
|
15
|
-
# mypy: disable-error-code="no-untyped-def"
|
|
16
|
-
|
|
17
|
-
# Ignore SQL Types
|
|
18
|
-
# ruff: noqa: F541
|
|
19
|
-
|
|
20
|
-
import marimo
|
|
21
|
-
|
|
22
|
-
__generated_with = "0.14.13"
|
|
23
|
-
app = marimo.App(width="medium")
|
|
24
|
-
|
|
25
|
-
with app.setup:
|
|
26
|
-
import argparse
|
|
27
|
-
from datetime import datetime
|
|
28
|
-
|
|
29
|
-
import duckdb
|
|
30
|
-
import polars as pl
|
|
31
|
-
|
|
32
|
-
import marimo as mo
|
|
33
|
-
from marimo import _loggers
|
|
34
|
-
|
|
35
|
-
LOGGER = _loggers.marimo_logger()
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
@app.cell
|
|
39
|
-
def _():
|
|
40
|
-
excluded_keywords = ["__internal", "icu", "has_", "pg_", "allocator"]
|
|
41
|
-
return (excluded_keywords,)
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
@app.cell(hide_code=True)
|
|
45
|
-
def _(excluded_keywords, form, num_keywords, num_types):
|
|
46
|
-
mo.md(
|
|
47
|
-
rf"""
|
|
48
|
-
## DuckDB Schema
|
|
49
|
-
|
|
50
|
-
#### Number of keywords: **{num_keywords}**
|
|
51
|
-
|
|
52
|
-
#### Number of types: **{num_types}**
|
|
53
|
-
|
|
54
|
-
To update the duckdb codemirror spec, you can either
|
|
55
|
-
|
|
56
|
-
- Run this python script to generate the outputs or
|
|
57
|
-
- Submit the form below
|
|
58
|
-
|
|
59
|
-
{form}
|
|
60
|
-
|
|
61
|
-
❗ And then update the duckdb spec under `frontend/src/core/codemirror/language/languages/sql-dialects/duckdb.ts`
|
|
62
|
-
|
|
63
|
-
*Excluded keywords: {excluded_keywords}
|
|
64
|
-
|
|
65
|
-
_{mo.md(f"Ran on DuckDB {duckdb.__version__}").right()}_
|
|
66
|
-
_{mo.md(f"Last updated: {datetime.today().date().strftime('%B %d %Y')}").right()}_
|
|
67
|
-
"""
|
|
68
|
-
)
|
|
69
|
-
return
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
@app.cell
|
|
73
|
-
def _(df, form):
|
|
74
|
-
parser = argparse.ArgumentParser(
|
|
75
|
-
prog="DuckDB Spec",
|
|
76
|
-
description="Runs SQL to save types and keywords for DuckDB dialect in Codemirror",
|
|
77
|
-
)
|
|
78
|
-
|
|
79
|
-
parser.add_argument("-s", "--savepath", default="temp.json")
|
|
80
|
-
args = parser.parse_args()
|
|
81
|
-
|
|
82
|
-
if mo.app_meta().mode == "script":
|
|
83
|
-
savepath = args.savepath
|
|
84
|
-
LOGGER.info(f"Saving JSON file to {savepath}")
|
|
85
|
-
write_to_file(df, savepath)
|
|
86
|
-
LOGGER.info(f"Saved file to {savepath}")
|
|
87
|
-
else:
|
|
88
|
-
savepath = form.value
|
|
89
|
-
if savepath is not None and savepath.strip() != "":
|
|
90
|
-
write_to_file(df, savepath)
|
|
91
|
-
mo.output.replace(mo.md(f"## Saved JSON file to {savepath}"))
|
|
92
|
-
return
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
@app.cell(hide_code=True)
|
|
96
|
-
def _():
|
|
97
|
-
_df = mo.sql(
|
|
98
|
-
f"""
|
|
99
|
-
WITH
|
|
100
|
-
duckdb_types_cte AS (
|
|
101
|
-
SELECT
|
|
102
|
-
ROW_NUMBER() OVER () AS rn,
|
|
103
|
-
type_name AS duckdb_types
|
|
104
|
-
FROM
|
|
105
|
-
(
|
|
106
|
-
SELECT DISTINCT
|
|
107
|
-
type_name
|
|
108
|
-
FROM
|
|
109
|
-
duckdb_types()
|
|
110
|
-
)
|
|
111
|
-
),
|
|
112
|
-
duckdb_settings_cte AS (
|
|
113
|
-
SELECT
|
|
114
|
-
ROW_NUMBER() OVER () AS rn,
|
|
115
|
-
name AS duckdb_settings
|
|
116
|
-
FROM
|
|
117
|
-
(
|
|
118
|
-
SELECT DISTINCT
|
|
119
|
-
name
|
|
120
|
-
FROM
|
|
121
|
-
duckdb_settings()
|
|
122
|
-
)
|
|
123
|
-
),
|
|
124
|
-
duckdb_functions_cte AS (
|
|
125
|
-
SELECT
|
|
126
|
-
ROW_NUMBER() OVER () AS rn,
|
|
127
|
-
function_name AS duckdb_functions
|
|
128
|
-
FROM
|
|
129
|
-
(
|
|
130
|
-
SELECT DISTINCT
|
|
131
|
-
function_name
|
|
132
|
-
FROM
|
|
133
|
-
duckdb_functions()
|
|
134
|
-
)
|
|
135
|
-
),
|
|
136
|
-
duckdb_keywords_cte AS (
|
|
137
|
-
SELECT
|
|
138
|
-
ROW_NUMBER() OVER () AS rn,
|
|
139
|
-
keyword_name AS duckdb_keywords
|
|
140
|
-
FROM
|
|
141
|
-
(
|
|
142
|
-
SELECT DISTINCT
|
|
143
|
-
keyword_name
|
|
144
|
-
FROM
|
|
145
|
-
duckdb_keywords()
|
|
146
|
-
)
|
|
147
|
-
)
|
|
148
|
-
SELECT
|
|
149
|
-
t.duckdb_types,
|
|
150
|
-
s.duckdb_settings,
|
|
151
|
-
f.duckdb_functions,
|
|
152
|
-
k.duckdb_keywords
|
|
153
|
-
FROM
|
|
154
|
-
duckdb_types_cte AS t
|
|
155
|
-
FULL OUTER JOIN duckdb_settings_cte AS s ON t.rn = s.rn
|
|
156
|
-
FULL OUTER JOIN duckdb_functions_cte AS f ON COALESCE(t.rn, s.rn) = f.rn
|
|
157
|
-
FULL OUTER JOIN duckdb_keywords_cte AS k ON COALESCE(t.rn, s.rn, f.rn) = k.rn
|
|
158
|
-
ORDER BY
|
|
159
|
-
COALESCE(t.rn, s.rn, f.rn, k.rn);
|
|
160
|
-
"""
|
|
161
|
-
)
|
|
162
|
-
return
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
@app.cell(hide_code=True)
|
|
166
|
-
def _(excluded_keywords):
|
|
167
|
-
df = mo.sql(
|
|
168
|
-
f"""
|
|
169
|
-
WITH
|
|
170
|
-
stg_keywords AS (
|
|
171
|
-
SELECT
|
|
172
|
-
'duckdb_keywords' AS keyword_group,
|
|
173
|
-
keyword_name AS keyword
|
|
174
|
-
FROM
|
|
175
|
-
duckdb_keywords()
|
|
176
|
-
UNION ALL
|
|
177
|
-
SELECT
|
|
178
|
-
'duckdb_settings' AS keyword_group,
|
|
179
|
-
name AS keyword
|
|
180
|
-
FROM
|
|
181
|
-
duckdb_settings()
|
|
182
|
-
UNION ALL
|
|
183
|
-
SELECT
|
|
184
|
-
'duckdb_functions' AS keyword_group,
|
|
185
|
-
function_name AS keyword
|
|
186
|
-
FROM
|
|
187
|
-
duckdb_functions()
|
|
188
|
-
UNION ALL
|
|
189
|
-
SELECT
|
|
190
|
-
'duckdb_types' AS keyword_group,
|
|
191
|
-
type_name AS keyword
|
|
192
|
-
FROM
|
|
193
|
-
duckdb_types()
|
|
194
|
-
),
|
|
195
|
-
all_keywords AS (
|
|
196
|
-
SELECT
|
|
197
|
-
STRING_AGG(DISTINCT keyword, ' ' ORDER BY keyword) AS keywords_str
|
|
198
|
-
FROM
|
|
199
|
-
stg_keywords
|
|
200
|
-
WHERE {filter_keywords_query('keyword', excluded_keywords)}
|
|
201
|
-
),
|
|
202
|
-
builtin_keywords AS (
|
|
203
|
-
SELECT
|
|
204
|
-
STRING_AGG(DISTINCT keyword, ' ' ORDER BY keyword) AS builtin_str
|
|
205
|
-
FROM
|
|
206
|
-
stg_keywords
|
|
207
|
-
WHERE
|
|
208
|
-
keyword_group IN ('duckdb_keywords', 'duckdb_settings')
|
|
209
|
-
),
|
|
210
|
-
duckdb_types_str AS (
|
|
211
|
-
SELECT
|
|
212
|
-
STRING_AGG(DISTINCT type_name, ' ' ORDER BY type_name) AS types_str
|
|
213
|
-
FROM
|
|
214
|
-
duckdb_types()
|
|
215
|
-
)
|
|
216
|
-
SELECT
|
|
217
|
-
version() as duckdb_version,
|
|
218
|
-
today() as last_updated,
|
|
219
|
-
ak.keywords_str AS keywords,
|
|
220
|
-
bk.builtin_str AS builtin,
|
|
221
|
-
dts.types_str AS types
|
|
222
|
-
FROM
|
|
223
|
-
all_keywords AS ak,
|
|
224
|
-
builtin_keywords AS bk,
|
|
225
|
-
duckdb_types_str AS dts;
|
|
226
|
-
"""
|
|
227
|
-
)
|
|
228
|
-
return (df,)
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
@app.cell
|
|
232
|
-
def _(df):
|
|
233
|
-
num_keywords = len(df["keywords"][0].split(" "))
|
|
234
|
-
num_types = len(df["types"][0].split(" "))
|
|
235
|
-
|
|
236
|
-
form = mo.ui.text(placeholder="temp.json", label="Savepath").form(
|
|
237
|
-
submit_button_label="Save"
|
|
238
|
-
)
|
|
239
|
-
return form, num_keywords, num_types
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
@app.function
|
|
243
|
-
def filter_keywords_query(column: str, excluded_keywords: list[str]) -> str:
|
|
244
|
-
like_conditions = [
|
|
245
|
-
f"{column} NOT LIKE '{kw}%'" for kw in excluded_keywords
|
|
246
|
-
]
|
|
247
|
-
where_clause = " AND ".join(like_conditions)
|
|
248
|
-
return where_clause
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
@app.function
|
|
252
|
-
def write_to_file(df: pl.DataFrame, filepath: str) -> None:
|
|
253
|
-
df.select(pl.exclude("builtin")).write_json(filepath)
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
if __name__ == "__main__":
|
|
257
|
-
app.run()
|