yq 3 kuukautta sitten
vanhempi
sitoutus
61065ec6ff
5 muutettua tiedostoa jossa 78 lisäystä ja 23 poistoa
  1. 25 14
      app.py
  2. 2 1
      commom/utils.py
  3. BIN
      template/demo.xlsx
  4. 3 2
      webui/__init__.py
  5. 48 6
      webui/utils.py

+ 25 - 14
app.py

@@ -6,13 +6,12 @@
 """
 import matplotlib
 
-from config import BaseConfig
-
 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
+from webui import f_project_is_exist, f_data_upload, engine, f_download_code, f_code_generate, f_get_sheet_data, \
+    f_project_load
 
 input_elems = set()
 elem_dict = {}
@@ -26,26 +25,34 @@ with gr.Blocks() as demo:
                 with gr.Column():
                     with gr.Row():
                         project_name = gr.Textbox(label="项目名称", placeholder="请输入不重复的项目名称",
-                                                  info="项目名称将会被作为缓存目录名称,如果重复会导致结果被覆盖")
+                                                  info="项目名称将会被作为缓存目录名称,如果重复会导致结果被覆盖", scale=5)
+                        project_load = gr.Button("加载历史项目", variant="primary", scale=1)
 
                     with gr.Row():
-                        file_data = gr.File(label="策略文档", file_types=[".xlsx"], scale=3)
-                        sheet_name = gr.Dropdown(choices=[BaseConfig.flow_sheet_name], value=BaseConfig.flow_sheet_name,
-                                                 label="策略查看", interactive=True,
-                                                 info="流程及节点信息查看", scale=1)
+                        with gr.Column(scale=3):
+                            file_data = gr.File(label="策略文档", file_types=[".xlsx"])
+                        with gr.Column(scale=1):
+                            with gr.Row():
+                                sheet_name = gr.Dropdown(label="策略查看", interactive=True,
+                                                         info="流程、节点及代码信息查看")
+                            with gr.Row():
+                                download_demo = gr.DownloadButton(value="./template/demo.xlsx", label="策略文档demo下载",
+                                                                  variant="primary", visible=True)
 
                     with gr.Row():
-                        data_upload = gr.Dataframe(visible=False, label="当前上传数据", max_height=300)
-                    code_generate = gr.Button("生成代码", variant="primary")
+                        data_upload = gr.Dataframe(visible=False, label="当前上传数据", max_height=300, interactive=False)
+                    code_generate = gr.Button("生成模拟代码", variant="primary")
 
                     input_elems.update(
-                        {project_name, sheet_name, file_data, data_upload, code_generate})
+                        {project_name, sheet_name, file_data, data_upload, code_generate, download_demo, project_load})
                     elem_dict.update(dict(
                         project_name=project_name,
                         sheet_name=sheet_name,
                         file_data=file_data,
                         data_upload=data_upload,
-                        code_generate=code_generate
+                        code_generate=code_generate,
+                        download_demo=download_demo,
+                        project_load=project_load
                     ))
                 with gr.Column():
                     with gr.Row():
@@ -53,7 +60,7 @@ with gr.Blocks() as demo:
                         download_code = gr.DownloadButton(label="代码下载", variant="primary",
                                                           visible=False, scale=1)
                     with gr.Row():
-                        code_view = gr.Code(visible=False)
+                        code_view = gr.Code(visible=False, language="python", wrap_lines=True, interactive=False)
                     input_elems.update(
                         {generate_progress, download_code, code_view})
                     elem_dict.update(dict(
@@ -66,9 +73,13 @@ with gr.Blocks() as demo:
 
                     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, code_view])
-                    file_data.upload(fn=f_data_upload, inputs=input_elems, outputs=[data_upload, sheet_name])
+                    file_data.upload(fn=f_data_upload, inputs=input_elems,
+                                     outputs=[data_upload, sheet_name, download_demo, code_view, download_code])
                     code_generate.click(fn=f_code_generate, inputs=input_elems,
                                         outputs=[generate_progress, code_view, download_code])
+                    project_load.click(fn=f_project_load, inputs=input_elems,
+                                       outputs=[download_demo, file_data, data_upload, sheet_name, code_view,
+                                                download_code])
                     download_code.click(fn=f_download_code, inputs=input_elems, outputs=download_code)
 
             demo.queue(default_concurrency_limit=5)

+ 2 - 1
commom/utils.py

@@ -34,7 +34,8 @@ def f_get_save_path(file_name: str, sub_path=""):
 def f_create_zip(zip_name, files):
     with zipfile.ZipFile(zip_name, 'w') as zipf:
         for file in files:
-            zipf.write(file)
+            file_name = os.path.basename(file)
+            zipf.write(file, file_name)
 
 
 def f_read_file(file_path) -> str:

BIN
template/demo.xlsx


+ 3 - 2
webui/__init__.py

@@ -6,6 +6,7 @@
 
 """
 from .manager import engine
-from .utils import f_project_is_exist, f_data_upload, f_download_code, f_code_generate, f_get_sheet_data
+from .utils import f_project_is_exist, f_data_upload, f_download_code, f_code_generate, f_get_sheet_data, f_project_load
 
-__all__ = ['engine', 'f_project_is_exist', 'f_data_upload', 'f_code_generate', 'f_download_code', 'f_get_sheet_data']
+__all__ = ['engine', 'f_project_is_exist', 'f_data_upload', 'f_code_generate', 'f_download_code', 'f_get_sheet_data',
+           'f_project_load']

+ 48 - 6
webui/utils.py

@@ -61,6 +61,11 @@ def _get_upload_data(data) -> pd.ExcelFile:
     excel = pd.ExcelFile(file_path)
     return excel
 
+def _get_upload_data_path(data) ->str:
+    base_dir = _get_base_dir(data)
+    save_path = os.path.join(base_dir, DATA_SUB_DIR)
+    file_path = _get_prefix_file(save_path, UPLOAD_DATA_PREFIX)
+    return file_path
 
 def _get_node_func_dict(data) -> dict:
     node_func_dict_path = _get_save_path(data, BaseConfig.node_map_name)
@@ -95,7 +100,7 @@ def _get_save_path(data, file_name: str, sub_dir="", name_prefix=""):
 
 def f_data_upload(data):
     if not _check_save_dir(data):
-        return
+        return None
     file_data = engine.get(data, "file_data")
     data_path = _get_save_path(data, file_data.name, DATA_SUB_DIR, UPLOAD_DATA_PREFIX)
     shutil.copy(file_data.name, data_path)
@@ -105,7 +110,10 @@ def f_data_upload(data):
     excel.close()
     return {
         engine.get_elem_by_id("data_upload"): gr.update(value=df, visible=True),
-        engine.get_elem_by_id("sheet_name"): gr.update(choices=columns),
+        engine.get_elem_by_id("sheet_name"): gr.update(choices=columns, value=BaseConfig.flow_sheet_name),
+        engine.get_elem_by_id("download_demo"): gr.update(visible=False),
+        engine.get_elem_by_id("code_view"): gr.update(value=None, visible=False),
+        engine.get_elem_by_id("download_code"): gr.update(value=None, visible=False),
     }
 
 
@@ -120,7 +128,7 @@ def f_get_sheet_data(data):
         code = f_read_file(_get_save_path(data, node_func_dict[sheet_name]))
         return {
             engine.get_elem_by_id("data_upload"): gr.update(value=df),
-            engine.get_elem_by_id("code_view"): gr.update(value=code),
+            engine.get_elem_by_id("code_view"): gr.update(value=code, label=sheet_name),
         }
 
     return {
@@ -145,6 +153,38 @@ def f_verify_param(data):
     return True
 
 
+def f_project_load(data):
+    project_name = engine.get(data, "project_name")
+    if project_name is None or len(project_name) == 0:
+        gr.Warning(message='项目名称不能为空', duration=5)
+    if os.path.exists(_get_base_dir(data)):
+        node_func_dict = _get_node_func_dict(data)
+        if node_func_dict is not None:
+            excel = _get_upload_data(data)
+            df = excel.parse(sheet_name=BaseConfig.flow_sheet_name)
+            columns = excel.sheet_names
+            excel.close()
+            code = f_read_file(_get_save_path(data, node_func_dict[BaseConfig.flow_sheet_name]))
+            code_zip_file_path = _get_save_path(data, BaseConfig.code_zip_name)
+            upload_data_path = _get_upload_data_path(data)
+            return {
+                engine.get_elem_by_id("data_upload"): gr.update(value=df, visible=True),
+                engine.get_elem_by_id("code_view"): gr.update(value=code, visible=True,
+                                                              label=BaseConfig.flow_sheet_name),
+                engine.get_elem_by_id("sheet_name"): gr.update(choices=columns, value=BaseConfig.flow_sheet_name),
+                engine.get_elem_by_id("download_demo"): gr.update(visible=False),
+                engine.get_elem_by_id("download_code"): gr.update(value=code_zip_file_path, visible=True),
+                engine.get_elem_by_id("file_data"): gr.update(value=upload_data_path)
+            }
+
+    return {
+                engine.get_elem_by_id("data_upload"): gr.update(visible=False),
+                engine.get_elem_by_id("code_view"): gr.update(visible=False),
+                engine.get_elem_by_id("download_code"): gr.update(visible=False),
+            }
+
+
+
 def f_code_generate(data, progress=gr.Progress(track_tqdm=True)):
     def _reset_component_state():
         return {engine.get_elem_by_id("download_code"): gr.update(visible=False),
@@ -155,12 +195,13 @@ def f_code_generate(data, progress=gr.Progress(track_tqdm=True)):
 
     all_param = engine.get_all(data)
 
-    # 清空储存目录
-    # _clean_base_dir(data)
     # 校验参数
     if not f_verify_param(data):
         yield _reset_component_state()
 
+    # 清空储存目录
+    # _clean_base_dir(data)
+
     yield _reset_component_state()
 
     progress(0.01)
@@ -190,5 +231,6 @@ def f_code_generate(data, progress=gr.Progress(track_tqdm=True)):
 
     yield {engine.get_elem_by_id("generate_progress"): gr.update(value="生成完成"),
            engine.get_elem_by_id("download_code"): gr.update(value=code_zip_file_path, visible=True),
-           engine.get_elem_by_id("code_view"): gr.update(value=flow_code, visible=True),
+           engine.get_elem_by_id("code_view"): gr.update(value=flow_code, label=BaseConfig.flow_sheet_name,
+                                                         visible=True),
            }