app.py 4.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. # -*- coding: utf-8 -*-
  2. """
  3. @author: yq
  4. @time: 2024/12/4
  5. @desc:
  6. """
  7. import matplotlib
  8. matplotlib.use('Agg')
  9. import gradio as gr
  10. from webui import f_project_is_exist, f_data_upload, engine, f_download_code, f_code_generate, f_get_sheet_data, \
  11. f_project_load
  12. input_elems = set()
  13. elem_dict = {}
  14. with gr.Blocks() as demo:
  15. gr.HTML('<h1 ><center><font size="5">Strategy-Flow-Simulation</font></center></h1>')
  16. gr.HTML('<h2 ><center><font size="2">决策流快速仿真工具</font></center></h2>')
  17. with gr.Tabs():
  18. with gr.TabItem("策略仿真"):
  19. with gr.Row():
  20. with gr.Column():
  21. with gr.Row():
  22. project_name = gr.Textbox(label="项目名称", placeholder="请输入不重复的项目名称",
  23. info="项目名称将会被作为缓存目录名称,如果重复会导致结果被覆盖", scale=5)
  24. project_load = gr.Button("加载历史项目", variant="primary", scale=1)
  25. with gr.Row():
  26. with gr.Column(scale=3):
  27. file_data = gr.File(label="策略文档", file_types=[".xlsx"])
  28. with gr.Column(scale=1):
  29. with gr.Row():
  30. sheet_name = gr.Dropdown(label="策略查看", interactive=True,
  31. info="流程、节点及代码信息查看")
  32. with gr.Row():
  33. download_demo = gr.DownloadButton(value="./template/demo.xlsx", label="策略文档demo下载",
  34. variant="primary", visible=True)
  35. with gr.Row():
  36. data_upload = gr.Dataframe(visible=False, label="当前上传数据", max_height=300, interactive=False)
  37. code_generate = gr.Button("生成模拟代码", variant="primary")
  38. input_elems.update(
  39. {project_name, sheet_name, file_data, data_upload, code_generate, download_demo, project_load})
  40. elem_dict.update(dict(
  41. project_name=project_name,
  42. sheet_name=sheet_name,
  43. file_data=file_data,
  44. data_upload=data_upload,
  45. code_generate=code_generate,
  46. download_demo=download_demo,
  47. project_load=project_load
  48. ))
  49. with gr.Column():
  50. with gr.Row():
  51. generate_progress = gr.Textbox(label="生成进度", scale=4)
  52. download_code = gr.DownloadButton(label="代码下载", variant="primary",
  53. visible=False, scale=1)
  54. with gr.Row():
  55. code_view = gr.Code(visible=False, language="python", wrap_lines=True, interactive=False)
  56. input_elems.update(
  57. {generate_progress, download_code, code_view})
  58. elem_dict.update(dict(
  59. generate_progress=generate_progress,
  60. download_code=download_code,
  61. code_view=code_view
  62. ))
  63. engine.add_elems(elem_dict)
  64. project_name.change(fn=f_project_is_exist, inputs=input_elems)
  65. sheet_name.change(fn=f_get_sheet_data, inputs=input_elems, outputs=[data_upload, code_view])
  66. file_data.upload(fn=f_data_upload, inputs=input_elems,
  67. outputs=[data_upload, sheet_name, download_demo, code_view, download_code])
  68. code_generate.click(fn=f_code_generate, inputs=input_elems,
  69. outputs=[generate_progress, code_view, download_code])
  70. project_load.click(fn=f_project_load, inputs=input_elems,
  71. outputs=[download_demo, file_data, data_upload, sheet_name, code_view,
  72. download_code])
  73. download_code.click(fn=f_download_code, inputs=input_elems, outputs=download_code)
  74. demo.queue(default_concurrency_limit=5)
  75. demo.launch(share=False, show_error=True, server_name="0.0.0.0", server_port=18075)
  76. if __name__ == "__main__":
  77. pass