diff --git a/pym/cl_template.py b/pym/cl_template.py index bd2711e..b1d63ce 100644 --- a/pym/cl_template.py +++ b/pym/cl_template.py @@ -2955,6 +2955,136 @@ or 'lower' or 'capitalize'")) textTemplateTmp[resS.end():] return textTemplateTmp + def funcList(self, funArgv, resS, localVars, textTemplateTmp): + """Функция шаблона list(). + Если первый аргумент является именем локальной или глобальной + переменной и значение переменной является списком, выдает + элемент списка по второму аргументу индексу. + Первый элемент имеет индекс 0 + """ + terms = funArgv.replace(" ","").split(",") + # У функции должно быть два аргумента + if len(terms) != 2: + self.printErrTemplate() + cl_overriding.exit(1) + # Название локальной или глобальной переменной + nameLocVar = terms[0] + strIndex = terms[1] + try: + intIndex = int(strIndex) + except: + cl_overriding.printERROR(_("'%s' is not a number")%strIndex) + self.printErrTemplate() + cl_overriding.exit(1) + flagFoundVar = False + if nameLocVar in localVars.keys(): + flagFoundVar = True + value = localVars[nameLocVar] + else: + try: + value = self.objVar.Get(nameLocVar) + flagFoundVar = True + except: + pass + if not flagFoundVar: + # Если переменная не существует + cl_overriding.printERROR(_("error var %s not exists")\ + %str(nameLocVar)) + self.printErrTemplate() + cl_overriding.exit(1) + if not type(value) in (list,tuple): + # Значение переменной не список или кортеж + cl_overriding.printERROR(_("value of %s is not a list or tuple")\ + %str(nameLocVar)) + self.printErrTemplate() + cl_overriding.exit(1) + try: + replace = str(value[intIndex]) + except: + cl_overriding.printERROR(_("%s wrong")%strIndex) + self.printErrTemplate() + cl_overriding.exit(1) + textTemplateTmp = textTemplateTmp[:resS.start()] + replace +\ + textTemplateTmp[resS.end():] + return textTemplateTmp + + def funcDisk(self, funArgv, resS, localVars, textTemplateTmp): + """Функция шаблона disk(). + Первый аргумент ищется в значении переменной os_disk_install + (значение os_disk_install - список точек монтирования при установке) + второй аргумент используется для поиска в переменной + os_disk_второй_аргумент (значение os_disk_второй_аргумент - список) + В os_disk_install ищется первый аргумент, находим его индекс + результат - элемент cписка из os_disk_второй_аргумент с этим индексом + """ + terms = funArgv.replace(" ","").split(",") + # У функции должно быть два аргумента + if len(terms) != 2: + self.printErrTemplate() + cl_overriding.exit(1) + # Название глобальной переменной + mountPoint = terms[0] + lastElementVar = terms[1] + if not mountPoint or mountPoint[:1] !="/": + cl_overriding.printERROR(_("%s wrong")%lastElementVar) + self.printErrTemplate() + cl_overriding.exit(1) + nameVar = "os_disk_install" + try: + valueVar = self.objVar.Get(nameVar) + except: + # Если переменная не существует + cl_overriding.printERROR(_("error var %s not exists")%nameVar) + self.printErrTemplate() + cl_overriding.exit(1) + nameElementVar = "os_disk_%s"%lastElementVar + try: + valueElementVar = self.objVar.Get(nameElementVar) + except: + # Если переменная не существует + cl_overriding.printERROR(_("%s wrong")%lastElementVar) + cl_overriding.printERROR(_("error var %s not exists")\ + %nameElementVar) + self.printErrTemplate() + cl_overriding.exit(1) + if not type(valueVar) in (list,tuple): + # Значение переменной не список или кортеж + cl_overriding.printERROR(_("value of %s is not a list or tuple")\ + %nameVar) + self.printErrTemplate() + cl_overriding.exit(1) + if not type(valueElementVar) in (list,tuple): + # Значение переменной не список или кортеж + cl_overriding.printERROR(_("value of %s is not a list or tuple")\ + %nameElementVar) + self.printErrTemplate() + cl_overriding.exit(1) + if len(valueVar) != len(valueElementVar): + cl_overriding.printERROR(\ + _("size %s is not equal to the size of %s")\ + %(nameVar, nameElementVar)) + self.printErrTemplate() + cl_overriding.exit(1) + index = None + for num, mPoint in enumerate(valueVar): + if mountPoint == mPoint: + index = num + break + if index is None: + for num, mPoint in enumerate(valueVar): + if "/" == mPoint: + index = num + break + if index is None: + cl_overriding.printERROR(_("in the value of the variable \ +os_disk_install not found mount point '\' and '\%s'")%mountPoint) + self.printErrTemplate() + cl_overriding.exit(1) + replace = valueElementVar[index] + textTemplateTmp = textTemplateTmp[:resS.start()] + replace +\ + textTemplateTmp[resS.end():] + return textTemplateTmp + def printErrTemplate(self): """Печать ошибки при обработке функций шаблона""" cl_overriding.printERROR(_("error in template %s")%self.nameTemplate)