def analyse(self): # verify input arguments if self.script_path.get() == '': print( 'Parameter error, please select the folder of source script to be converted.' ) return # generate command support_list = "tf1.15_api_support_list.xlsx" if self.main_file.get() == '': if self.output_path.get() == '' and self.report_path.get() == '': call_main_py = 'python main.py -i {} -l {}'.format( '\"' + self.script_path.get() + '\"', support_list) elif self.output_path.get() == '': call_main_py = 'python main.py -i {} -l {} -r {}'.format( '\"' + self.script_path.get() + '\"', support_list, '\"' + self.report_path.get() + '\"') elif self.report_path.get() == '': call_main_py = 'python main.py -i {} -l {} -o {}'.format( '\"' + self.script_path.get() + '\"', support_list, '\"' + self.output_path.get() + '\"') else: call_main_py = 'python main.py -i {} -l {} -o {} -r {}'.format( '\"' + self.script_path.get() + '\"', support_list, '\"' + self.output_path.get() + '\"', '\"' + self.report_path.get() + '\"') else: if self.output_path.get() == '' and self.report_path.get() == '': call_main_py = 'python main.py -i {} -l {} -m {}'.format( '\"' + self.script_path.get() + '\"', support_list, '\"' + self.main_file.get() + '\"') elif self.output_path.get() == '': call_main_py = 'python main.py -i {} -l {} -r {} -m {}'.format( '\"' + self.script_path.get() + '\"', support_list, '\"' + self.report_path.get() + '\"', '\"' + self.main_file.get() + '\"') elif self.report_path.get() == '': call_main_py = 'python main.py -i {} -l {} -o {} -m {}'.format( '\"' + self.script_path.get() + '\"', support_list, '\"' + self.output_path.get() + '\"', '\"' + self.main_file.get() + '\"') else: call_main_py = 'python main.py -i {} -l {} ' \ '-o {} -r {} -m {}'.format('\"' + self.script_path.get() + '\"', support_list, '\"' + self.output_path.get() + '\"', '\"' + self.report_path.get() + '\"', '\"' + self.main_file.get() + '\"') os.system(call_main_py) self.hide() new_frame = tk.Toplevel() new_frame.title("Report") handler = lambda: self.back_to_main(new_frame) tk.Button(new_frame, text='重新开始分析', command=handler).grid(row=5, column=2, padx=10, pady=10, stick=tk.W) tk.Button(new_frame, text='退出', command=exit).grid(row=5, column=1, padx=10, pady=10, stick=tk.E) # load analysis report if self.report_path.get() == '': self.report_path.set(os.getcwd()) report_dir = self.report_path.get() lateset = [] for item in os.listdir(report_dir): if 'report_npu' in item: lateset.append(item) lateset.sort() report_path = os.path.join(report_dir, lateset[-1], 'api_analysis_report.xlsx') if not os.path.exists(report_path): print("No api analysis report generated.") return report = pd.read_excel(report_path) file_index = report['序号'].values.tolist() file_name = report['脚本文件名'].values.tolist() code_line = report['代码行'].values.tolist() code_module = report['模块名'].values.tolist() code_api = report['API名'].values.tolist() support_type = report['工具迁移API支持度'].values.tolist() migrate_advice = report['说明'].values.tolist() table = TableCanvas(new_frame) table.show() table.addColumn('6') table.addColumn('7') for i in range(len(file_name) - 10): table.addRow() for i in range(len(file_name)): table.model.setValueAt(file_index[i], i, 0) table.model.setValueAt(file_name[i], i, 1) table.model.setValueAt(code_line[i], i, 2) table.model.setValueAt(code_module[i], i, 3) table.model.setValueAt(code_api[i], i, 4) table.model.setValueAt(support_type[i], i, 5) table.model.setValueAt(migrate_advice[i], i, 6) table.model.columnlabels['1'] = '序号' table.model.columnlabels['2'] = '脚本文件名' table.model.columnlabels['3'] = '代码行' table.model.columnlabels['4'] = '模块名' table.model.columnlabels['5'] = 'API名' table.model.columnlabels['6'] = '工具迁移API支持度' table.model.columnlabels['7'] = '说明' table.show()
class EventMaker(tk.Frame): def __init__(self, section_name, master=None, model_name=None, **options): """ Frames parameter section inquiries as listed in cEvents.ModelEvents :param section_name: STR of section name - must be one of: "bce", "..." :param master: tk.Frame-master :param options: relief, ... """ Frame.__init__(self, master, **options) if not model_name: self.mbce = cTFmodel.Hy2OptModel("default") else: self.mbce = cTFmodel.Hy2OptModel(model_name) self.mbce.overwrite_defaults(section_name) self.sn = section_name self.number_of_events = 1 self.del_event_var = tk.StringVar() self.bg_color = self.mbce.bce_bg_colors[self.sn] self.config(width=ww, height=int(20 * self.mbce.default_dicts[self.sn].keys().__len__()), bg=self.bg_color) tk.Label(self, text=self.mbce.bce_name_dict[self.sn].upper()).grid(sticky=tk.W, row=0, column=0, columnspan=3, padx=xd, pady=yd) usr_msg, fg_col = self.chk_model() self.l_model_check = tk.Label(self, fg=fg_col, width=85, text=usr_msg) self.l_model_check.grid(sticky=tk.W, row=1, column=0, columnspan=3, padx=xd, pady=yd) self.par_objects = {"Events": self.mbce.event_file} if os.path.isfile(dir2tf + "models/" + self.mbce.event_file[0]): self.mbce.events = fGl.dict_nested_read_from_file(dir2tf + "models/" + self.mbce.event_file[0]) self.table_frame = Frame(self, width=700) self.table_frame.grid(sticky=tk.EW, row=2, rowspan=2, column=0, columnspan=3, padx=xd, pady=yd) self.table = TableCanvas(self.table_frame, data=self.mbce.events) if model_name and self.mbce.events: self.table.show() tk.Button(self, text="Add event", command=lambda: self.add_row()).grid(sticky=tk.EW, row=2, column=3, padx=xd, pady=yd) tk.Button(self, text="Delete event\n(row) No:", command=lambda: self.del_row()).grid(sticky=tk.EW, row=3, column=3, padx=xd, pady=yd) tk.Entry(self, width=3, textvariable=self.del_event_var).grid(sticky=tk.EW, row=3, column=4, padx=xd, pady=yd) self.make_up() def add_row(self): self.number_of_events += 1 self.table.addRow(self.number_of_events) def del_row(self): self.number_of_events -= 1 try: del_row = int(self.del_event_var.get()) - 1 self.table.setSelectedRow(del_row) self.table.deleteRow() except: showinfo("INFO", "The event number must be a positive integer of a present row number.", parent=self) return -1 if self.number_of_events < 1: showinfo("WARNING", "Define at least one event!", parent=self) def chk_model(self): if not (self.mbce.name == "default"): msg0 = "Define inlet flows (for Name-fields of 2d_sa_MODEL_QT_R.shp)\nand outlet WSEs (for Name-fields of 2d_bc_MODEL_HT.shp).\n" self.mbce.get_boundary_sa_names() self.mbce.get_boundary_bc_names() msg1 = str("Identified inlet names: " + ", ".join(self.mbce.bc_dict['sa'])) msg2 = str("\nIdentified outlet names: " + ", ".join(self.mbce.bc_dict['bc'])) return msg0 + msg1 + msg2, "forest green" else: msg0 = "NOT AVAILABLE\n\nDefine and select a model.\n" msg1 = "Event definitions require the prior definition of a mode with a 2d_sa_MODEL_QT_R.shp file (Geometry Tab)." return msg0 + msg1, "red3" def make_up(self): for wid in self.winfo_children(): try: wid.configure(bg=self.bg_color) except: pass def save_event_file(self): self.mbce.events = {} # reset events dictionary for row in range(1, self.table.rows+1): self.mbce.events.update({row: {}}) for col in self.table.model.columnNames: try: self.mbce.events[row].update({col: self.table.model.data[row][col]}) except: print("Setting %s to 0.0 (no value defined)" % str(col)) self.mbce.events[row].update({col: 0.0}) fGl.dict_nested_write2file(self.mbce.events, dir2tf + "models/" + self.mbce.event_file[0])
def analyse(self): """Initiate API analysis""" util_global._init() # verify input arguments if not self.script_path.get(): raise ValueError( "Parameter error, please select the folder of source script to be converted." ) input_dir = self.script_path.get() if str(input_dir).endswith('/'): input_dir = input_dir[:-1] input_dir = input_dir.replace('\\', '/') support_list = os.path.join(os.path.dirname(os.path.abspath(__file__)), "tf1.15_api_support_list.xlsx") output = self.get_output_dir() report = self.get_report_dir() main_file = self.get_main_file() distributed_mode = self.get_distributed_mode() if input_dir + '/' in output + '/' or input_dir + '/' in report + '/': print( "<output> or <report> could not be the subdirectory of <input>, please try another option." ) sys.exit(2) util_global.set_value('input', input_dir) util_global.set_value('list', support_list) util_global.set_value('output', output) util_global.set_value('report', report) util_global.set_value('main', main_file) util_global.set_value('distributed_mode', distributed_mode) check_input_and_output_dir(input_dir, output) init_loggers(report) conver() self.hide() new_frame = tk.Toplevel() new_frame.title("Report") handler = lambda: self.back_to_main(new_frame) tk.Button(new_frame, text='重新开始分析', command=handler).grid(row=5, column=2, padx=10, pady=10, stick=tk.W) tk.Button(new_frame, text='退出', command=exit).grid(row=5, column=1, padx=10, pady=10, stick=tk.E) # load analysis report if self.report_path.get() == '': self.report_path.set(os.getcwd()) report_dir = self.report_path.get() lateset = [] for item in os.listdir(report_dir): if 'report_npu' in item: lateset.append(item) lateset.sort() report_path = os.path.join(report_dir, lateset[-1], 'api_analysis_report.xlsx') if not os.path.exists(report_path): print("No api analysis report generated.") return report = pd.read_excel(report_path) file_index = report['序号'].values.tolist() file_name = report['脚本文件名'].values.tolist() code_line = report['代码行'].values.tolist() code_module = report['模块名'].values.tolist() code_api = report['API名'].values.tolist() support_type = report['工具迁移API支持度'].values.tolist() migrate_advice = report['说明'].values.tolist() table = TableCanvas(new_frame) table.show() table.addColumn('6') table.addColumn('7') for i in range(len(file_name) - 10): table.addRow() for i in range(len(file_name)): table.model.setValueAt(file_index[i], i, 0) table.model.setValueAt(file_name[i], i, 1) table.model.setValueAt(code_line[i], i, 2) table.model.setValueAt(code_module[i], i, 3) table.model.setValueAt(code_api[i], i, 4) table.model.setValueAt(support_type[i], i, 5) table.model.setValueAt(migrate_advice[i], i, 6) table.model.columnlabels['1'] = '序号' table.model.columnlabels['2'] = '脚本文件名' table.model.columnlabels['3'] = '代码行' table.model.columnlabels['4'] = '模块名' table.model.columnlabels['5'] = 'API名' table.model.columnlabels['6'] = '工具迁移API支持度' table.model.columnlabels['7'] = '说明' table.show()