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
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'))
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()))
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
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')
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
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 "/"
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")
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 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)
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')
def lenString(self, string): """Получаем длинну строки""" stringUnicode = _toUNICODE(string) lenString = len(stringUnicode) return lenString