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()