예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
 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)
예제 #4
0
 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)
예제 #5
0
    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
예제 #6
0
 def test_get_dir_name(self):
     System()
     System.get_dir_name(self.create_diagram())
예제 #7
0
    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