Modified DataVars

develop
Самоукин Алексей 14 years ago
parent 685d15f594
commit 5b2594c611

@ -20,6 +20,7 @@ import cl_utils
from cl_lang import lang from cl_lang import lang
from cl_template import iniParser from cl_template import iniParser
from cl_string import columnWrite from cl_string import columnWrite
import cl_overriding
# Перевод модуля на другой язык # Перевод модуля на другой язык
tr = lang() tr = lang()
@ -116,6 +117,8 @@ class DataVars(object):
#[(cекция,импортированный модуль переменных, объект заполнения),] #[(cекция,импортированный модуль переменных, объект заполнения),]
self._importList = [] self._importList = []
self.importData("Global") self.importData("Global")
# Переменные которые нужно записать
self.varsNeedWritten = []
def importData(self, section, modlist=[]): def importData(self, section, modlist=[]):
"""Импортирует модули с переменными и модули с функциями заполнения """Импортирует модули с переменными и модули с функциями заполнения
@ -252,7 +255,7 @@ class DataVars(object):
self.__setattr__(nameVar, varobj) self.__setattr__(nameVar, varobj)
if self.__dict__.has_key(nameVar): if self.__dict__.has_key(nameVar):
if not force and "r" in getattr(self, nameVar).mode: 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 %nameVar
return False return False
self.__getattribute__(nameVar).fillStart = False self.__getattribute__(nameVar).fillStart = False
@ -261,6 +264,25 @@ class DataVars(object):
def Set(self, nameVar, value, force=False): def Set(self, nameVar, value, force=False):
return self.__Set(nameVar, value, force) 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): def __frame(self, lVar):
"""получить список областей зависимости переменных""" """получить список областей зависимости переменных"""
data = [] data = []
@ -298,9 +320,18 @@ class DataVars(object):
links[name][nm] = "" links[name][nm] = ""
return links return links
def __getPathCalculateIni(self): def __getPathCalculateIni(self, location):
"""Получить пути до ini файлов""" """Получить путь к ini файлу по алиасу пути"""
return self.Get('cl_env_path') 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): def __getSection(self, vname):
"""секция для записи в ini файл переменной """секция для записи в ini файл переменной
@ -326,17 +357,8 @@ class DataVars(object):
True запись успешна True запись успешна
False запись не удалсь False запись не удалсь
''' '''
# получаем все пути до ini файлов # получаем путь до ini файла
calculate_ini = self.__getPathCalculateIni() name_calculate_ini = self.__getPathCalculateIni(location)
# получаем полный путь до файла 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
# извлекаем из полного имени файла путь # извлекаем из полного имени файла путь
onlydir = os.path.split(name_calculate_ini)[0] onlydir = os.path.split(name_calculate_ini)[0]
try: try:
@ -364,17 +386,8 @@ class DataVars(object):
True удалено успешна True удалено успешна
False удаление не удалсь False удаление не удалсь
''' '''
# получаем все пути до ini файлов # получаем путь до ini файла
calculate_ini = self.__getPathCalculateIni() name_calculate_ini = self.__getPathCalculateIni(location)
# получаем полный путь до файла 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
# извлекаем из полного имени файла путь # извлекаем из полного имени файла путь
onlydir = os.path.split(name_calculate_ini)[0] onlydir = os.path.split(name_calculate_ini)[0]
# проверяем чтобы путь до ини файла существовал # проверяем чтобы путь до ини файла существовал
@ -443,13 +456,14 @@ class DataVars(object):
''' '''
#Cловарь переменных из ini файлов #Cловарь переменных из ini файлов
importVars = {} importVars = {}
calculate_ini = self.__getPathCalculateIni() calculate_ini_files = self.Get('cl_env_path')
# активные секции (секции из которых будут использованы переменные) # активные секции (секции из которых будут использованы переменные)
act_section = self.__getActiveSections() act_section = self.__getActiveSections()
set_act_section = set(act_section) set_act_section = set(act_section)
i = 0 i = 0
locations = ['remote','local','default'] # Алиасы к путям env
for name_calculate_ini in calculate_ini: locations = self.Get('cl_env_location')
for name_calculate_ini in calculate_ini_files:
# проверить сущестование ini файла # проверить сущестование ini файла
if os.path.exists(name_calculate_ini): if os.path.exists(name_calculate_ini):
# получить объект настроенный на ini # получить объект настроенный на ini
@ -482,13 +496,14 @@ class DataVars(object):
return importVars return importVars
#def defined(self, vname):
#if vname:
#if self.__dict__.has_key(vname):
#return True
#return False
def defined(self, vname): 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(): for i,j in var.items():
if len(i)>mlen_name: if len(i)>mlen_name:
mlen_name=len(i) 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 not '[' in var[i].mode:
if vtype in ['d','l']: mode="[%s]"%(var[i].mode.lower())
mode="[%s%s]"%(var[i].mode.lower(),vtype)
else:
mode="[%s]"%(var[i].mode.lower())
var[i].mode=mode var[i].mode=mode
if len(mode)>mlen_mode: if len(mode)>mlen_mode:
mlen_mode=len(mode) mlen_mode=len(mode)
@ -552,26 +561,15 @@ class DataVars(object):
plist.sort() plist.sort()
br = cl_utils.fillstr("-",mlen_name) + " " +\ br = cl_utils.fillstr("-",mlen_name) + " " +\
cl_utils.fillstr("-",mlen_mode) + " " + cl_utils.fillstr("-",10) cl_utils.fillstr("-",mlen_mode) + " " + cl_utils.fillstr("-",10)
#cl_utils.fillstr("-",mlen_type) + " " +\
print "The list of variables:" print "The list of variables:"
print "var name".center(mlen_name),\ print "var name".center(mlen_name),\
"Mode","Value" "Mode","Value"
#"Type".center(mlen_type),\
print br print br
for i in plist: for i in plist:
#if var[i].value is None:
#continue
p_val=var[i].value p_val=var[i].value
if var[i].official: if var[i].official:
continue continue
columnWrite( i, mlen_name, var[i].mode.lower(), columnWrite( i, mlen_name, var[i].mode.lower(), mlen_mode, p_val)
mlen_mode,
#str(var[i].type),
#mlen_type,
p_val)
print br print br
class glob_attr: class glob_attr:

@ -20,6 +20,7 @@ import types
import filecmp import filecmp
import pwd, grp import pwd, grp
import cl_datavars import cl_datavars
import cl_overriding
class clLocale: class clLocale:
lang = { lang = {
@ -210,13 +211,31 @@ def getdirlist(s_path):
class fillVars(object, cl_datavars.glob_attr): 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): def get_os_net_domain(self):
''' Определим домен''' '''Определим домен'''
domain=self._runos("hostname -d 2>&1") domain=self._runos("hostname -d 2>&1")
if not domain: if not domain:
print _("Error:") + " " +_("Not found domain name") print _("Error:") + " " +_("Not found domain name")
print _("Command 'hostname -d' returns an empty value") print _("Command 'hostname -d' returns an empty value")
cl_base.exit(1) cl_overriding.exit(1)
elif re.search("^hostname: ",domain): elif re.search("^hostname: ",domain):
return "local" return "local"
else: else:

@ -36,10 +36,17 @@ class Data:
#домен #домен
os_net_domain = {'mode':"w"} os_net_domain = {'mode':"w"}
# Пути к ini файлам # Алиасы и пути к ini файлам
cl_env_path = {'value':['/var/calculate/remote/calculate.env', cl_env_data = {'official':True,
'/var/calculate/calculate.env', 'value':[('default', '/etc/calculate/calculate.env'),
'/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) # локаль (прим: ru_RU.UTF-8)
os_locale_locale = {} os_locale_locale = {}
@ -101,18 +108,19 @@ class Data:
# версия системы # версия системы
os_linux_ver = {} os_linux_ver = {}
# Тип профиля
cl_pass_type = {'mode':"w"}
# Действие программы
cl_pass_run = {'mode':"w"}
#Логин пользователя #Логин пользователя
ur_login = {'mode':"w"} ur_login = {'mode':"w"}
#Название группы пользователя #Название группы пользователя
ur_group = {'mode':"w"} ur_group = {'mode':"w"}
#Полное имя пользователя #Полное имя пользователя
ur_fullname = {'mode':"w"} ur_fullname = {'mode':"w"}
# Действие программы
# profile - генерация профиля пользователя
# install / uninstall - установка и удаление программы
# domain / undomain - ввод и вывод из домена
cl_pass_action = {'mode':"w"}

Loading…
Cancel
Save