def printReport(self,printRows=True): """Напечатать данные в табличном виде""" if self.title: cl_overriding.printSUCCESS(self.title) listStrSep = [] for lenCol in self.columnsWidth: listStrSep.append("-"*lenCol) printData = "" printData += columnStr(*self.createFormatStr(listStrSep)) printData += columnStr(*self.createFormatStr(self.headerList)) printData += columnStr(*self.createFormatStr(listStrSep)) for s in self.dataList: printData += columnStr(*self.createFormatStr(s)) printData += columnStr(*self.createFormatStr(listStrSep)) if printData[-1] == "\n": printData = printData[:-1] lines = printData.splitlines() lenCols = map(lambda x: len(x), lines[0].strip().split(" ")) convLines = [] lenLines = len(lines) for i in range(lenLines): char = " | " if i == 0 or i == 2 or i == lenLines-1: char ="-+-" convLines.append(self._insertStrChar(lines[i], lenCols, char)) cl_overriding.printSUCCESS("\n".join(convLines)) if printRows: cl_overriding.printSUCCESS("(%s %s)"% (len(self.dataList), _("rows")))
def printVarsTable(varsDict, title, lenList=()): """print variables table""" if lenList: mlen_name, mlen_type, mlen_mode = lenList else: mlen_name, mlen_type, mlen_mode = getLenElements(varsDict) plist = varsDict.keys() plist.sort() br = "-" * mlen_name + " " + "-" * mlen_mode + " " + "-" * 10 cl_overriding.printSUCCESS(title) cl_overriding.printSUCCESS(br) cl_overriding.printSUCCESS( _toUNICODE(_("Variable name")).center(mlen_name).encode("UTF-8") + " " + _("Mode") + " " + _("Value") ) cl_overriding.printSUCCESS(br) for i in plist: if i.endswith("_pw") and varsDict[i].value: p_val = "***" else: p_val = varsDict[i].value columnWrite(i, mlen_name, varsDict[i].mode.lower(), mlen_mode, p_val)
def columnWrite(*cols): '''Вывод данных по колонкам, причем, если данные не вмещаются в указнаную колонку, то они переносятся на следующую строку в нужную колонку. Параметры: cols множестово пар: текст, ширина колонки, причем, если у последней колонки не указывать ширину, то она будет выведена вся. Пример: columnWrite( "Some text", 10, "Next column", 20 ) ''' # перевести кортеж в список, т.к. изменяется cols = list(cols) # перевести текст в юникод, заодно перевести числа в строку for i in xrange(0,len(cols),2): cols[i] = (str(cols[i])).decode('utf8') # флаг "есть еще текст для вывода" repeat = True while repeat: # сбросить итератор на первый элемент q = 0 repeat = False # пока не закончили перебирать параметры (перебираем по парам) while q < len(cols): # если это последний параметр, и для него не указана ширина if q == len(cols)-1: # выводим его полностью несмотря на ширину окна cl_overriding.printSUCCESS(cols[q].encode('utf8'), printBR=False) cols[q] = '' else: # вывести часть строки не больше указанной ширины колонки cl_overriding.printSUCCESS(\ (cols[q][:cols[q+1]].ljust(cols[q+1])).encode('utf8') + " ", printBR=False) # остальную часть строки оставить на следующую итерацию cols[q] = cols[q][cols[q+1]:] # если от строки что то осаталось if len(cols[q]) > 0: # отметить запуск еще одной итерации по параметрам repeat = True # следующая пара q += 2 # колонки отображены cl_overriding.printSUCCESS('')
if error: for line in filter(lambda x: x,str(error).split('\n')): self.printERROR(line) return False nameAndVerPkg = clVars.Get("cl_name")+"-"+\ clVars.Get("cl_ver") if dirsFiles is False: self.printERROR(_("Error template in a package %s")\ %nameAndVerPkg) for errMess in clTempl.getError().splitlines(): self.printERROR(errMess) return False if dirsFiles and dirsFiles[1]: if not nameAndVerPkg in listIndex: listIndex.append(nameAndVerPkg) dictPakkages[nameAndVerPkg] =\ sorted(list(set(dirsFiles[1]))) if dictPakkages: for calcPkg in listIndex: self.printWARNING(_("Package %s has changed files")%calcPkg+":") for nameF in dictPakkages[calcPkg]: nameFile = nameF if nameFile[:1] != "/": nameFile = "/" + nameFile self.printWARNING(" "*5 + nameFile) if clTempl and clTempl.getWarning(): cl_overriding.printSUCCESS("") for warn in clTempl.getWarning().split("\n"): self.printWARNING(warn) return True
def printW(): cl_overriding.printSUCCESS( _("Incorrect string of available networks")) cl_overriding.printSUCCESS(\ _("Example - allow networks: 10.0.0.0/24 10.0.10.0/24")) cl_overriding.printSUCCESS(_("Try again\n"))
def updateConfig(self, nameProgram, category, version, configPath): """Обновление системных конфигурационных файлов""" # флаг обновления и программы используемые для наложения шаблонов flagUpdate, mergePrograms = self.getFlagUpdAndInstPrograms() self.logger.info(_("Package %s") %nameProgram) self.logger.info(_("Update system cofiguration files")) if not os.path.exists(configPath): self.printERROR(_("Path '%s' does not exist")%configPath) return False dictPakkages = {} listIndex = [] # Добавление условия, что программа category/nameProgram установлена cl_template.templateFunction.installProg.update(\ {"%s/%s"%(category,nameProgram):[version], "%s"%(nameProgram):[version]}) clTempl = False for mergeProgram in mergePrograms: clVars = DataVarsObject(mergeProgram) if not clVars.findPathVars(): continue clVars.importDataObject() clVars.Set("cl_root_path", configPath, True) clVars.Set("cl_belong_pkg", nameProgram, True) clVars.Set("cl_action", 'merge', True) configFiles = [] nameProg = clVars.Get("cl_name") if nameProg == "calculate-install": configFiles = self.scanProtectDirs(configPath) if configFiles: cltObject = templateClt(clVars) cltObject.filterApplyTemplates = configFiles clTempl = template(clVars, cltObj=cltObject, printWarning=False) else: clTempl = template(clVars, cltObj=False, printWarning=False) dirsFiles = clTempl.applyTemplates() nameAndVerPkg = nameProg + "-"+clVars.Get("cl_ver") if dirsFiles is False: self.printERROR(_("Template error in package %s")\ %nameAndVerPkg) for errMess in clTempl.getError().splitlines(): self.printERROR(errMess) return False copyFiles = clTempl.autoUpdateFiles copyDirs = clTempl.autoUpdateDirs allCopyAutoupdateFiles = copyDirs + copyFiles for fileOrDir in allCopyAutoupdateFiles: dst = "/" + fileOrDir.partition(configPath)[2] self.copyDirOrFile(fileOrDir, dst, configPath) if dirsFiles and dirsFiles[1]: if not nameAndVerPkg in listIndex: listIndex.append(nameAndVerPkg) dictPakkages[nameAndVerPkg] =\ sorted(list(set(dirsFiles[1]))) if dictPakkages: for calcPkg in listIndex: self.printWARNING( _("Package %s has changed the following files")%calcPkg+":") for nameF in dictPakkages[calcPkg]: nameFile = nameF.partition(configPath)[2] if nameFile: if nameFile[:1] != "/": nameFile = "/" + nameFile else: nameFile = nameF self.printWARNING(" "*5 + nameFile) else: self.logger.warn(_("Templates not found")) if flagUpdate: self.copyConfigFiles(configPath) if clTempl and clTempl.getWarning(): cl_overriding.printSUCCESS("") for warn in clTempl.getWarning().split("\n"): self.printWARNING(warn) cl_overriding.printSUCCESS("") return True
def printVars(self, varsFilter=None, varsNames=[], outFormat="default", verbose=1): """распечатать список переменных с значениями""" def getLenElements(varsDict): mlen_name = 0 mlen_type = 0 mlen_mode = 0 for i, j in varsDict.items(): if len(i) > mlen_name: mlen_name = len(i) if not "[" in varsDict[i].mode: mode = "[%s]" % (varsDict[i].mode.lower()) varsDict[i].mode = mode if len(mode) > mlen_mode: mlen_mode = len(mode) return mlen_name, mlen_type, mlen_mode def printVarsTable(varsDict, title, lenList=()): """print variables table""" if lenList: mlen_name, mlen_type, mlen_mode = lenList else: mlen_name, mlen_type, mlen_mode = getLenElements(varsDict) plist = varsDict.keys() plist.sort() br = "-" * mlen_name + " " + "-" * mlen_mode + " " + "-" * 10 cl_overriding.printSUCCESS(title) cl_overriding.printSUCCESS(br) cl_overriding.printSUCCESS( _toUNICODE(_("Variable name")).center(mlen_name).encode("UTF-8") + " " + _("Mode") + " " + _("Value") ) cl_overriding.printSUCCESS(br) for i in plist: if i.endswith("_pw") and varsDict[i].value: p_val = "***" else: p_val = varsDict[i].value columnWrite(i, mlen_name, varsDict[i].mode.lower(), mlen_mode, p_val) var, dictPkgVars = self.getVars(varsFilter, varsNames, verbose=verbose) if outFormat == "default": lenList = getLenElements(var) libService = "main" if libService in dictPkgVars: var = dictPkgVars.pop(libService) printVarsTable(var, _("The list of %s variables:") % "library", lenList=lenList) for service in dictPkgVars.keys(): var = dictPkgVars[service] cl_overriding.printSUCCESS("") printVarsTable(var, _("The list of %s variables:") % service, lenList=lenList) elif outFormat == "xml": xmlObj = _varsXML() varNames = sorted(var.keys()) for name in varNames: if name.endswith("_pw"): value = "***" else: 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)