示例#1
0
    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()
示例#2
0
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])
示例#3
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()