|
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 Tollerance",
|
|
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() |