--- a/CodeFileTreeNode.py Mon Aug 21 20:17:19 2017 +0000
+++ b/CodeFileTreeNode.py Mon Aug 21 23:22:58 2017 +0300
@@ -23,7 +23,9 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-import os, re, traceback
+import os
+import re
+import traceback
from copy import deepcopy
from lxml import etree
@@ -80,11 +82,12 @@
SECTION_TAG_ELEMENT = "<xsd:element name=\"%s\" type=\"CodeText\"/>"
+
class CodeFile:
-
+
CODEFILE_NAME = "CodeFile"
SECTIONS_NAMES = []
-
+
def __init__(self):
sections_str = {"codefile_name": self.CODEFILE_NAME}
if "includes" in self.SECTIONS_NAMES:
@@ -94,34 +97,34 @@
sections_str["sections"] = "\n".join(
[SECTION_TAG_ELEMENT % name
for name in self.SECTIONS_NAMES if name != "includes"])
-
+
self.CodeFileParser = GenerateParserFromXSDstring(
CODEFILE_XSD % sections_str)
self.CodeFileVariables = etree.XPath("variables/variable")
-
+
filepath = self.CodeFileName()
-
+
if os.path.isfile(filepath):
xmlfile = open(filepath, 'r')
codefile_xml = xmlfile.read()
xmlfile.close()
-
+
codefile_xml = codefile_xml.replace(
- '<%s>' % self.CODEFILE_NAME,
+ '<%s>' % self.CODEFILE_NAME,
'<%s xmlns:xhtml="http://www.w3.org/1999/xhtml">' % self.CODEFILE_NAME)
for cre, repl in [
- (re.compile("(?<!<xhtml:p>)(?:<!\[CDATA\[)"), "<xhtml:p><![CDATA["),
- (re.compile("(?:]]>)(?!</xhtml:p>)"), "]]></xhtml:p>")]:
+ (re.compile("(?<!<xhtml:p>)(?:<!\[CDATA\[)"), "<xhtml:p><![CDATA["),
+ (re.compile("(?:]]>)(?!</xhtml:p>)"), "]]></xhtml:p>")]:
codefile_xml = cre.sub(repl, codefile_xml)
-
+
try:
self.CodeFile, error = self.CodeFileParser.LoadXMLString(codefile_xml)
if error is not None:
(fname, lnum, src) = ((self.CODEFILE_NAME,) + error)
- self.GetCTRoot().logger.write_warning(XSDSchemaErrorMessage.format(a1 = fname, a2 = lnum, a3 = src))
+ self.GetCTRoot().logger.write_warning(XSDSchemaErrorMessage.format(a1=fname, a2=lnum, a3=src))
self.CreateCodeFileBuffer(True)
except Exception, exc:
- msg = _("Couldn't load confnode parameters {a1} :\n {a2}").format(a1 = CTNName, a2 = unicode(exc))
+ msg = _("Couldn't load confnode parameters {a1} :\n {a2}").format(a1=CTNName, a2=unicode(exc))
self.GetCTRoot().logger.write_error(msg)
self.GetCTRoot().logger.write_error(traceback.format_exc())
else:
@@ -132,13 +135,13 @@
def GetBaseTypes(self):
return self.GetCTRoot().GetBaseTypes()
- def GetDataTypes(self, basetypes = False):
+ def GetDataTypes(self, basetypes=False):
return self.GetCTRoot().GetDataTypes(basetypes=basetypes)
def GenerateNewName(self, format, start_idx):
return self.GetCTRoot().GenerateNewName(
None, None, format, start_idx,
- dict([(var.getname().upper(), True)
+ dict([(var.getname().upper(), True)
for var in self.CodeFile.variables.getvariable()]))
def SetVariables(self, variables):
@@ -152,17 +155,18 @@
variable.setonchange(var["OnChange"])
variable.setopts(var["Options"])
self.CodeFile.variables.appendvariable(variable)
-
+
def GetVariables(self):
datas = []
for var in self.CodeFileVariables(self.CodeFile):
- datas.append({"Name" : var.getname(),
- "Type" : var.gettype(),
- "Initial" : var.getinitial(),
- "Description" : var.getdesc(),
- "OnChange" : var.getonchange(),
- "Options" : var.getopts(),
- })
+ datas.append({
+ "Name": var.getname(),
+ "Type": var.gettype(),
+ "Initial": var.getinitial(),
+ "Description": var.getdesc(),
+ "OnChange": var.getonchange(),
+ "Options": var.getopts(),
+ })
return datas
def SetTextParts(self, parts):
@@ -170,42 +174,42 @@
section_code = parts.get(section)
if section_code is not None:
getattr(self.CodeFile, section).setanyText(section_code)
-
+
def GetTextParts(self):
return dict([(section, getattr(self.CodeFile, section).getanyText())
for section in self.SECTIONS_NAMES])
-
+
def CTNTestModified(self):
- return self.ChangesToSave or not self.CodeFileIsSaved()
+ return self.ChangesToSave or not self.CodeFileIsSaved()
def OnCTNSave(self, from_project_path=None):
filepath = self.CodeFileName()
-
- xmlfile = open(filepath,"w")
+
+ xmlfile = open(filepath, "w")
xmlfile.write(etree.tostring(
- self.CodeFile,
- pretty_print=True,
- xml_declaration=True,
+ self.CodeFile,
+ pretty_print=True,
+ xml_declaration=True,
encoding='utf-8'))
xmlfile.close()
-
+
self.MarkCodeFileAsSaved()
return True
def CTNGlobalInstances(self):
variables = self.CodeFileVariables(self.CodeFile)
- ret = [(variable.getname(),
- variable.gettype(),
- variable.getinitial())
- for variable in variables]
+ ret = [(variable.getname(),
+ variable.gettype(),
+ variable.getinitial())
+ for variable in variables]
ret.extend([("On"+variable.getname()+"Change", "python_poll", "")
- for variable in variables
- if variable.getonchange()])
+ for variable in variables
+ if variable.getonchange()])
return ret
-#-------------------------------------------------------------------------------
+# -------------------------------------------------------------------------------
# Current Buffering Management Functions
-#-------------------------------------------------------------------------------
+# -------------------------------------------------------------------------------
"""
Return a copy of the codefile model
@@ -219,31 +223,30 @@
def BufferCodeFile(self):
self.CodeFileBuffer.Buffering(self.CodeFileParser.Dumps(self.CodeFile))
-
+
def StartBuffering(self):
self.Buffering = True
-
+
def EndBuffering(self):
if self.Buffering:
self.CodeFileBuffer.Buffering(self.CodeFileParser.Dumps(self.CodeFile))
self.Buffering = False
-
+
def MarkCodeFileAsSaved(self):
self.EndBuffering()
self.CodeFileBuffer.CurrentSaved()
-
+
def CodeFileIsSaved(self):
return self.CodeFileBuffer.IsCurrentSaved() and not self.Buffering
-
+
def LoadPrevious(self):
self.EndBuffering()
self.CodeFile = self.CodeFileParser.Loads(self.CodeFileBuffer.Previous())
-
+
def LoadNext(self):
self.CodeFile = self.CodeFileParser.Loads(self.CodeFileBuffer.Next())
-
+
def GetBufferState(self):
first = self.CodeFileBuffer.IsFirst() and not self.Buffering
last = self.CodeFileBuffer.IsLast()
return not first, not last
-