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