# -*- coding: utf-8 -*-
"""
@author: yq
@time: 2024/12/4
@desc:
"""
import matplotlib
matplotlib.use('Agg')
import gradio as gr
from webui import f_project_is_exist, f_data_upload, engine, f_download_code, f_code_generate, f_get_sheet_data
input_elems = set()
elem_dict = {}
with gr.Blocks() as demo:
gr.HTML('
Strategy-Flow-Simulation
')
gr.HTML('决策流快速仿真工具
')
with gr.Tabs():
with gr.TabItem("策略仿真"):
with gr.Row():
with gr.Column():
with gr.Row():
project_name = gr.Textbox(label="项目名称", placeholder="请输入不重复的项目名称",
info="项目名称将会被作为缓存目录名称,如果重复会导致结果被覆盖")
with gr.Row():
file_data = gr.File(label="策略文档", file_types=[".xlsx"], scale=3)
sheet_name = gr.Dropdown(choices=["流程"], value="流程", label="策略查看", interactive=True,
info="流程及节点信息查看", scale=1)
with gr.Row():
data_upload = gr.Dataframe(visible=False, label="当前上传数据", max_height=300)
code_generate = gr.Button("生成代码", variant="primary")
input_elems.update(
{project_name, sheet_name, file_data, data_upload})
elem_dict.update(dict(
project_name=project_name,
sheet_name=sheet_name,
file_data=file_data,
data_upload=data_upload,
code_generate=code_generate
))
with gr.Column():
with gr.Row():
generate_progress = gr.Textbox(label="生成进度", scale=4)
download_code = gr.DownloadButton(label="代码下载", variant="primary",
visible=False, scale=1)
file_report = gr.File(visible=False)
with gr.Row():
code_view = gr.Code()
input_elems.update(
{generate_progress, download_code, file_report})
elem_dict.update(dict(
generate_progress=generate_progress,
download_report=download_code,
file_report=file_report
))
engine.add_elems(elem_dict)
project_name.change(fn=f_project_is_exist, inputs=input_elems)
sheet_name.change(fn=f_get_sheet_data, inputs=input_elems, outputs=[data_upload])
file_data.upload(fn=f_data_upload, inputs=input_elems, outputs=[data_upload, sheet_name])
code_generate.click(fn=f_code_generate, inputs=input_elems,
outputs=[generate_progress, code_view, download_code])
download_code.click(fn=f_download_code, inputs=input_elems, outputs=download_code)
demo.queue(default_concurrency_limit=5)
demo.launch(share=False, show_error=True, server_name="0.0.0.0", server_port=18067)
if __name__ == "__main__":
pass