|
import gradio as gr |
|
import os |
|
|
|
from process import process_data |
|
|
|
def makeButtonClickableFiles(files): |
|
"""Makes a button interactive only if all files in the list have correct extensions. |
|
|
|
Args: |
|
files (list): List of uploaded file objects. |
|
|
|
Returns: |
|
_type_: Button state (interactive or not) and possibly a warning message. |
|
""" |
|
if not files: |
|
return gr.Button(interactive=False) |
|
|
|
allowed_extensions = ["xls", "xlsx"] |
|
for file in files: |
|
base_name = os.path.basename(file.name) |
|
|
|
if base_name.split('.')[-1].lower() not in allowed_extensions: |
|
raise gr.Error(f"Unsupported file: {base_name}.Allowed extensions: .xls .xlsx") |
|
|
|
return gr.Button(interactive=True) |
|
|
|
|
|
|
|
|
|
with gr.Blocks() as demo: |
|
|
|
with gr.Row(): |
|
header = gr.Markdown(("<h1>MindBody VS. Medserv Checker </h1>")) |
|
|
|
with gr.Row(): |
|
|
|
with gr.Column(): |
|
file_uploader_mindbody = gr.Files( |
|
label=("Upload MindBody"), |
|
file_count="multiple", |
|
file_types=[".xlsx", '.xls'], |
|
container=True, |
|
interactive=True, |
|
scale=1, |
|
) |
|
|
|
|
|
with gr.Column(): |
|
file_uploader_medserv = gr.Files( |
|
label=("Upload Medserv"), |
|
file_count= "multiple", |
|
file_types=[".xlsx", '.xls'], |
|
container=True, |
|
interactive=True, |
|
scale=1, |
|
) |
|
|
|
with gr.Row(): |
|
tollerance = gr.Slider(0, 7, value = 1, step = 1, interactive = True, label="Days Tolerance", |
|
info="Set the number of days of tolerance to match the sale dates between MindBody and Medserve (0 = no tolerance / exact match).") |
|
|
|
with gr.Row(): |
|
|
|
file_process_button = gr.Button( |
|
value="PROCESS FILES", |
|
interactive=False, |
|
) |
|
|
|
with gr.Row(): |
|
processed_file = gr.Files( |
|
label=("Output File"), |
|
file_count="single", |
|
interactive=False, |
|
elem_classes="gradio-file", |
|
) |
|
|
|
|
|
|
|
|
|
file_uploader_mindbody.change( |
|
fn=makeButtonClickableFiles, |
|
inputs=[file_uploader_mindbody], |
|
outputs=[file_process_button]) |
|
|
|
|
|
file_uploader_medserv.change( |
|
fn=makeButtonClickableFiles, |
|
inputs=[file_uploader_medserv], |
|
outputs=[file_process_button]) |
|
|
|
|
|
file_process_button.click( |
|
fn = process_data, |
|
inputs = [file_uploader_mindbody, file_uploader_medserv, tollerance], |
|
outputs = processed_file) |
|
|
|
|
|
if __name__ == "__main__": |
|
demo.queue().launch() |