Пример #1
0
    def export(self):
        self.export_nodes = self.get_selected_nodes()

        nodes_dict = {}
        module_name_separator = '___'

        nodes_list = []
        node_titles_count = {}  # title (str) : number (int)
        for i in range(len(self.export_nodes)):
            n: Node = self.export_nodes[i]

            c_w: NodeContentWidget = n.content_widget

            node_number = 0
            title = c_w.get_node_title()
            if title in node_titles_count.values():
                node_number = node_titles_count[title]  # index
                node_titles_count[title] += 1
            else:
                node_titles_count[title] = 1

            node_data = c_w.get_json_data(
                package_name=self.package_name,
                module_name_separator=module_name_separator,
                number=node_number)

            nodes_list.append(node_data)

        nodes_dict['nodes'] = nodes_list

        info_dict = {'type': 'Ryven nodes package'}

        whole_dict = {
            **info_dict,
            **nodes_dict
        }  # merges single two dictionaries to one

        json_data = json.dumps(whole_dict)
        print(json_data)

        # create dirs and save files
        if not os.path.isdir(self.export_dir + '/nodes'):
            os.mkdir(self.export_dir + '/nodes')

        save_file(self.export_dir + '/' + self.package_name + '.rpc',
                  json_data)

        for i in range(len(self.export_nodes)):
            n = self.export_nodes[i]
            module_name = nodes_list[i]['module name']

            # create node folder
            node_dir = self.export_dir + '/nodes/' + module_name
            if not os.path.isdir(node_dir):
                os.mkdir(node_dir)

            # create widgets folder
            widgets_dir = node_dir + '/widgets'
            if not os.path.isdir(widgets_dir):
                os.mkdir(widgets_dir)

            n.content_widget.save_metacode_files(
                node_dir=node_dir,
                widgets_dir=widgets_dir,
                module_name_separator=module_name_separator,
                module_name=module_name)
Пример #2
0
    def save_metacode_files(self, node_dir, widgets_dir, module_name_separator,
                            module_name):

        # check if any code sources have been changed
        any_code_source_changed = self.edit_node_metacode_dialog.code_source_changed() or \
                              self.edit_main_widget_metacode_dialog.code_source_changed() or \
                              any([input_widget.edit_input_widget_metacode_dialog.code_source_changed() for
                                   input_widget in self.input_widgets])

        override_changed_source = True
        if any_code_source_changed:
            ret = QMessageBox.warning(
                self, 'An edited code source has changed',
                'You have edited the metacode of a class which\'s source '
                '(the metacode file) '
                'has changed! Do you want to override these changes from outside with the edited '
                'code from here?', QMessageBox.Yes, QMessageBox.No)
            if ret == QMessageBox.Close:
                return
            override_changed_source = ret == QMessageBox.Yes

        node_meta_code_file_path = node_dir + '/' + module_name + module_name_separator + 'METACODE.py'
        enmd = self.edit_node_metacode_dialog
        if not os.path.isfile(node_meta_code_file_path):
            metacode = enmd.get_code()
            save_file(node_meta_code_file_path,
                      metacode)  # the NI file's name is just the 'module name'
            enmd.set_code(metacode)  # to reset 'initial code'
        else:
            # if enmd.code_edited():
            if not enmd.code_source_changed() or enmd.code_source_changed(
            ) and override_changed_source:
                metacode = enmd.get_code()
                save_file(node_meta_code_file_path, metacode)
                enmd.set_code(metacode)  # to reset 'initial code'

        if self.node_has_main_widget():
            main_widget_src_code_file_path = widgets_dir + '/' + module_name + module_name_separator + 'main_widget' + \
                                             module_name_separator + 'METACODE.py'
            emwmd = self.edit_main_widget_metacode_dialog
            if not os.path.isfile(main_widget_src_code_file_path):
                metacode = emwmd.get_code()
                save_file(main_widget_src_code_file_path, metacode)
                emwmd.set_code(metacode)  # to reset 'initial code'
            else:
                # if emwmd.code_edited():
                if not emwmd.code_source_changed(
                ) or emwmd.code_source_changed() and override_changed_source:
                    metacode = emwmd.get_code()
                    save_file(main_widget_src_code_file_path, metacode)
                    emwmd.set_code(metacode)  # to reset 'initial code'

        for iw in self.input_widgets:
            iw: CustomInputWidget = iw
            iw_file_path = widgets_dir + '/' + module_name + module_name_separator + iw.get_name() + \
                module_name_separator + 'METACODE.py'
            eiwmd = iw.edit_input_widget_metacode_dialog
            if not os.path.isfile(iw_file_path):
                metacode = iw.get_code()
                save_file(iw_file_path, metacode)
                eiwmd.set_code(metacode)  # to reset 'initial code'
            else:
                # if eiwmd.code_edited():
                if not eiwmd.code_source_changed(
                ) or eiwmd.code_source_changed() and override_changed_source:
                    metacode = eiwmd.get_code()
                    save_file(iw_file_path, metacode)
                    eiwmd.set_code(metacode)  # to reset 'initial code'