From 816049fc761974c45ebd455f60541d52170fd830 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B0=D0=BC=D0=BE=D1=83=D0=BA=D0=B8=D0=BD=20=D0=90?= =?UTF-8?q?=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= Date: Fri, 13 Aug 2010 16:15:06 +0000 Subject: [PATCH] Modified method printVars(), added XML output --- pym/cl_datavars.py | 124 +++++++++++++++++++++++++++++++++++---------- pym/cl_opt.py | 9 +++- 2 files changed, 105 insertions(+), 28 deletions(-) diff --git a/pym/cl_datavars.py b/pym/cl_datavars.py index 29b42d0..11a13b5 100644 --- a/pym/cl_datavars.py +++ b/pym/cl_datavars.py @@ -620,35 +620,51 @@ storage of variables templates")%location) ret[nameVar] = getattr(self, nameVar) return ret - def printVars(self, varsFilter=None, varsNames=[]): + def printVars(self, varsFilter=None, varsNames=[], outFormat="default"): """распечатать список переменных с значениями""" var=None var=self.getVars(varsFilter, varsNames) - mlen_name=0; - mlen_type=0; - mlen_mode=0; - for i,j in var.items(): - if len(i)>mlen_name: - mlen_name=len(i) - if not '[' in var[i].mode: - mode="[%s]"%(var[i].mode.lower()) - var[i].mode=mode - if len(mode)>mlen_mode: - mlen_mode=len(mode) - plist=var.keys() - plist.sort() - br = fillstr("-",mlen_name) + " " +\ - fillstr("-",mlen_mode) + " " + fillstr("-",10) - cl_overriding.printSUCCESS(_("The list of variables:")) - cl_overriding.printSUCCESS(_("Variable name").center(mlen_name)+ " " +\ - _("Mode") + " " +_("Value")) - cl_overriding.printSUCCESS(br) - for i in plist: - p_val=var[i].value - if var[i].official: - continue - columnWrite( i, mlen_name, var[i].mode.lower(), mlen_mode, p_val) - cl_overriding.printSUCCESS(br) + if outFormat == "default": + mlen_name=0; + mlen_type=0; + mlen_mode=0; + for i,j in var.items(): + if len(i)>mlen_name: + mlen_name=len(i) + if not '[' in var[i].mode: + mode="[%s]"%(var[i].mode.lower()) + var[i].mode=mode + if len(mode)>mlen_mode: + mlen_mode=len(mode) + plist=var.keys() + plist.sort() + br = fillstr("-",mlen_name) + " " +\ + fillstr("-",mlen_mode) + " " + fillstr("-",10) + cl_overriding.printSUCCESS(_("The list of variables:")) + cl_overriding.printSUCCESS(_("Variable name").center(mlen_name) +\ + " " + _("Mode") + " " +_("Value")) + cl_overriding.printSUCCESS(br) + for i in plist: + p_val=var[i].value + if var[i].official: + continue + columnWrite( i, mlen_name, var[i].mode.lower(), mlen_mode, p_val) + cl_overriding.printSUCCESS(br) + elif outFormat == "xml": + xmlObj = _varsXML() + varNames = sorted(var.keys()) + for name in varNames: + value = var[name].value + typeVar = type(value) + if typeVar in (str, int, float): + xmlObj.addVar(name, value) + elif typeVar == list: + valueList = value + xmlObj.addList(name, valueList) + elif typeVar == dict: + valueDict = value + xmlObj.addDict(name, valueDict) + cl_overriding.printSUCCESS(xmlObj.toXML(),printBR=False) def GetList(self, nameVar, spl=","): """Получить значение переменной в виде списка @@ -816,3 +832,59 @@ class glob_attr: pass return False +class _varsXML: + declaration = '\n' + rootElementStart = '\n' + rootElementEnd = '\n' + indent = " " + templateVar = """%(indent)s\n\ +%(indent)s%(indent)s%(value)s\n\ +%(indent)s\n""" + templateListStart = """%(indent)s\n""" + templateListValue = """%(indent)s%(indent)s%(value)s\n""" + templateListEnd = """%(indent)s\n""" + templateDictStart = """%(indent)s\n""" + templateDictValue = """%(indent)s%(indent)s%(value)s\ +\n""" + templateDictEnd = """%(indent)s\n""" + templateDoc = "%(declaration)s%(rootStart)s%(vars)s%(rootEnd)s" + varsXML = "" + + def addVar(self, name, value): + """Add var to XML""" + dictVar = {"indent":self.indent, + "name":name, + "value":str(value)} + self.varsXML += self.templateVar %dictVar + + def addList(self, name, valueList): + """Add var (valie - list) to XML""" + dictVar = {"indent":self.indent, + "name":name} + varXml = self.templateListStart %dictVar + for value in valueList: + dictValue = {"indent":self.indent, + "value":str(value)} + varXml += self.templateListValue %dictValue + varXml += self.templateListEnd %dictVar + self.varsXML += varXml + + def addDict(self, name, valueDict): + """Add var (valie - list) to XML""" + dictVar = {"indent":self.indent, + "name":name} + varXml = self.templateDictStart %dictVar + for nameDict, valueDict in valueDict.items(): + dictValue = {"indent":self.indent, + "name":nameDict, + "value":str(valueDict)} + varXml += self.templateDictValue %dictValue + varXml += self.templateDictEnd %dictVar + self.varsXML += varXml + + def toXML(self): + dictXML = {"declaration":self.declaration, + "rootStart":self.rootElementStart, + "vars":self.varsXML, + "rootEnd":self.rootElementEnd} + return self.templateDoc %dictXML \ No newline at end of file diff --git a/pym/cl_opt.py b/pym/cl_opt.py index db1e1c8..1db62a6 100644 --- a/pym/cl_opt.py +++ b/pym/cl_opt.py @@ -221,9 +221,14 @@ class opt(optparse.OptionParser): 'longOption':"vars", 'help':_("print variables") }, - {'longOption':"varsfilter", + {'longOption':"filter", 'optVal':"FILTER", - 'help':_("print filtered variables") + 'help':_("filtered variables, \ +is used in conjunction with the options '-v - vars'") + }, + {'longOption':"xml", + 'help':_("output variables in the form of XML, \ +is used in conjunction with the option '-v - vars'") }] color_control = \