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)
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'