コード例 #1
0
ファイル: cl_string.py プロジェクト: nocl/calculate-2.2-lib
    def getColumsnWidth(self):
        """Находит максимальную ширину каждой колонки

        результат список ширин колонок
        """
        columnsWidth = []
        lenCol = 0 
        for s in self.headerList:
            lenCol += 1
            columnsWidth.append(len(_toUNICODE(s)))
        maxLenCol = lenCol
        # Вычисляем максимальное количество столбцов
        for s in self.dataList:
            lenS = len(s)
            if maxLenCol < lenS:
                maxLenCol = lenS
        if maxLenCol > lenCol:
            appCol = maxLenCol - lenCol
            # Добавляем элементы в список ширин
            for i in range(appCol):
                columnsWidth.append(0)
        # Вычисляем ширину столбцов
        for e in self.dataList:
            i = 0
            for s in e:
                lenS = len(_toUNICODE(s))
                if columnsWidth[i] < lenS:
                    columnsWidth[i] = lenS
                i += 1
        return columnsWidth
コード例 #2
0
 def get_cl_assemble_dev(self):
     """Used devices for system assembling"""
     envFile = '/etc/calculate/assemble.env'
     envData = iniParser(envFile)
     return map(lambda x:_toUNICODE(envData.getVar(x,
                          'os_assemble_root_dev')).encode('utf-8'),
                 self.Get('cl_assemble_distro'))
コード例 #3
0
 def get_cl_builder_distro(self):
     """Current assembling systems"""
     envFile = '/etc/calculate/assemble.env'
     envData = iniParser(envFile)
     return filter(lambda x:envData.getVar(x,
                           'os_assemble_root_dev'),
         map(lambda x:_toUNICODE(x).encode('utf-8'),
                envData.getAllSectionNames()))
コード例 #4
0
 def _getFromEnv(self,var):
     """Get variable from env"""
     section = self.Get('os_assemble_system_profile').rpartition(
                          '/profiles/')[2]
     envFile = '/etc/calculate/assemble.env'
     envData = iniParser(envFile)
     res = envData.getVar(section,var)
     if res != False:
         res = _toUNICODE(res).encode('utf-8')
     return res
コード例 #5
0
ファイル: cl_opt.py プロジェクト: nocl/calculate-2.2-lib
 def _format_text(self, text):
     """
     Format a paragraph of free-form text for inclusion in the
     help output at the current indentation level.
     """
     text_width = self.width - self.current_indent
     indent = " "*self.current_indent
     return textwrap.fill(_toUNICODE(text),
                          text_width,
                          initial_indent=indent,
                          subsequent_indent=indent).encode('UTF-8')
コード例 #6
0
 def isAssemble(self, showError=True):
     """Detect system assembling"""
     if self.logicObj.clVars.Get("cl_builder_distro") and self.logicObj.clVars.Get("cl_builder_path"):
         inidata = iniParser(self.envFile)
         res = inidata.getVar(self.__sectionName(), "cl_assemble_step_world", checkExistVar=True)
         if not res[0] or not "finish" in _toUNICODE(res[1]).encode("utf-8"):
             if showError:
                 self.printERROR(_("System assemble not completed."))
             return False
         return True
     else:
         return False
コード例 #7
0
 def get_cl_builder_path(self):
     """Get path for image"""
     paths = map(lambda x:x[1],reversed(libData.cl_env_data['value']))
     if self.Get('cl_action') != 'kernel':
         for inifile in paths:
             if os.access(inifile,os.R_OK):
                 inidata = iniParser(inifile)
                 res = inidata.getVar("assemble","cl_assemble_path",
                                      checkExistVar=True)
                 if res and res[0]:
                     return _toUNICODE(res[1]).encode('utf-8')
         return "/mnt/builder"
     return "/"
コード例 #8
0
ファイル: cl_string.py プロジェクト: nocl/calculate-2.2-lib
    def _insertStrChar(self, line, lenCols, char):
        """Вставляет несколько символов char в указанные позиции

        сначала строки будет вставлено char[1:] в конце строки char[:-1]
        """
        lineUnicode = _toUNICODE(line)
        prevPos = 0
        convLine = char[1:]
        lenLenCols = len(lenCols)
        for i in range(lenLenCols):
            pos = lenCols[i] + prevPos
            if i == lenLenCols-1:
                insertChar = char[:-1]
            else:
                insertChar = char
            convLine += lineUnicode[prevPos:pos] + insertChar
            prevPos = pos + 1
        return convLine.encode("UTF-8")
コード例 #9
0
ファイル: cl_datavars.py プロジェクト: nocl/calculate-2.2-lib
 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)
コード例 #10
0
ファイル: cl_opt.py プロジェクト: nocl/calculate-2.2-lib
 def format_option(self, option):
     # The help for each option consists of two parts:
     #   * the opt strings and metavars
     #     eg. ("-x", or "-fFILENAME, --file=FILENAME")
     #   * the user-supplied help string
     #     eg. ("turn on expert mode", "read data from FILENAME")
     #
     # If possible, we write both of these on the same line:
     #   -x      turn on expert mode
     #
     # But if the opt string list is too long, we put the help
     # string on a second line, indented to the same column it would
     # start in if it fit on the first line.
     #   -fFILENAME, --file=FILENAME
     #           read data from FILENAME
     result = []
     opts = self.option_strings[option]
     opt_width = self.help_position - self.current_indent - 2
     if len(opts) > opt_width:
         opts = "%*s%s\n" % (self.current_indent, "", opts)
         indent_first = self.help_position
     else:                       # start help on same line as opts
         opts = "%*s%-*s  " % (self.current_indent, "", opt_width, opts)
         indent_first = 0
     result.append(opts)
     if option.help:
         help_text = self.expand_default(option)
         help_lines = map(lambda x : x.encode('UTF-8'),
                          textwrap.wrap(_toUNICODE(help_text),
                                        self.help_width))
         result.append("%*s%s\n" % (indent_first, "", help_lines[0]))
         result.extend(["%*s%s\n" % (self.help_position, "", line)
                        for line in help_lines[1:]])
     elif opts[-1] != "\n":
         result.append("\n")
     return "".join(result)
コード例 #11
0
ファイル: cl_string.py プロジェクト: nocl/calculate-2.2-lib
def prettyColumnStr(*cols):
    '''Функция преобразования строк в текстовые колонки. Если указанный текст
    не помещается в колонку, то строка переносится на следующую этой же колонки
    перенос текста идет по словам, и текст выравнивается по ширине колонки за
    счет дополнительных пробелов между словами. Если в строке используется
    перенос строки, то текст переносится не просто на следующую строку, а также
    на следующую строку колонки, причем если используется \r текст выравнива-
    ется по ширине, а если \n, то просто перевод строки.

    Параметры:
    cols     множестово пар: текст, ширина колонки, причем, если у последней
             колонки не указывать ширину, то она будет выведена вся.

    Возвращаемые параметры:
    строка, которую можно использовать для вывода на экран

    Пример: columnWrite( "Some text", 10, "Next column", 20 )
    '''
    # шаблон поиска переводов строк
    wherenr = compile( '[\n\r]', S )
    retstr = ""
    # перевести кортеж в список, т.к. изменяется
    cols = list(cols)
    # перевести текст в юникод, заодно перевести числа в строку
    noconvert = False
    space = u' '
    nospace = u''
    for i in xrange(0,len(cols),2):
        cols[i] = _toUNICODE(cols[i])
    # флаг "есть еще текст для вывода"
    repeat = True
    while repeat:
        # сбросить итератор на первый элемент
        q = 0
        repeat = False
        # пока не закончили перебирать параметры (перебираем по парам)
        while q < len(cols):
            # если это последний параметр, и для него не указана ширина
            if q == len(cols)-1:
                # выводим его полностью не смотря на ширину окна
                retstr += cols[q] + " "
                cols[q] = ''
            else:
                # вывести часть строки не больше указанной ширины колонки
                partstr = cols[q][:cols[q+1]]
                # искать перевод строки с полученной части
                brfind = wherenr.search(partstr)
                # если это не последняя колонка
                if q + 2 < len(cols):
                    # добавить разделитель между колонками
                    cellspacing = space
                else:
                    # разделитель не нужен
                    cellspacing = nospace

                # если перевод строки найден, то
                if brfind != None:
                    # для текущего вывода в колонку
                    # берем часть строки до перевода
                    partstr = partstr[:brfind.start()]
                    # остальная часть идет в остаток (без перевода)
                    cols[q] = cols[q][brfind.start()+1:]
#                    # если используется перевод каретки
#                    if brfind.group() == '\r':
#                        # то выравниваем по ширине колонки
#                        partstr = partstr.ljust(cols[q+1], ' ')
#                    else:
#                        # добавить отступы чтобы закончить колонку
                    partstr = partstr.ljust(cols[q+1], ' ')
                # если взята часть строки
                elif len(partstr) == cols[q+1] and partstr != cols[q]:
                    # если взята часть строки (разрыв в слове)
                    if cols[q][cols[q+1]] != ' ':
                        # ищем ближайший пробел справа
                        spacepos = partstr.rfind(' ')
                        # если пробел найти не удалось
                        if spacepos == -1:
                            # то на вывод идет часть строки равной ширине
                            cols[q] = cols[q][cols[q+1]:]
                        # если пробел найден
                        else:
                            # обрезаем строку до найденного пробела
                            partstr = partstr[:spacepos]
                            cols[q] = cols[q][spacepos+1:]
                    # если взята часть строки (разрыв на пробеле)
                    else:
                        # ислючить переносной пробел
                        cols[q] = cols[q][cols[q+1]+1:]
                    # выровнить текст по ширине колонки
                    partstr = partstr.ljust(cols[q+1], ' ')
                    #partstr = justify(partstr, cols[q+1])
                # остатки строки
                else:
                    # добавить отступы чтобы закончить колонку
                    partstr = partstr.ljust(cols[q+1], ' ')
                    cols[q] = ''

                retstr+= partstr + cellspacingS

                # остальную часть строки оставить на следующую итерацию
                # если от строки что то осаталось
                if len(cols[q]) > 0:
                    # отметить запуск еще одной итерации по параметрам
                    repeat = True
            # следующая пара
            q += 2
        # колонки отображены
        retstr += "\n"
    return retstr.encode('utf8')
コード例 #12
0
ファイル: cl_print.py プロジェクト: nocl/calculate-2.2-lib
 def lenString(self, string):
     """Получаем длинну строки"""
     stringUnicode = _toUNICODE(string)
     lenString = len(stringUnicode)
     return lenString