From 2ce48cbbd6acd9475e4b4dc2eb409583419e3bac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B0=D0=BC=D0=BE=D1=83=D0=BA=D0=B8=D0=BD=20=D0=90?= =?UTF-8?q?=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= Date: Fri, 25 Jun 2010 13:44:56 +0400 Subject: [PATCH] Added cl_chroot_path template variable Deprecated relative paths to files in exists () and load () function templates --- pym/cl_template.py | 107 +++++++++++++++++++++++---------------------- pym/cl_vars.py | 9 ++-- 2 files changed, 60 insertions(+), 56 deletions(-) diff --git a/pym/cl_template.py b/pym/cl_template.py index b1d63ce..b5934ea 100644 --- a/pym/cl_template.py +++ b/pym/cl_template.py @@ -2229,12 +2229,12 @@ class templateFunction(_error, _shareTemplate, _shareTermsFunction): # Регулярное выражение для умножениея и деления sMD = re.compile("[^\-\+\*\/]+") - # стек глобальных переменных - stackGlobalVars = [] - # директория установленных программ basePkgDir = "/var/db/pkg" + # стек глобальных переменных + stackGlobalVars = [] + # регулярное выражение для поиска версии reFindVer = re.compile("(?<=\-)\d+\.?\d*\.?\d*") @@ -2264,8 +2264,14 @@ class templateFunction(_error, _shareTemplate, _shareTermsFunction): self.namesTemplateFunction.append(nameFunction) # Объект хранения переменных self.objVar = objVar - # Базовая директория переноса шаблонов "/mnt/calculate" или "/" и.т.д - self._baseDir = self.objVar.Get("cl_root_path") + # Директория другой системы + self._chrootDir = self.objVar.Get("cl_chroot_path") + if self._chrootDir != '/': + # Изменение директории к базе пакетов + self.basePkgDir = os.path.join(self._chrootDir, self.basePkgDir[1:]) + # Базовая директория переноса шаблонов "/mnt/calculate" или "/" и.т.д + self._baseDir = os.path.join(self._chrootDir, + self.objVar.Get("cl_root_path")[1:]) self._reFunc = re.compile(("%s%s%s")\ %(self.varStart,self._reFunctionText,self.varEnd),re.M) # Аттрибуты для функции шаблона ini() @@ -2404,8 +2410,11 @@ class templateFunction(_error, _shareTemplate, _shareTermsFunction): fileName = os.path.join(self.homeDir, fileName.partition("/")[2],"")[:-1] elif fileName[0] != "/": - path = os.path.split(nameSystemFile)[0] - fileName=os.path.join(path,fileName) + self.printErrTemplate() + cl_overriding.printERROR(_("wrong path '%s'")%fileName) + cl_overriding.exit(1) + else: + fileName = os.path.join(self._baseDir,fileName[1:]) replace = "" if os.path.exists(fileName): replace = "1" @@ -2439,8 +2448,11 @@ class templateFunction(_error, _shareTemplate, _shareTermsFunction): fileName = os.path.join(self.homeDir, fileName.partition("/")[2],"")[:-1] elif fileName[0] != "/": - path = os.path.split(nameSystemFile)[0] - fileName=os.path.join(path,fileName) + self.printErrTemplate() + cl_overriding.printERROR(_("wrong path '%s'")%fileName) + cl_overriding.exit(1) + else: + fileName = os.path.join(self._baseDir,fileName[1:]) else: fileName = terms[1].strip() # Если домашняя директория @@ -2449,8 +2461,11 @@ class templateFunction(_error, _shareTemplate, _shareTermsFunction): fileName = os.path.join(self.homeDir, fileName.partition("/")[2],"")[:-1] elif fileName[1] != "/": - path = os.path.split(nameSystemFile)[0] - fileName=os.path.join(path,fileName) + self.printErrTemplate() + cl_overriding.printERROR(_("wrong path '%s'")%fileName) + cl_overriding.exit(1) + else: + fileName = os.path.join(self._baseDir,fileName[1:]) replace = "" if os.path.exists(fileName): FD = open(fileName) @@ -3091,7 +3106,7 @@ os_disk_install not found mount point '\' and '\%s'")%mountPoint) cl_overriding.printERROR(_("error template term '%s'")\ %str(self.functText)) - def applyFuncTemplate(self, textTemplate, nameTemplate, nameSystemFile): + def applyFuncTemplate(self, textTemplate, nameTemplate): """Применяет функции к тексту шаблона""" # Локальные переменные localVars = {} @@ -3209,7 +3224,8 @@ re.M|re.S) # Объект с переменными self.objVar = objVar # Базовая директория переноса шаблонов "/mnt/calculate" или "/" и.т.д - self._baseDir = self.objVar.Get("cl_root_path") + self._baseDir = os.path.join(self.objVar.Get("cl_chroot_path"), + self.objVar.Get("cl_root_path")[1:]) # Последняя часть директории шаблона (имя сервиса: samba, mail) self._servDir = servDir if self._servDir: @@ -3339,43 +3355,31 @@ re.M|re.S) resS = self._reVar.search(textTemplateTmp) return textTemplateTmp - def applyTermsTemplate(self,textTemplate,nameTemplate,nameSystemFile=False): + def applyTermsTemplate(self,textTemplate,nameTemplate): """ Применяет условия, к условным блокам текста """ + def function(text): + """Функция обработки функций в заголовке""" + return self.applyFuncTemplate(text, nameTemplate) + textTerm = "" resS = self._reTermBloc.search(textTemplate) textTemplateTmp = textTemplate - def function(text): - """Функция обработки функций в заголовке""" - return self.applyFuncTemplate(text, nameTemplate, nameSystemFile) - if nameSystemFile: - while resS: - mark = resS.group(0) - body = resS.group("body") - end = resS.group("end") - parent = resS.group("func") - if not parent: - parent = "" - term = resS.group("rTerm") + parent +\ - resS.group("lTerm") - if self._equalTerm(term, _("content template not valid: ")+\ - nameTemplate, function): - textTemplateTmp = textTemplateTmp.replace(mark, body+end) - else: - textTemplateTmp = textTemplateTmp.replace(mark, "") - resS = self._reTermBloc.search(textTemplateTmp) - else: - while resS: - mark = resS.group(0) - body = resS.group("body") - end = resS.group("end") - term = resS.group("rTerm") + resS.group("lTerm") - if self._equalTerm(term, _("content template not valid: ")+\ - nameTemplate): - textTemplateTmp = textTemplateTmp.replace(mark, body+end) - else: - textTemplateTmp = textTemplateTmp.replace(mark, "") - resS = self._reTermBloc.search(textTemplateTmp) + while resS: + mark = resS.group(0) + body = resS.group("body") + end = resS.group("end") + parent = resS.group("func") + if not parent: + parent = "" + term = resS.group("rTerm") + parent +\ + resS.group("lTerm") + if self._equalTerm(term, _("content template not valid: ")+\ + nameTemplate, function): + textTemplateTmp = textTemplateTmp.replace(mark, body+end) + else: + textTemplateTmp = textTemplateTmp.replace(mark, "") + resS = self._reTermBloc.search(textTemplateTmp) return textTemplateTmp def getNeedTemplate(self, fileTemplate): @@ -3641,7 +3645,7 @@ re.M|re.S) def function(text): """Функция обработки функций в заголовке""" - return self.applyFuncTemplate(text, templateDirFile, newDir) + return self.applyFuncTemplate(text, templateDirFile) def chownConfDir(nameDirConfig, uid, gid, nameFileTemplate): """Изменение владельца конфигурационной директории""" @@ -3699,8 +3703,7 @@ re.M|re.S) textTemplate = self.applyVarsTemplate(textTemplate, templateDirFile) # Заменяем функции на их значения - textTemplate = self.applyFuncTemplate(textTemplate, templateDirFile, - applyDir) + textTemplate = self.applyFuncTemplate(textTemplate, templateDirFile) # Обработка заголовка objHead = dirHeader(templateDirFile,textTemplate,self.objVar,function) # Директория с профилями не будет применена @@ -3840,7 +3843,7 @@ re.M|re.S) def function(text): """Функция обработки функций в заголовке""" - return self.applyFuncTemplate(text,nameFileTemplate,nameFileConfig) + return self.applyFuncTemplate(text,nameFileTemplate) def renameConfFileCLT(nameFileConfig): """Изменение название файла templ.conf.clt на templ.conf""" @@ -4234,15 +4237,13 @@ re.M|re.S) if templateFileType != "bin": # Вычисляем условные блоки self.textTemplate = self.applyTermsTemplate(self.textTemplate, - nameFileTemplate, - nameFileConfig) + nameFileTemplate) # Заменяем переменные на их значения self.textTemplate = self.applyVarsTemplate(self.textTemplate, nameFileTemplate) # Вычисляем функции self.textTemplate = self.applyFuncTemplate(self.textTemplate, - nameFileTemplate, - nameFileConfig) + nameFileTemplate) flagCopyTemplate = False filesApply, objHeadNew = self.__getApplyHeadTemplate(nameFileTemplate, nameFileConfig, diff --git a/pym/cl_vars.py b/pym/cl_vars.py index 76c840a..f0d2f06 100644 --- a/pym/cl_vars.py +++ b/pym/cl_vars.py @@ -133,14 +133,17 @@ class Data: #Полное имя пользователя ur_fullname = {'mode':"r", 'official':True} - + # Домашняя директория пользователя ur_home_path = {'mode':"r", 'official':True} - #путь к директории относительно которой происходит наложение профилей на - #файлы системы + # Путь к директории относительно которой происходит наложение профилей на + #файлы системы (песочница) cl_root_path = {'mode':"w", 'value':"/"} + # Путь к директории другой системы + cl_chroot_path = {'mode':"w", 'value':"/"} + # Действие программы # user - генерация профиля пользователя # install / uninstall - установка и удаление программы