laurent@366: import os laurent@654: from PLCControler import UndoBuffer laurent@657: from PythonEditor import PythonEditor laurent@366: laurent@366: from xml.dom import minidom Laurent@1124: from xmlclass import GenerateClassesFromXSD laurent@366: import cPickle laurent@366: Laurent@1097: from CodeFileTreeNode import CodeFile Laurent@1097: Edouard@721: PythonClasses = GenerateClassesFromXSD(os.path.join(os.path.dirname(__file__), "py_ext_xsd.xsd")) laurent@366: Laurent@1097: class PythonFileCTNMixin(CodeFile): laurent@366: Laurent@1124: CODEFILE_NAME = "PyFile" Laurent@1124: SECTIONS_NAMES = [ Laurent@1124: "globals", Laurent@1124: "init", Laurent@1124: "cleanup", Laurent@1124: "start", Laurent@1124: "stop"] laurent@657: EditorType = PythonEditor laurent@657: laurent@366: def __init__(self): Laurent@1097: CodeFile.__init__(self) laurent@366: laurent@366: filepath = self.PythonFileName() laurent@366: Laurent@1097: python_code = PythonClasses["Python"]() laurent@366: if os.path.isfile(filepath): laurent@366: xmlfile = open(filepath, 'r') laurent@366: tree = minidom.parse(xmlfile) laurent@366: xmlfile.close() laurent@366: laurent@366: for child in tree.childNodes: laurent@366: if child.nodeType == tree.ELEMENT_NODE and child.nodeName == "Python": Laurent@1097: python_code.loadXMLTree(child, ["xmlns", "xmlns:xsi", "xsi:schemaLocation"]) Laurent@1097: self.CodeFile.globals.settext(python_code.gettext()) Laurent@1097: os.remove(filepath) Laurent@1097: self.CreateCodeFileBuffer(False) Laurent@1097: self.OnCTNSave() Laurent@1097: Laurent@1097: def CodeFileName(self): Laurent@1097: return os.path.join(self.CTNPath(), "pyfile.xml") Laurent@1097: laurent@366: def PythonFileName(self): Edouard@721: return os.path.join(self.CTNPath(), "py_ext.xml") laurent@366: Laurent@1124: def GetSectionsCode(self): Laurent@1097: Laurent@1124: # Generate Beremiz python runtime variables code Laurent@1103: config = self.GetCTRoot().GetProjectConfigNames()[0] Laurent@1124: variables_str = "" Laurent@1097: for variable in self.CodeFile.variables.variable: Laurent@1103: global_name = "%s_%s" % (config.upper(), variable.getname().upper()) Laurent@1124: variables_str += "# global_var:%s python_var:%s type:%s initial:%s\n" % ( Laurent@1103: global_name, Laurent@1103: variable.getname(), Laurent@1103: variable.gettype(), Laurent@1103: str(variable.getinitial())) Laurent@1097: Laurent@1124: sections_code = { Laurent@1124: "variables": variables_str, Laurent@1124: "globals": self.CodeFile.globals.gettext().strip() Laurent@1124: } Laurent@1097: Laurent@1124: # Generate Beremiz python runtime functions code Laurent@1124: for section in self.SECTIONS_NAMES: Laurent@1124: if section != "globals": Laurent@1124: code_object = getattr(self.CodeFile, section) Laurent@1124: section_str = "" Laurent@1124: lines = code_object.gettext().strip().splitlines() Laurent@1124: if len(lines) > 0: Laurent@1124: for line in lines: Laurent@1124: section_str += " " + line + "\n" Laurent@1124: section_str += "\n" Laurent@1124: sections_code[section] = section_str Laurent@1124: Laurent@1124: return sections_code laurent@366: