Esempio n. 1
0
 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")))
Esempio n. 2
0
 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)
Esempio n. 3
0
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
Esempio n. 5
0
 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"))
Esempio n. 6
0
 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
Esempio n. 7
0
    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)