From 5b2594c6118e7f5a5373782f3c8e7cce54871f82 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: Wed, 5 May 2010 13:35:03 +0400 Subject: [PATCH] Modified DataVars --- pym/cl_datavars.py | 106 ++++++++++++++++++++++----------------------- pym/cl_fill.py | 23 +++++++++- pym/cl_vars.py | 34 +++++++++------ 3 files changed, 94 insertions(+), 69 deletions(-) diff --git a/pym/cl_datavars.py b/pym/cl_datavars.py index 368670b..8d795b2 100644 --- a/pym/cl_datavars.py +++ b/pym/cl_datavars.py @@ -20,6 +20,7 @@ import cl_utils from cl_lang import lang from cl_template import iniParser from cl_string import columnWrite +import cl_overriding # Перевод модуля на другой язык tr = lang() @@ -116,6 +117,8 @@ class DataVars(object): #[(cекция,импортированный модуль переменных, объект заполнения),] self._importList = [] self.importData("Global") + # Переменные которые нужно записать + self.varsNeedWritten = [] def importData(self, section, modlist=[]): """Импортирует модули с переменными и модули с функциями заполнения @@ -252,7 +255,7 @@ class DataVars(object): self.__setattr__(nameVar, varobj) if self.__dict__.has_key(nameVar): if not force and "r" in getattr(self, nameVar).mode: - print _("Attempt to rewrite a variable for reading:%s")\ + print _("Attempt to rewrite a variable for reading") +": %s"\ %nameVar return False self.__getattribute__(nameVar).fillStart = False @@ -261,6 +264,25 @@ class DataVars(object): def Set(self, nameVar, value, force=False): return self.__Set(nameVar, value, force) + def SetWriteVar(self, nameVar, value, force=False): + """Установка значения переменной, + + и запись в список сохраняемых переменных""" + ret = self.__Set(nameVar, value, force) + if ret and not nameVar in self.varsNeedWritten: + self.varsNeedWritten.append(nameVar) + return ret + + def WriteVars(self, location='local', header=False): + """Запись переменных установленных командой SetWriteVar""" + flagSuccess = True + for nameVar in self.varsNeedWritten: + if not self.Write(nameVar, self.Get(nameVar), force=False, + location=location, header=header): + flagSuccess = False + break + return flagSuccess + def __frame(self, lVar): """получить список областей зависимости переменных""" data = [] @@ -298,9 +320,18 @@ class DataVars(object): links[name][nm] = "" return links - def __getPathCalculateIni(self): - """Получить пути до ini файлов""" - return self.Get('cl_env_path') + def __getPathCalculateIni(self, location): + """Получить путь к ini файлу по алиасу пути""" + retData = self.Get('cl_env_data') + ini_dict = {} + ini_dict.update(retData) + if location in ini_dict.keys(): + name_calculate_ini = ini_dict[location] + else: + print _("Unable to find the alias '%s' of the file path for \ +storage of variables templates")%location + cl_overriding.exit(1) + return name_calculate_ini def __getSection(self, vname): """секция для записи в ini файл переменной @@ -326,17 +357,8 @@ class DataVars(object): True запись успешна False запись не удалсь ''' - # получаем все пути до ini файлов - calculate_ini = self.__getPathCalculateIni() - # получаем полный путь до файла ini - if location == 'default': - name_calculate_ini = calculate_ini[2] - elif location == 'local': - name_calculate_ini = calculate_ini[1] - elif location == 'remote': - name_calculate_ini = calculate_ini[0] - else: - return False + # получаем путь до ini файла + name_calculate_ini = self.__getPathCalculateIni(location) # извлекаем из полного имени файла путь onlydir = os.path.split(name_calculate_ini)[0] try: @@ -364,17 +386,8 @@ class DataVars(object): True удалено успешна False удаление не удалсь ''' - # получаем все пути до ini файлов - calculate_ini = self.__getPathCalculateIni() - # получаем полный путь до файла ini - if location == 'default': - name_calculate_ini = calculate_ini[2] - elif location == 'local': - name_calculate_ini = calculate_ini[1] - elif location == 'remote': - name_calculate_ini = calculate_ini[0] - else: - return False + # получаем путь до ini файла + name_calculate_ini = self.__getPathCalculateIni(location) # извлекаем из полного имени файла путь onlydir = os.path.split(name_calculate_ini)[0] # проверяем чтобы путь до ини файла существовал @@ -443,13 +456,14 @@ class DataVars(object): ''' #Cловарь переменных из ini файлов importVars = {} - calculate_ini = self.__getPathCalculateIni() + calculate_ini_files = self.Get('cl_env_path') # активные секции (секции из которых будут использованы переменные) act_section = self.__getActiveSections() set_act_section = set(act_section) i = 0 - locations = ['remote','local','default'] - for name_calculate_ini in calculate_ini: + # Алиасы к путям env + locations = self.Get('cl_env_location') + for name_calculate_ini in calculate_ini_files: # проверить сущестование ini файла if os.path.exists(name_calculate_ini): # получить объект настроенный на ini @@ -482,13 +496,14 @@ class DataVars(object): return importVars - #def defined(self, vname): - #if vname: - #if self.__dict__.has_key(vname): - #return True - #return False def defined(self, vname): - return True + """Установлена ли переменная""" + if hasattr(self, vname): + return True + return False + + #def defined(self, vname): + #return True @@ -537,14 +552,8 @@ class DataVars(object): for i,j in var.items(): if len(i)>mlen_name: mlen_name=len(i) - #if len(str(j.type))>mlen_type: - #mlen_type=len(str(j.type)) - vtype=str(type(var[i].value)).split(" ")[1][1] if not '[' in var[i].mode: - if vtype in ['d','l']: - mode="[%s%s]"%(var[i].mode.lower(),vtype) - else: - mode="[%s]"%(var[i].mode.lower()) + mode="[%s]"%(var[i].mode.lower()) var[i].mode=mode if len(mode)>mlen_mode: mlen_mode=len(mode) @@ -552,26 +561,15 @@ class DataVars(object): plist.sort() br = cl_utils.fillstr("-",mlen_name) + " " +\ cl_utils.fillstr("-",mlen_mode) + " " + cl_utils.fillstr("-",10) - #cl_utils.fillstr("-",mlen_type) + " " +\ - print "The list of variables:" print "var name".center(mlen_name),\ "Mode","Value" - #"Type".center(mlen_type),\ - - print br for i in plist: - #if var[i].value is None: - #continue p_val=var[i].value if var[i].official: continue - columnWrite( i, mlen_name, var[i].mode.lower(), - mlen_mode, - #str(var[i].type), - #mlen_type, - p_val) + columnWrite( i, mlen_name, var[i].mode.lower(), mlen_mode, p_val) print br class glob_attr: diff --git a/pym/cl_fill.py b/pym/cl_fill.py index bff426f..ea79a8a 100644 --- a/pym/cl_fill.py +++ b/pym/cl_fill.py @@ -20,6 +20,7 @@ import types import filecmp import pwd, grp import cl_datavars +import cl_overriding class clLocale: lang = { @@ -210,13 +211,31 @@ def getdirlist(s_path): class fillVars(object, cl_datavars.glob_attr): + def get_cl_env_path(self): + '''Пути к env файлам''' + envData = self.Get("cl_env_data") + if envData: + return map(lambda x: x[1], envData) + else: + print _("Error:") + " " +_("Template variable cl_env_data is empty") + cl_overriding.exit(1) + + def get_cl_env_location(self): + '''Алиасы к env файлам''' + envData = self.Get("cl_env_data") + if envData: + return map(lambda x: x[0], envData) + else: + print _("Error:") + " " +_("Template variable cl_env_data is empty") + cl_overriding.exit(1) + def get_os_net_domain(self): - ''' Определим домен''' + '''Определим домен''' domain=self._runos("hostname -d 2>&1") if not domain: print _("Error:") + " " +_("Not found domain name") print _("Command 'hostname -d' returns an empty value") - cl_base.exit(1) + cl_overriding.exit(1) elif re.search("^hostname: ",domain): return "local" else: diff --git a/pym/cl_vars.py b/pym/cl_vars.py index 6934dad..fedc3a8 100644 --- a/pym/cl_vars.py +++ b/pym/cl_vars.py @@ -36,10 +36,17 @@ class Data: #домен os_net_domain = {'mode':"w"} - # Пути к ini файлам - cl_env_path = {'value':['/var/calculate/remote/calculate.env', - '/var/calculate/calculate.env', - '/etc/calculate/calculate.env']} + # Алиасы и пути к ini файлам + cl_env_data = {'official':True, + 'value':[('default', '/etc/calculate/calculate.env'), + ('local', '/var/calculate/calculate.env'), + ('remote', '/var/calculate/remote/calculate.env')]} + + # Алиасы путей к ini файлам (из cl_env_data) + cl_env_location = {'official':True} + + # Пути к ini файлам (из cl_env_data) + cl_env_path = {} # локаль (прим: ru_RU.UTF-8) os_locale_locale = {} @@ -101,18 +108,19 @@ class Data: # версия системы os_linux_ver = {} - - # Тип профиля - cl_pass_type = {'mode':"w"} - - # Действие программы - cl_pass_run = {'mode':"w"} - + #Логин пользователя ur_login = {'mode':"w"} - + #Название группы пользователя ur_group = {'mode':"w"} - + #Полное имя пользователя ur_fullname = {'mode':"w"} + + # Действие программы + # profile - генерация профиля пользователя + # install / uninstall - установка и удаление программы + # domain / undomain - ввод и вывод из домена + + cl_pass_action = {'mode':"w"}