Spaces:
Sleeping
Sleeping
| 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) | |
| # Extract the file extension and check if it's in the allowed list. | |
| 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) | |
| # Define a Gradio interface | |
| 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() |