MilanM's picture
Update app.py
bb7f3a2 verified
import marimo
__generated_with = "0.19.9"
app = marimo.App(
width="medium",
app_title="Context Template Drafting Marimo Notebook",
)
@app.cell
def _():
import marimo as mo
from wigglystuff import SortableList
from jsonpath import JSONPath
import json
return JSONPath, json, mo
@app.cell
def _():
from FUNCTIONS.json_template_drafting_functions import (
json_to_marimo_ui,
create_download_button,
)
return create_download_button, json_to_marimo_ui
@app.cell(hide_code=True)
def _(mo):
mo.md(r"""
### **Intro**
This marimo notebook allows you to upload a **.json** file *(with or without values)* and get a fillable version of the template structure that you can fill out and download as a completed template. ***Upload a file by clicking on the area below or draging and dropping a file onto it.***
""")
return
@app.cell
def _(mo):
file_upload = mo.ui.file(
filetypes=[".json"],
label="**Upload JSON Template** (*Click and Select or Drag & Drop*)",
kind="area",
)
file_upload
return (file_upload,)
@app.cell
def _(file_upload, json):
example_preview = (
json.loads(file_upload.contents())
if file_upload.value is not None and file_upload.contents() is not None
else None
)
return (example_preview,)
@app.cell
def _(example_preview, file_upload, mo):
(
mo.accordion({"Preview Example (after loading file)": example_preview})
if file_upload.value is not None and file_upload.contents() is not None
else mo.md("*Upload a JSON File to Preview the Template*")
)
return
@app.cell(hide_code=True)
def _(mo):
mo.md(r"""
### **Edit the values**
Within the template below you can edit the values of the different inputs and when you define a filename and press **Download** it will save the **.json** file locally on your computer. ***Above you can also see a collapsable preview with filled out values if your template had any***
""")
return
@app.cell
def _(mo):
replicate_values = mo.ui.checkbox(
label="**Prefill Values From Template** *(if present)*"
)
replicate_values
return (replicate_values,)
@app.cell
def _(file_upload, json_to_marimo_ui):
json_form = json_to_marimo_ui(file_upload, replicate_values=replicate_values.value)
json_form
return (json_form,)
@app.cell
def _(JSONPath, json_form):
client_name_in_template = (
(JSONPath("$..client_name").parse(json_form.value) or [""])[0]
.lower()
.replace(" ", "_")
if json_form.value is not None
else ""
)
return (client_name_in_template,)
@app.cell
def _(client_name_in_template, mo):
save_file_name = mo.ui.text(
label="**Download File Name:**",
value=client_name_in_template if client_name_in_template else "",
full_width=True,
placeholder="add_file_name",
)
return (save_file_name,)
@app.cell
def _(create_download_button, json_form, save_file_name):
download_output = create_download_button(
json_form.value,
filename_prefix=(
save_file_name.value
if save_file_name.value is not None
else "downloaded_template_output"
),
)
return (download_output,)
@app.cell
def _(download_output, mo, save_file_name):
download_stack = mo.vstack(
[save_file_name, download_output], justify="space-around", gap=1
)
download_stack
return
if __name__ == "__main__":
app.run()