From 8818f3bb69924495da8a9370c9f3fb848e8cc768 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: Mon, 31 May 2010 11:12:17 +0400 Subject: [PATCH] Add template functions groups() --- pym/cl_template.py | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/pym/cl_template.py b/pym/cl_template.py index fee6b45..045dcce 100644 --- a/pym/cl_template.py +++ b/pym/cl_template.py @@ -2197,7 +2197,7 @@ class _shareTemplate: _deltVarStart = len(varStart) _deltVarEnd = len(varEnd) - def getDataUser(self): + def getDataUser(self, groupsInfo=False): """Получить информацию о пользователе""" userName = self.objVar.Get("ur_login") if not userName: @@ -2211,6 +2211,17 @@ class _shareTemplate: except: print _("Can not found user %s")%str(userName) cl_overriding.exit(1) + if groupsInfo: + import grp + try: + groupName = grp.getgrgid(gid).gr_name + except: + print _("Can not found group id %s")%str(gid) + cl_overriding.exit(1) + groupsNames = map(lambda x: x.gr_name,\ + filter(lambda x: userName in x.gr_mem, grp.getgrall())) + groupsNames = [groupName] + groupsNames + return uid, gid, homeDir, groupsNames return uid, gid, homeDir class templateFunction(_error, _shareTemplate, _shareTermsFunction): @@ -2283,7 +2294,8 @@ class templateFunction(_error, _shareTemplate, _shareTermsFunction): self.currDictIni = {} # Время модификации конфигурационного файла для ini() self.timeIni = -1 - self.uid, self.gid, self.homeDir = self.getDataUser() + self.uid, self.gid, self.homeDir, self.groups =\ + self.getDataUser(groupsInfo=True) # Домашняя директория, плюс базовая директория self.homeDir = os.path.join(self._baseDir, self.homeDir[1:]) # Путь к конфигурационному файлу для ini() @@ -2389,11 +2401,11 @@ class templateFunction(_error, _shareTemplate, _shareTermsFunction): """Функция шаблона exists(), проверяет существование файла, если существует выдает '1' """ - terms = funArgv.replace(" ","").split(",") + terms = map(lambda x: x.strip(), funArgv.split(",")) if len(terms) !=1: self.printErrTemplate() cl_overriding.exit(1) - fileName = terms[0].strip() + fileName = terms[0] if fileName[0] == "~": # Получаем директорию пользователя fileName = os.path.join(self.homeDir, @@ -2414,8 +2426,8 @@ class templateFunction(_error, _shareTemplate, _shareTermsFunction): если файл существует читает из файла локальную переменную если один параметр - выводит значение локальной переменной """ - terms = funArgv.replace(" ","").split(",") - if not terms[0].strip() or\ + terms = funArgv.split(",") + if not terms or not terms[0].strip() or\ (len(terms)==2 and not terms[1].strip()) or\ len(terms)>2: self.printErrTemplate() @@ -2910,6 +2922,20 @@ class templateFunction(_error, _shareTemplate, _shareTermsFunction): textTemplateTmp[resS.end():] return textTemplateTmp + def funcGroups(self, funArgv, resS, localVars, textTemplateTmp): + """Функция шаблона groups(), + проверяет нахождение пользователя в группах, если находится выдает '1' + """ + terms = map(lambda x: x.strip(), funArgv.split(",")) + groupNames = set(terms) + userGroups = set(self.groups) + replace = "" + if groupNames & userGroups: + replace = "1" + textTemplateTmp = textTemplateTmp[:resS.start()] + replace +\ + textTemplateTmp[resS.end():] + return textTemplateTmp + def printErrTemplate(self): """Печать ошибки при обработке функций шаблона""" print _("error in template %s")%self.nameTemplate