def run(self, codes=None): """ This method runs the code. """ diagram = self.get_current_diagram() generator, message = CodeGenerator.get_code_generator(diagram) if generator is None: return False self.save_source(codes=codes, generator=generator) command = diagram.code_template.command command = command.replace("$dir_name$", System.get_dir_name(diagram)) def __run(self): process = subprocess.Popen(command, cwd=System.get_dir_name(diagram), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, preexec_fn=os.setsid) self.threads[thread] = diagram, process self.main_window.toolbar.update_threads(self.threads) (stdout_data, stderr_data) = process.communicate() System.log(stdout_data + "\n") System.log(stderr_data + "\n") del self.threads[thread] self.main_window.toolbar.update_threads(self.threads) System.log("Executing Code:\n" + command) thread = Thread(target=__run, args=(self, )) thread.start() return True
def save_source(self, codes=None, generator=None): """ This method saves the source codes. """ diagram = self.main_window.work_area.get_current_diagram() if diagram is None: return False # If it is not called from the run method if generator is None: generator = self.__get_code_generator(diagram) if generator is None: return False if codes is None: files = generator.generate_code() else: files = codes for key in files: file_name = System.get_dir_name(diagram) + key System.log("Saving Code to " + file_name) try: codeFile = open(file_name, 'w') codeFile.write(files[key]) codeFile.close() except Exception as error: System.log("File or directory not found!") System.log(error) return True
def __run(self): process = subprocess.Popen(command, cwd=System.get_dir_name(diagram), shell=True, preexec_fn=os.setsid) self.threads[thread] = diagram, process self.main_window.toolbar.update_threads(self.threads) System.log(process.communicate()) del self.threads[thread] self.main_window.toolbar.update_threads(self.threads)
def __run(self): process = subprocess.Popen(command, cwd=System.get_dir_name(diagram), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, preexec_fn=os.setsid) self.threads[thread] = diagram, process self.main_window.toolbar.update_threads(self.threads) (stdout_data, stderr_data) = process.communicate() System.log(stdout_data + "\n") System.log(stderr_data + "\n") del self.threads[thread] self.main_window.toolbar.update_threads(self.threads)
def save_source(cls, diagram=None, codes=None, generator=None): if diagram is None: return False, "Diagram is None" if generator is None: generator, message = CodeGenerator.get_code_generator(diagram) if generator is None: return False, message if codes is None: files = generator.generate_code() else: files = codes for key in files: file_name = System.get_dir_name(diagram) + key try: codeFile = open(file_name, 'w') codeFile.write(files[key]) codeFile.close() except Exception as error: return False, "Could not save file" return True, "Saving code to " + file_name
def test_get_dir_name(self): System() System.get_dir_name(self.create_diagram())
def __generate_file_code(self, code): """ This method generate the block code. """ # We first substitute data from the code template itself code = code.replace("$author$", System.get_preferences().author) code = code.replace("$license$", System.get_preferences().license) code = code.replace("$dir_name$", System.get_dir_name(self.diagram)) code = code.replace("$command$", self.diagram.code_template.command) code = code.replace("$name$", self.diagram.code_template.name) code = code.replace("$description$", self.diagram.code_template.description) for prop in self.diagram.code_template.properties: my_key = "$prop[" + prop.get("name") + "]$" value = str(prop.get("value")) code = code.replace(my_key, value) # Then we substitute the code parts with blocks for key in self.codes: # Check for single_code generation code_name = "$single_code["+ key + "]$" if code_name in code: temp_header = [] temp_code = "" for header_code in self.codes[key]: if header_code not in temp_header: temp_header.append(header_code) for header_code in temp_header: temp_code += header_code code = code.replace(code_name, temp_code) # Check for code generation code_name = "$code["+ key + "]$" if code_name in code: temp_code = "" for x in self.codes[key]: temp_code += x code = code.replace(code_name, temp_code) # Check for code + connections generation code_name = "$code["+ key + ", connection]$" if code_name in code: temp_code = "" for x,y in zip(self.codes[key], self.connections): temp_code += x temp_code += y code = code.replace(code_name, temp_code) # Check for connections + code generation code_name = "$code[connection, "+ key + "]$" if code_name in code: temp_code = "" for x,y in zip(self.connections, self.codes[key]): temp_code += x temp_code += y code = code.replace(code_name, temp_code) # Replace only connection connection_block = "" for conn in self.connections: connection_block += conn + "\n" code = code.replace("$connections$", connection_block) return code