|
|
@ -31,7 +31,8 @@ from cl_ldap import ldapFun
|
|
|
|
# Переопределение exit
|
|
|
|
# Переопределение exit
|
|
|
|
import cl_overriding
|
|
|
|
import cl_overriding
|
|
|
|
|
|
|
|
|
|
|
|
from cl_utils import _error, _toUNICODE, getModeFile, removeDir, typeFile
|
|
|
|
from cl_utils import _error, _toUNICODE, getModeFile, removeDir, typeFile,\
|
|
|
|
|
|
|
|
scanDirectory
|
|
|
|
|
|
|
|
|
|
|
|
import cl_lang
|
|
|
|
import cl_lang
|
|
|
|
tr = cl_lang.lang()
|
|
|
|
tr = cl_lang.lang()
|
|
|
@ -289,8 +290,6 @@ class fileHeader(_terms):
|
|
|
|
allowParam = ["format", "format_conf", "comment", "append", "force",
|
|
|
|
allowParam = ["format", "format_conf", "comment", "append", "force",
|
|
|
|
"link", "mirror", "symbolic", "chmod", "chown", "name",
|
|
|
|
"link", "mirror", "symbolic", "chmod", "chown", "name",
|
|
|
|
"path"]
|
|
|
|
"path"]
|
|
|
|
# Корректность заголовка
|
|
|
|
|
|
|
|
headerCorrect = True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Тип шаблона
|
|
|
|
# Тип шаблона
|
|
|
|
fileType = ""
|
|
|
|
fileType = ""
|
|
|
@ -310,11 +309,9 @@ class fileHeader(_terms):
|
|
|
|
listParNotVal = ("symbolic", "force", "mirror")
|
|
|
|
listParNotVal = ("symbolic", "force", "mirror")
|
|
|
|
# Результат вычисления условия в заголовке
|
|
|
|
# Результат вычисления условия в заголовке
|
|
|
|
headerTerm = True
|
|
|
|
headerTerm = True
|
|
|
|
# Сообщение о ошибке
|
|
|
|
|
|
|
|
errorMessage = ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __init__(self, text, comment=False, fileType=False, objVar=False,
|
|
|
|
def __init__(self, templateName, text, comment=False, fileType=False,
|
|
|
|
function=False):
|
|
|
|
objVar=False, function=False):
|
|
|
|
self.body = text
|
|
|
|
self.body = text
|
|
|
|
# Объект с переменными
|
|
|
|
# Объект с переменными
|
|
|
|
self.objVar=objVar
|
|
|
|
self.objVar=objVar
|
|
|
@ -388,14 +385,17 @@ class fileHeader(_terms):
|
|
|
|
for term in self.terms:
|
|
|
|
for term in self.terms:
|
|
|
|
if term in i:
|
|
|
|
if term in i:
|
|
|
|
foundTerm = True
|
|
|
|
foundTerm = True
|
|
|
|
|
|
|
|
errorMsg = _("Incorrect template") +\
|
|
|
|
|
|
|
|
": "+ templateName +"\n"+\
|
|
|
|
|
|
|
|
_("header template not valid")+\
|
|
|
|
|
|
|
|
": "+ i
|
|
|
|
if function:
|
|
|
|
if function:
|
|
|
|
rezTerm = self._equalTerm(i,\
|
|
|
|
rezTerm = self._equalTerm(i,
|
|
|
|
_("header template not valid: ") + \
|
|
|
|
errorMsg,
|
|
|
|
i,function)
|
|
|
|
function)
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
rezTerm = self._equalTerm(i,\
|
|
|
|
rezTerm = self._equalTerm(i,
|
|
|
|
_("header template not valid: ") + \
|
|
|
|
errorMsg)
|
|
|
|
i)
|
|
|
|
|
|
|
|
if not rezTerm:
|
|
|
|
if not rezTerm:
|
|
|
|
self.headerTerm = False
|
|
|
|
self.headerTerm = False
|
|
|
|
break
|
|
|
|
break
|
|
|
@ -421,9 +421,8 @@ class fileHeader(_terms):
|
|
|
|
incorrectParams = set(self.params.keys()) - set(self.allowParam)
|
|
|
|
incorrectParams = set(self.params.keys()) - set(self.allowParam)
|
|
|
|
if incorrectParams:
|
|
|
|
if incorrectParams:
|
|
|
|
self.headerTerm = False
|
|
|
|
self.headerTerm = False
|
|
|
|
self.headerCorrect = False
|
|
|
|
self.setError(_("incorrect header parameters - '%s'")\
|
|
|
|
self.errorMessage = _("incorrect header parameters - '%s'")\
|
|
|
|
%" ".join(list(incorrectParams)))
|
|
|
|
% " ".join(list(incorrectParams))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _getType(self):
|
|
|
|
def _getType(self):
|
|
|
|
"""Выдать тип файла"""
|
|
|
|
"""Выдать тип файла"""
|
|
|
@ -459,23 +458,23 @@ class dirHeader(_terms):
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
# Допустимые параметры заголовка
|
|
|
|
# Допустимые параметры заголовка
|
|
|
|
allowParam = ["append", "chmod", "chown", "name", "path"]
|
|
|
|
allowParam = ["append", "chmod", "chown", "name", "path"]
|
|
|
|
# Корректность заголовка
|
|
|
|
|
|
|
|
headerCorrect = True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Тип вставки шаблона
|
|
|
|
# Тип вставки шаблона
|
|
|
|
typeAppend = ""
|
|
|
|
typeAppend = ""
|
|
|
|
|
|
|
|
|
|
|
|
# Возможные типы вставки шаблонов
|
|
|
|
# Возможные типы вставки шаблонов
|
|
|
|
_fileAppend = "join", "remove", "skip"
|
|
|
|
_fileAppend = "join", "remove", "skip"
|
|
|
|
|
|
|
|
|
|
|
|
# условные операторы
|
|
|
|
# условные операторы
|
|
|
|
terms = ('>', '<', '==', '!=', '>=', '<=')
|
|
|
|
terms = ('>', '<', '==', '!=', '>=', '<=')
|
|
|
|
|
|
|
|
|
|
|
|
# параметры без значения
|
|
|
|
# параметры без значения
|
|
|
|
listParNotVal = ("symbolic", "force")
|
|
|
|
listParNotVal = ("symbolic", "force")
|
|
|
|
|
|
|
|
|
|
|
|
# Результат вычисления условия в заголовке
|
|
|
|
# Результат вычисления условия в заголовке
|
|
|
|
headerTerm = True
|
|
|
|
headerTerm = True
|
|
|
|
# Сообщение о ошибке
|
|
|
|
|
|
|
|
errorMessage = ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __init__(self, text, objVar=False, function=False):
|
|
|
|
def __init__(self, templateName, text, objVar=False, function=False):
|
|
|
|
self.body = text
|
|
|
|
self.body = text
|
|
|
|
# Объект с переменными
|
|
|
|
# Объект с переменными
|
|
|
|
self.objVar=objVar
|
|
|
|
self.objVar=objVar
|
|
|
@ -508,9 +507,8 @@ class dirHeader(_terms):
|
|
|
|
self.body = ""
|
|
|
|
self.body = ""
|
|
|
|
if self.body.strip():
|
|
|
|
if self.body.strip():
|
|
|
|
self.headerTerm = False
|
|
|
|
self.headerTerm = False
|
|
|
|
self.headerCorrect = False
|
|
|
|
self.setError(_("incorrect text in template: '%s'")\
|
|
|
|
self.errorMessage = _("incorrect text in template: '%s'")\
|
|
|
|
%self.body)
|
|
|
|
%self.body
|
|
|
|
|
|
|
|
flagErrorBody = True
|
|
|
|
flagErrorBody = True
|
|
|
|
if not flagErrorBody:
|
|
|
|
if not flagErrorBody:
|
|
|
|
paramList = re.split("\s+",paramLine)
|
|
|
|
paramList = re.split("\s+",paramLine)
|
|
|
@ -520,14 +518,14 @@ class dirHeader(_terms):
|
|
|
|
for term in self.terms:
|
|
|
|
for term in self.terms:
|
|
|
|
if term in i:
|
|
|
|
if term in i:
|
|
|
|
foundTerm = True
|
|
|
|
foundTerm = True
|
|
|
|
|
|
|
|
errorMsg = _("Incorrect template") +\
|
|
|
|
|
|
|
|
": "+ templateName +"\n"+\
|
|
|
|
|
|
|
|
_("header template not valid")+ ": "+ i
|
|
|
|
if function:
|
|
|
|
if function:
|
|
|
|
rezTerm = self._equalTerm(i,\
|
|
|
|
rezTerm = self._equalTerm(i, errorMsg,
|
|
|
|
_("header template not valid: ") + \
|
|
|
|
function)
|
|
|
|
i,function)
|
|
|
|
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
rezTerm = self._equalTerm(i,\
|
|
|
|
rezTerm = self._equalTerm(i, errorMsg)
|
|
|
|
_("header template not valid: ") + \
|
|
|
|
|
|
|
|
i)
|
|
|
|
|
|
|
|
if not rezTerm:
|
|
|
|
if not rezTerm:
|
|
|
|
self.headerTerm = False
|
|
|
|
self.headerTerm = False
|
|
|
|
break
|
|
|
|
break
|
|
|
@ -547,9 +545,8 @@ class dirHeader(_terms):
|
|
|
|
incorrectParams = set(self.params.keys()) - set(self.allowParam)
|
|
|
|
incorrectParams = set(self.params.keys()) - set(self.allowParam)
|
|
|
|
if incorrectParams:
|
|
|
|
if incorrectParams:
|
|
|
|
self.headerTerm = False
|
|
|
|
self.headerTerm = False
|
|
|
|
self.headerCorrect = False
|
|
|
|
self.setError(_("incorrect header parameters - '%s'")\
|
|
|
|
self.errorMessage = _("incorrect header parameters - '%s'")\
|
|
|
|
%" ".join(list(incorrectParams)))
|
|
|
|
% " ".join(list(incorrectParams))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _getAppend(self):
|
|
|
|
def _getAppend(self):
|
|
|
|
"""Выдать тип добавления директории"""
|
|
|
|
"""Выдать тип добавления директории"""
|
|
|
@ -1885,11 +1882,11 @@ class _file(_error):
|
|
|
|
def __init__(self):
|
|
|
|
def __init__(self):
|
|
|
|
# Имя файла конфигурационного файла
|
|
|
|
# Имя файла конфигурационного файла
|
|
|
|
self.nameFileConfig = ""
|
|
|
|
self.nameFileConfig = ""
|
|
|
|
# Старый шаблон
|
|
|
|
# Содержимое конфигурационного файла
|
|
|
|
self.textConfig = ""
|
|
|
|
self.textConfig = ""
|
|
|
|
# Имя файла шаблона
|
|
|
|
# Имя файла шаблона
|
|
|
|
self.nameFileTemplate = ""
|
|
|
|
self.nameFileTemplate = ""
|
|
|
|
# Новый шаблон
|
|
|
|
# Содержимое шаблона
|
|
|
|
self.textTemplate = ""
|
|
|
|
self.textTemplate = ""
|
|
|
|
# Дескриптор файла шаблона
|
|
|
|
# Дескриптор файла шаблона
|
|
|
|
self.F_TEMPL = False
|
|
|
|
self.F_TEMPL = False
|
|
|
@ -1932,7 +1929,7 @@ class _file(_error):
|
|
|
|
self.F_CONF = False
|
|
|
|
self.F_CONF = False
|
|
|
|
|
|
|
|
|
|
|
|
def __openConfFile(self, nameFileConfig):
|
|
|
|
def __openConfFile(self, nameFileConfig):
|
|
|
|
"""Октрыть конфигурационный файл"""
|
|
|
|
"""Отктрыть конфигурационный файл"""
|
|
|
|
F_CONF = False
|
|
|
|
F_CONF = False
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
if os.path.islink(nameFileConfig):
|
|
|
|
if os.path.islink(nameFileConfig):
|
|
|
@ -1941,9 +1938,7 @@ class _file(_error):
|
|
|
|
F_CONF = open (nameFileConfig, "r+")
|
|
|
|
F_CONF = open (nameFileConfig, "r+")
|
|
|
|
except:
|
|
|
|
except:
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
fd = os.open(nameFileConfig, os.O_CREAT)
|
|
|
|
F_CONF = open(nameFileConfig, "w+")
|
|
|
|
os.close(fd)
|
|
|
|
|
|
|
|
F_CONF = open(nameFileConfig, "r+")
|
|
|
|
|
|
|
|
except:
|
|
|
|
except:
|
|
|
|
self.setError(_("not open file:" ) + nameFileConfig)
|
|
|
|
self.setError(_("not open file:" ) + nameFileConfig)
|
|
|
|
return False
|
|
|
|
return False
|
|
|
@ -2131,59 +2126,6 @@ class utfBin:
|
|
|
|
resS = reVar.search(textTemplateTmp)
|
|
|
|
resS = reVar.search(textTemplateTmp)
|
|
|
|
return textTemplateTmp
|
|
|
|
return textTemplateTmp
|
|
|
|
|
|
|
|
|
|
|
|
class scanDirectory:
|
|
|
|
|
|
|
|
"""Класс для cканирования директории"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def processingFile(self, path, prefix):
|
|
|
|
|
|
|
|
"""Обработка в случае файла"""
|
|
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def processingDirectory(self, path, prefix):
|
|
|
|
|
|
|
|
"""Обработка в случае директории если возвращаем None то пропуск дир."""
|
|
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def scanningDirectory(self, scanDir, skipFile=[], skipDir=[],
|
|
|
|
|
|
|
|
prefix=None, flagDir=False):
|
|
|
|
|
|
|
|
"""Сканирование и обработка шаблонов в директории scanDir"""
|
|
|
|
|
|
|
|
ret = True
|
|
|
|
|
|
|
|
if not prefix:
|
|
|
|
|
|
|
|
prefix = os.path.join(scanDir,"")[:-1]
|
|
|
|
|
|
|
|
if not flagDir:
|
|
|
|
|
|
|
|
# проверка корневой директории
|
|
|
|
|
|
|
|
retDir = self.processingDirectory(scanDir, scanDir)
|
|
|
|
|
|
|
|
if retDir is None:
|
|
|
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
elif retDir is False:
|
|
|
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
if flagDir or stat.S_ISDIR(os.lstat(scanDir)[stat.ST_MODE]):
|
|
|
|
|
|
|
|
for fileOrDir in sorted(os.listdir(scanDir)):
|
|
|
|
|
|
|
|
absPath = os.path.join(scanDir,fileOrDir)
|
|
|
|
|
|
|
|
relPath = absPath.split(prefix)[1]
|
|
|
|
|
|
|
|
stInfo = os.lstat(absPath)
|
|
|
|
|
|
|
|
statInfo = stInfo[stat.ST_MODE]
|
|
|
|
|
|
|
|
if stat.S_ISREG(statInfo):
|
|
|
|
|
|
|
|
# Обработка файла
|
|
|
|
|
|
|
|
if relPath in skipFile:
|
|
|
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
if not self.processingFile(absPath, prefix):
|
|
|
|
|
|
|
|
ret = False
|
|
|
|
|
|
|
|
break
|
|
|
|
|
|
|
|
elif stat.S_ISDIR(statInfo):
|
|
|
|
|
|
|
|
# Обработка директории
|
|
|
|
|
|
|
|
if relPath in skipDir:
|
|
|
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
retDir = self.processingDirectory(absPath, prefix)
|
|
|
|
|
|
|
|
if retDir is None:
|
|
|
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
elif retDir is False:
|
|
|
|
|
|
|
|
ret = False
|
|
|
|
|
|
|
|
break
|
|
|
|
|
|
|
|
ret = self.scanningDirectory(absPath, skipFile,
|
|
|
|
|
|
|
|
skipDir, prefix, True)
|
|
|
|
|
|
|
|
if ret is False:
|
|
|
|
|
|
|
|
break
|
|
|
|
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class templateFormat:
|
|
|
|
class templateFormat:
|
|
|
|
"""Методы получения классов и объектов форматов шаблонов"""
|
|
|
|
"""Методы получения классов и объектов форматов шаблонов"""
|
|
|
|
# Импортированные классы поддерживаемых форматов шаблонов
|
|
|
|
# Импортированные классы поддерживаемых форматов шаблонов
|
|
|
@ -2238,6 +2180,22 @@ class _shareTemplate:
|
|
|
|
_deltVarStart = len(varStart)
|
|
|
|
_deltVarStart = len(varStart)
|
|
|
|
_deltVarEnd = len(varEnd)
|
|
|
|
_deltVarEnd = len(varEnd)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getDataUser(self):
|
|
|
|
|
|
|
|
"""Получить информацию о пользователе"""
|
|
|
|
|
|
|
|
userName = self.objVar.Get("ur_login")
|
|
|
|
|
|
|
|
if not userName:
|
|
|
|
|
|
|
|
userName = "root"
|
|
|
|
|
|
|
|
import pwd
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
pwdObj = pwd.getpwnam(userName)
|
|
|
|
|
|
|
|
uid = pwdObj.pw_uid
|
|
|
|
|
|
|
|
gid = pwdObj.pw_gid
|
|
|
|
|
|
|
|
homeDir = pwdObj.pw_dir
|
|
|
|
|
|
|
|
except:
|
|
|
|
|
|
|
|
print _("Can not found user %s")%str(userName)
|
|
|
|
|
|
|
|
cl_overriding.exit(1)
|
|
|
|
|
|
|
|
return uid, gid, homeDir
|
|
|
|
|
|
|
|
|
|
|
|
class templateFunction(_error, _shareTemplate):
|
|
|
|
class templateFunction(_error, _shareTemplate):
|
|
|
|
"""Класс для функций шаблонов"""
|
|
|
|
"""Класс для функций шаблонов"""
|
|
|
|
# Словарь установленных программ {"имя программы":[версии]}
|
|
|
|
# Словарь установленных программ {"имя программы":[версии]}
|
|
|
@ -2296,6 +2254,8 @@ class templateFunction(_error, _shareTemplate):
|
|
|
|
self.namesTemplateFunction.append(nameFunction)
|
|
|
|
self.namesTemplateFunction.append(nameFunction)
|
|
|
|
# Объект хранения переменных
|
|
|
|
# Объект хранения переменных
|
|
|
|
self.objVar = objVar
|
|
|
|
self.objVar = objVar
|
|
|
|
|
|
|
|
# Базовая директория переноса шаблонов "/mnt/calculate" или "/" и.т.д
|
|
|
|
|
|
|
|
self._baseDir = self.objVar.Get("cl_root_path")
|
|
|
|
self._reFunc = re.compile(("%s[a-zA-Z0-9_\-\+\(\)\, \*\/\.\'\"~]+%s")\
|
|
|
|
self._reFunc = re.compile(("%s[a-zA-Z0-9_\-\+\(\)\, \*\/\.\'\"~]+%s")\
|
|
|
|
%(self.varStart,self.varEnd),re.M)
|
|
|
|
%(self.varStart,self.varEnd),re.M)
|
|
|
|
# Аттрибуты для функции шаблона ini()
|
|
|
|
# Аттрибуты для функции шаблона ini()
|
|
|
@ -2306,28 +2266,14 @@ class templateFunction(_error, _shareTemplate):
|
|
|
|
# Время модификации конфигурационного файла для ini()
|
|
|
|
# Время модификации конфигурационного файла для ini()
|
|
|
|
self.timeIni = -1
|
|
|
|
self.timeIni = -1
|
|
|
|
self.uid, self.gid, self.homeDir = self.getDataUser()
|
|
|
|
self.uid, self.gid, self.homeDir = self.getDataUser()
|
|
|
|
|
|
|
|
# Домашняя директория, плюс базовая директория
|
|
|
|
|
|
|
|
self.homeDir = os.path.join(self._baseDir, self.homeDir[1:])
|
|
|
|
# Путь к конфигурационному файлу для ini()
|
|
|
|
# Путь к конфигурационному файлу для ini()
|
|
|
|
self.pathConfigIni = os.path.join(self.homeDir, ".calculate")
|
|
|
|
self.pathConfigIni = os.path.join(self.homeDir, ".calculate")
|
|
|
|
self.fileConfigIni = os.path.join(self.pathConfigIni,"ini.env")
|
|
|
|
self.fileConfigIni = os.path.join(self.pathConfigIni,"ini.env")
|
|
|
|
# Словарь времен модификации env файлов
|
|
|
|
# Словарь времен модификации env файлов
|
|
|
|
self.timeConfigsIni = {}
|
|
|
|
self.timeConfigsIni = {}
|
|
|
|
|
|
|
|
|
|
|
|
def getDataUser(self):
|
|
|
|
|
|
|
|
"""Получить информацию о пользователе"""
|
|
|
|
|
|
|
|
userName = self.objVar.Get("ur_login")
|
|
|
|
|
|
|
|
if not userName:
|
|
|
|
|
|
|
|
userName = "root"
|
|
|
|
|
|
|
|
import pwd
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
pwdObj = pwd.getpwnam(userName)
|
|
|
|
|
|
|
|
uid = pwdObj.pw_uid
|
|
|
|
|
|
|
|
gid = pwdObj.pw_gid
|
|
|
|
|
|
|
|
homeDir = pwdObj.pw_dir
|
|
|
|
|
|
|
|
except:
|
|
|
|
|
|
|
|
print _("Can not found user %s")%str(userName)
|
|
|
|
|
|
|
|
cl_overriding.exit(1)
|
|
|
|
|
|
|
|
return uid, gid, homeDir
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def equalTerm(self, term, localVars):
|
|
|
|
def equalTerm(self, term, localVars):
|
|
|
|
"""Метод для вычисления выражения"""
|
|
|
|
"""Метод для вычисления выражения"""
|
|
|
|
terms = self.sNum.findall(term)
|
|
|
|
terms = self.sNum.findall(term)
|
|
|
@ -2745,7 +2691,7 @@ class templateFunction(_error, _shareTemplate):
|
|
|
|
# Создаем директорию
|
|
|
|
# Создаем директорию
|
|
|
|
if not os.path.exists(self.pathConfigIni):
|
|
|
|
if not os.path.exists(self.pathConfigIni):
|
|
|
|
os.makedirs(self.pathConfigIni)
|
|
|
|
os.makedirs(self.pathConfigIni)
|
|
|
|
os.chown(self.pathConfigIni, int(self.uid), int(self.gid))
|
|
|
|
os.chown(self.pathConfigIni, self.uid, self.gid)
|
|
|
|
termsRaw = funArgv.split(",")
|
|
|
|
termsRaw = funArgv.split(",")
|
|
|
|
flagFirst = True
|
|
|
|
flagFirst = True
|
|
|
|
terms = []
|
|
|
|
terms = []
|
|
|
@ -2876,13 +2822,9 @@ class templateFunction(_error, _shareTemplate):
|
|
|
|
self.timeIni = self.getTimeFile(self.fileConfigIni)
|
|
|
|
self.timeIni = self.getTimeFile(self.fileConfigIni)
|
|
|
|
# Меняем владельца в случае необходимости
|
|
|
|
# Меняем владельца в случае необходимости
|
|
|
|
if os.path.exists(self.fileConfigIni):
|
|
|
|
if os.path.exists(self.fileConfigIni):
|
|
|
|
fd = os.open(self.fileConfigIni, os.O_RDONLY)
|
|
|
|
uid, gid = getModeFile(self.fileConfigIni, "owner")
|
|
|
|
fst = os.fstat(fd)
|
|
|
|
|
|
|
|
uid = fst.st_uid
|
|
|
|
|
|
|
|
gid = fst.st_gid
|
|
|
|
|
|
|
|
os.close(fd)
|
|
|
|
|
|
|
|
if self.uid!=uid or self.gid!=gid:
|
|
|
|
if self.uid!=uid or self.gid!=gid:
|
|
|
|
os.chown(self.fileConfigIni, int(self.uid), int(self.gid))
|
|
|
|
os.chown(self.fileConfigIni, self.uid, self.gid)
|
|
|
|
return textTemplateTmp
|
|
|
|
return textTemplateTmp
|
|
|
|
|
|
|
|
|
|
|
|
class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
@ -2919,10 +2861,7 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
# Объект с переменными
|
|
|
|
# Объект с переменными
|
|
|
|
self.objVar = objVar
|
|
|
|
self.objVar = objVar
|
|
|
|
# Базовая директория переноса шаблонов "/mnt/calculate" или "/" и.т.д
|
|
|
|
# Базовая директория переноса шаблонов "/mnt/calculate" или "/" и.т.д
|
|
|
|
#self._baseDir = os.path.split(baseDir)[0]
|
|
|
|
|
|
|
|
self._baseDir = self.objVar.Get("cl_root_path")
|
|
|
|
self._baseDir = self.objVar.Get("cl_root_path")
|
|
|
|
#if self._baseDir == "/":
|
|
|
|
|
|
|
|
#self._baseDir = ""
|
|
|
|
|
|
|
|
# Последняя часть директории шаблона (имя сервиса: samba, mail)
|
|
|
|
# Последняя часть директории шаблона (имя сервиса: samba, mail)
|
|
|
|
self._servDir = servDir
|
|
|
|
self._servDir = servDir
|
|
|
|
if self._servDir:
|
|
|
|
if self._servDir:
|
|
|
@ -2953,6 +2892,9 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
self.applyFuncTemplate = self.functObj.applyFuncTemplate
|
|
|
|
self.applyFuncTemplate = self.functObj.applyFuncTemplate
|
|
|
|
# Объект для определения типа файла шаблона
|
|
|
|
# Объект для определения типа файла шаблона
|
|
|
|
self.typeFileObj = typeFile()
|
|
|
|
self.typeFileObj = typeFile()
|
|
|
|
|
|
|
|
self.uid, self.gid, self.homeDir = self.getDataUser()
|
|
|
|
|
|
|
|
# Домашняя директория, плюс базовая директория
|
|
|
|
|
|
|
|
self.homeDir = os.path.join(self._baseDir, self.homeDir[1:])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Преобразование восьмеричного в целое (ввод строка, вывод число)
|
|
|
|
# Преобразование восьмеричного в целое (ввод строка, вывод число)
|
|
|
@ -2994,7 +2936,7 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
createDirs.append(prevDir)
|
|
|
|
createDirs.append(prevDir)
|
|
|
|
prevDir = os.path.split(prevDir)[0]
|
|
|
|
prevDir = os.path.split(prevDir)[0]
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
tmpMode,dUid,dGid = getModeFile(prevDir)
|
|
|
|
dUid,dGid = getModeFile(prevDir,"owner")
|
|
|
|
except OSError:
|
|
|
|
except OSError:
|
|
|
|
self.setError(_("Not access dir: " ) + prevDir)
|
|
|
|
self.setError(_("Not access dir: " ) + prevDir)
|
|
|
|
return False
|
|
|
|
return False
|
|
|
@ -3330,10 +3272,7 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
# Применяем шаблон
|
|
|
|
# Применяем шаблон
|
|
|
|
pathDir, objHeadDir = self.__getApplyHeadDir(newDir, dirInfoFile, opt)
|
|
|
|
pathDir, objHeadDir = self.__getApplyHeadDir(newDir, dirInfoFile, opt)
|
|
|
|
if objHeadDir:
|
|
|
|
if objHeadDir:
|
|
|
|
crDirs = self.createDir(pathDir)
|
|
|
|
self.createdDirs += [pathDir]
|
|
|
|
if crDirs is False:
|
|
|
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
self.createdDirs += crDirs
|
|
|
|
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
if self.getError():
|
|
|
|
if self.getError():
|
|
|
|
return False
|
|
|
|
return False
|
|
|
@ -3376,16 +3315,11 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
# Заменяем переменные на их значения
|
|
|
|
# Заменяем переменные на их значения
|
|
|
|
textTemplate = self.applyVarsTemplate(textTemplate, templateDirFile)
|
|
|
|
textTemplate = self.applyVarsTemplate(textTemplate, templateDirFile)
|
|
|
|
# Обработка заголовка
|
|
|
|
# Обработка заголовка
|
|
|
|
objHead = dirHeader(textTemplate, self.objVar,function)
|
|
|
|
objHead = dirHeader(templateDirFile,textTemplate,self.objVar,function)
|
|
|
|
if not objHead.headerCorrect:
|
|
|
|
|
|
|
|
self.setError(_("Incorrect template: " ) +\
|
|
|
|
|
|
|
|
templateDirFile)
|
|
|
|
|
|
|
|
self.setError(objHead.errorMessage)
|
|
|
|
|
|
|
|
return (applyDir, False)
|
|
|
|
|
|
|
|
# Директория с профилями не будет применена
|
|
|
|
# Директория с профилями не будет применена
|
|
|
|
if not objHead.headerTerm:
|
|
|
|
if not objHead.headerTerm:
|
|
|
|
if objHead.getError():
|
|
|
|
if objHead.getError():
|
|
|
|
self.setError(_("Incorrect template: " ) +\
|
|
|
|
self.setError(_("Incorrect template") + ": " +\
|
|
|
|
templateDirFile)
|
|
|
|
templateDirFile)
|
|
|
|
return (applyDir, False)
|
|
|
|
return (applyDir, False)
|
|
|
|
|
|
|
|
|
|
|
@ -3480,6 +3414,16 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
self.setError(_("False value 'chown' in template: " ) +\
|
|
|
|
self.setError(_("False value 'chown' in template: " ) +\
|
|
|
|
templateDirFile)
|
|
|
|
templateDirFile)
|
|
|
|
return (applyDir, False)
|
|
|
|
return (applyDir, False)
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
# Устанавливаем владельцем директории, пользователя по умолчанию
|
|
|
|
|
|
|
|
# (переменная шаблона ur_login)
|
|
|
|
|
|
|
|
if os.path.exists(applyDir):
|
|
|
|
|
|
|
|
tUid, tGid = getModeFile(applyDir, mode="owner")
|
|
|
|
|
|
|
|
if (self.uid, self.gid) != (tUid, tGid):
|
|
|
|
|
|
|
|
os.chown(applyDir, self.uid, self.gid)
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
if not self.createDir(applyDir, False, self.uid, self.gid):
|
|
|
|
|
|
|
|
return False
|
|
|
|
return (applyDir, objHead)
|
|
|
|
return (applyDir, objHead)
|
|
|
|
|
|
|
|
|
|
|
|
def __getApplyHeadTemplate(self, nameFileTemplate, nameFileConfig,
|
|
|
|
def __getApplyHeadTemplate(self, nameFileTemplate, nameFileConfig,
|
|
|
@ -3499,18 +3443,13 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
self.F_TEMPL = self.openTemplFile(self.nameFileTemplate)
|
|
|
|
self.F_TEMPL = self.openTemplFile(self.nameFileTemplate)
|
|
|
|
self.textTemplate = self.F_TEMPL.read()
|
|
|
|
self.textTemplate = self.F_TEMPL.read()
|
|
|
|
self.closeTemplFile()
|
|
|
|
self.closeTemplFile()
|
|
|
|
objHeadNew = fileHeader(self.textTemplate, False,
|
|
|
|
objHeadNew = fileHeader(nameFileTemplate, self.textTemplate, False,
|
|
|
|
templateFileType ,objVar=self.objVar,
|
|
|
|
templateFileType ,objVar=self.objVar,
|
|
|
|
function=function)
|
|
|
|
function=function)
|
|
|
|
if not objHeadNew.headerCorrect:
|
|
|
|
|
|
|
|
self.setError(_("Incorrect template: " ) +\
|
|
|
|
|
|
|
|
nameFileTemplate)
|
|
|
|
|
|
|
|
self.setError(objHeadNew.errorMessage)
|
|
|
|
|
|
|
|
return (applyFiles, False)
|
|
|
|
|
|
|
|
# файл шаблона не будет применен
|
|
|
|
# файл шаблона не будет применен
|
|
|
|
if not objHeadNew.headerTerm:
|
|
|
|
if not objHeadNew.headerTerm:
|
|
|
|
if objHeadNew.getError():
|
|
|
|
if objHeadNew.getError():
|
|
|
|
self.setError(_("Incorrect template: " ) +\
|
|
|
|
self.setError(_("Incorrect template") + ": " +\
|
|
|
|
nameFileTemplate)
|
|
|
|
nameFileTemplate)
|
|
|
|
return (applyFiles, False)
|
|
|
|
return (applyFiles, False)
|
|
|
|
|
|
|
|
|
|
|
@ -3545,9 +3484,9 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
realPath = os.path.join("/",pathOldFile.partition(self._baseDir)[2])
|
|
|
|
realPath = os.path.join("/",pathOldFile.partition(self._baseDir)[2])
|
|
|
|
if realPath in self.filesFilter:
|
|
|
|
if realPath in self.filesFilter:
|
|
|
|
return (applyFiles, False)
|
|
|
|
return (applyFiles, False)
|
|
|
|
|
|
|
|
typeAppendTemplate = objHeadNew.typeAppend
|
|
|
|
# Удаляем оригинальный файл
|
|
|
|
# Удаляем оригинальный файл
|
|
|
|
if objHeadNew.typeAppend == "remove":
|
|
|
|
if typeAppendTemplate == "remove":
|
|
|
|
if os.path.islink(pathOldFile):
|
|
|
|
if os.path.islink(pathOldFile):
|
|
|
|
# удаляем ссылку
|
|
|
|
# удаляем ссылку
|
|
|
|
try:
|
|
|
|
try:
|
|
|
@ -3564,7 +3503,7 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
pathOldFile)
|
|
|
|
pathOldFile)
|
|
|
|
return (applyFiles, False)
|
|
|
|
return (applyFiles, False)
|
|
|
|
# Пропускаем обработку шаблона
|
|
|
|
# Пропускаем обработку шаблона
|
|
|
|
elif objHeadNew.typeAppend == "skip":
|
|
|
|
elif typeAppendTemplate == "skip":
|
|
|
|
return (applyFiles, False)
|
|
|
|
return (applyFiles, False)
|
|
|
|
|
|
|
|
|
|
|
|
# Создаем директорию для файла если ее нет
|
|
|
|
# Создаем директорию для файла если ее нет
|
|
|
@ -3615,18 +3554,30 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
if os.path.exists(pathOldFile):
|
|
|
|
if os.path.exists(pathOldFile):
|
|
|
|
os.remove(pathOldFile)
|
|
|
|
os.remove(pathOldFile)
|
|
|
|
if foundTemplateFile:
|
|
|
|
if foundTemplateFile:
|
|
|
|
fd = os.open(pathOldFile, os.O_CREAT)
|
|
|
|
try:
|
|
|
|
os.close(fd)
|
|
|
|
FD = open(pathOldFile, "w+")
|
|
|
|
|
|
|
|
FD.write(buff)
|
|
|
|
|
|
|
|
FD.close()
|
|
|
|
|
|
|
|
except:
|
|
|
|
|
|
|
|
self.setError(_("Error in template: " ) +\
|
|
|
|
|
|
|
|
nameFileTemplate)
|
|
|
|
|
|
|
|
self.setError(_("Can not create file") + " '%s'"\
|
|
|
|
|
|
|
|
%pathOldFile)
|
|
|
|
|
|
|
|
return (applyFiles, False)
|
|
|
|
oMode, oUid, oGid = getModeFile(pathOldFile)
|
|
|
|
oMode, oUid, oGid = getModeFile(pathOldFile)
|
|
|
|
# Если права не совпадают, меняем права
|
|
|
|
# Если права не совпадают, меняем права
|
|
|
|
if fMode != oMode:
|
|
|
|
if fMode != oMode:
|
|
|
|
os.chmod(pathOldFile, fMode)
|
|
|
|
os.chmod(pathOldFile, fMode)
|
|
|
|
# Если владелец не совпадает, меняем владельца
|
|
|
|
# Если владелец не совпадает, меняем владельца
|
|
|
|
if (fUid, fGid) != (oUid, oGid):
|
|
|
|
if (fUid, fGid) != (oUid, oGid):
|
|
|
|
|
|
|
|
try:
|
|
|
|
os.chown(pathOldFile, fUid, fGid)
|
|
|
|
os.chown(pathOldFile, fUid, fGid)
|
|
|
|
FD = open(pathOldFile, "r+")
|
|
|
|
except:
|
|
|
|
FD.write(buff)
|
|
|
|
self.setError(_("Error in template: " ) +\
|
|
|
|
FD.close()
|
|
|
|
nameFileTemplate)
|
|
|
|
|
|
|
|
self.setError(_("Can not change owner to file") + \
|
|
|
|
|
|
|
|
" '%s'" %pathOldFile)
|
|
|
|
|
|
|
|
return (applyFiles, False)
|
|
|
|
|
|
|
|
|
|
|
|
# Если символическая ссылка
|
|
|
|
# Если символическая ссылка
|
|
|
|
if objHeadNew.params.has_key("symbolic"):
|
|
|
|
if objHeadNew.params.has_key("symbolic"):
|
|
|
@ -3643,8 +3594,9 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
mode = self.__octToInt(objHeadNew.params['chmod'])
|
|
|
|
mode = self.__octToInt(objHeadNew.params['chmod'])
|
|
|
|
if mode:
|
|
|
|
if mode:
|
|
|
|
if not os.path.exists(pathOldFile):
|
|
|
|
if not os.path.exists(pathOldFile):
|
|
|
|
fd = os.open(pathOldFile, os.O_CREAT)
|
|
|
|
# Создание файла
|
|
|
|
os.close(fd)
|
|
|
|
FD = open(pathOldFile, "w")
|
|
|
|
|
|
|
|
FD.close()
|
|
|
|
os.chmod(pathOldFile, mode)
|
|
|
|
os.chmod(pathOldFile, mode)
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
self.setError(_("False value 'chmod' in template: " ) +\
|
|
|
|
self.setError(_("False value 'chmod' in template: " ) +\
|
|
|
@ -3674,8 +3626,9 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
return (applyFiles, False)
|
|
|
|
return (applyFiles, False)
|
|
|
|
|
|
|
|
|
|
|
|
if not os.path.exists(pathOldFile):
|
|
|
|
if not os.path.exists(pathOldFile):
|
|
|
|
fd = os.open(pathOldFile, os.O_CREAT)
|
|
|
|
# Создание файла
|
|
|
|
os.close(fd)
|
|
|
|
FD = open(pathOldFile, "w")
|
|
|
|
|
|
|
|
FD.close()
|
|
|
|
os.chown(pathOldFile, uid, gid)
|
|
|
|
os.chown(pathOldFile, uid, gid)
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
self.setError(_("False value 'chown' in template: " ) +\
|
|
|
|
self.setError(_("False value 'chown' in template: " ) +\
|
|
|
@ -3685,7 +3638,14 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
self.setError(_("False value 'chown' in template: " ) +\
|
|
|
|
self.setError(_("False value 'chown' in template: " ) +\
|
|
|
|
nameFileTemplate)
|
|
|
|
nameFileTemplate)
|
|
|
|
return (applyFiles, False)
|
|
|
|
return (applyFiles, False)
|
|
|
|
|
|
|
|
|
|
|
|
self.openFiles(nameFileTemplate, pathOldFile)
|
|
|
|
self.openFiles(nameFileTemplate, pathOldFile)
|
|
|
|
|
|
|
|
if not objHeadNew.params.has_key("chown"):
|
|
|
|
|
|
|
|
# Устанавливаем владельцем конфигурационного файла,
|
|
|
|
|
|
|
|
# пользователя по умолчанию (переменная шаблона ur_login)
|
|
|
|
|
|
|
|
tUid, tGid = getModeFile(pathOldFile, mode="owner")
|
|
|
|
|
|
|
|
if (self.uid, self.gid) != (tUid, tGid):
|
|
|
|
|
|
|
|
os.chown(pathOldFile, self.uid, self.gid)
|
|
|
|
if flagSymlink:
|
|
|
|
if flagSymlink:
|
|
|
|
if os.path.exists(prevOldFile) or os.path.islink(prevOldFile):
|
|
|
|
if os.path.exists(prevOldFile) or os.path.islink(prevOldFile):
|
|
|
|
if os.path.islink(prevOldFile):
|
|
|
|
if os.path.islink(prevOldFile):
|
|
|
@ -3707,7 +3667,7 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
if pathProg:
|
|
|
|
if pathProg:
|
|
|
|
os.chdir(pathProg)
|
|
|
|
os.chdir(pathProg)
|
|
|
|
# Если файлы заменяются не нужно их обрабатывать дальше
|
|
|
|
# Если файлы заменяются не нужно их обрабатывать дальше
|
|
|
|
if objHeadNew.typeAppend == "replace" and\
|
|
|
|
if typeAppendTemplate == "replace" and\
|
|
|
|
not objHeadNew.params.has_key("symbolic") and\
|
|
|
|
not objHeadNew.params.has_key("symbolic") and\
|
|
|
|
objHeadNew.params.has_key("link"):
|
|
|
|
objHeadNew.params.has_key("link"):
|
|
|
|
return (applyFiles, False)
|
|
|
|
return (applyFiles, False)
|
|
|
@ -3786,6 +3746,8 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
optFile)
|
|
|
|
optFile)
|
|
|
|
if not objHeadNew:
|
|
|
|
if not objHeadNew:
|
|
|
|
return filesApply
|
|
|
|
return filesApply
|
|
|
|
|
|
|
|
# Настоящее имя конфигурационного файла
|
|
|
|
|
|
|
|
nameFileConfig = filesApply[0]
|
|
|
|
# Флаг - кодировка с бинарными примесями у файла шаблона включаем при
|
|
|
|
# Флаг - кодировка с бинарными примесями у файла шаблона включаем при
|
|
|
|
# условии текстового файла и кодировки отличной от UTF-8
|
|
|
|
# условии текстового файла и кодировки отличной от UTF-8
|
|
|
|
flagNotUtf8New = False
|
|
|
|
flagNotUtf8New = False
|
|
|
@ -3801,10 +3763,6 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
if not self.fileIsUtf(nameFileConfig):
|
|
|
|
if not self.fileIsUtf(nameFileConfig):
|
|
|
|
flagNotUtf8Old = True
|
|
|
|
flagNotUtf8Old = True
|
|
|
|
self.textTemplate = objHeadNew.body
|
|
|
|
self.textTemplate = objHeadNew.body
|
|
|
|
#if objHeadNew.fileType != "bin":
|
|
|
|
|
|
|
|
#self.textTemplate = self.applyTermsTemplate(self.textTemplate,
|
|
|
|
|
|
|
|
#nameFileTemplate)
|
|
|
|
|
|
|
|
#self.textTemplate = self.applyVarsTemplate(self.textTemplate)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Титл конфигурационного файла
|
|
|
|
# Титл конфигурационного файла
|
|
|
|
title = ""
|
|
|
|
title = ""
|
|
|
@ -3815,33 +3773,34 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
|
|
|
|
|
|
|
|
objHeadOld = False
|
|
|
|
objHeadOld = False
|
|
|
|
if objHeadNew.comment:
|
|
|
|
if objHeadNew.comment:
|
|
|
|
objHeadOld = fileHeader(self.textConfig, objHeadNew.comment)
|
|
|
|
objHeadOld = fileHeader(nameFileConfig, self.textConfig,
|
|
|
|
# Тестирование
|
|
|
|
objHeadNew.comment)
|
|
|
|
#print self.nameFileConfig
|
|
|
|
|
|
|
|
#print objHeadNew.typeAppend
|
|
|
|
|
|
|
|
if objHeadNew.fileType:
|
|
|
|
if objHeadNew.fileType:
|
|
|
|
|
|
|
|
formatTemplate = objHeadNew.fileType
|
|
|
|
|
|
|
|
typeAppendTemplate = objHeadNew.typeAppend
|
|
|
|
# Создаем объект в случае параметра format в заголовке
|
|
|
|
# Создаем объект в случае параметра format в заголовке
|
|
|
|
if (objHeadNew.typeAppend == "replace" or\
|
|
|
|
if (typeAppendTemplate == "replace" or\
|
|
|
|
objHeadNew.typeAppend == "before" or\
|
|
|
|
typeAppendTemplate == "before" or\
|
|
|
|
objHeadNew.typeAppend == "after") and\
|
|
|
|
typeAppendTemplate == "after") and\
|
|
|
|
not (objHeadNew.fileType == "bin" or\
|
|
|
|
not (formatTemplate == "bin" or\
|
|
|
|
objHeadNew.fileType == "raw"):
|
|
|
|
formatTemplate == "raw"):
|
|
|
|
# Преобразовываем бинарные файлы
|
|
|
|
# Преобразовываем бинарные файлы
|
|
|
|
if flagNotUtf8New:
|
|
|
|
if flagNotUtf8New:
|
|
|
|
objTxtCoder = utfBin()
|
|
|
|
objTxtCoder = utfBin()
|
|
|
|
self.textTemplate = objTxtCoder.encode(self.textTemplate)
|
|
|
|
self.textTemplate = objTxtCoder.encode(self.textTemplate)
|
|
|
|
# создаем объект формата шаблона
|
|
|
|
# создаем объект формата шаблона
|
|
|
|
objTemplNew = self.getFormatObj(objHeadNew.fileType,
|
|
|
|
objTemplNew = self.getFormatObj(formatTemplate,
|
|
|
|
self.textTemplate)
|
|
|
|
self.textTemplate)
|
|
|
|
if not objTemplNew:
|
|
|
|
if not objTemplNew:
|
|
|
|
self.setError(\
|
|
|
|
self.setError(\
|
|
|
|
_("Incorrect header parmeter format=%s in template")\
|
|
|
|
_("Incorrect header parmeter format=%s in template")\
|
|
|
|
%formatTemplate + " " + nameFileTemplate)
|
|
|
|
%formatTemplate + " " + nameFileTemplate)
|
|
|
|
return False
|
|
|
|
return False
|
|
|
|
if "xml_" in objHeadNew.fileType:
|
|
|
|
if "xml_" in formatTemplate:
|
|
|
|
if objTemplNew.getError():
|
|
|
|
if objTemplNew.getError():
|
|
|
|
self.setError(_("False template: " ) + nameFileTemplate)
|
|
|
|
self.setError(_("False template: " ) + nameFileTemplate)
|
|
|
|
return False
|
|
|
|
return False
|
|
|
|
|
|
|
|
# Имя файла внутри xml xfce конфигурационных файлов
|
|
|
|
nameRootNode=nameFileConfig.rpartition("/")[2].split(".")[0]
|
|
|
|
nameRootNode=nameFileConfig.rpartition("/")[2].split(".")[0]
|
|
|
|
objTemplNew.setNameBodyNode(nameRootNode)
|
|
|
|
objTemplNew.setNameBodyNode(nameRootNode)
|
|
|
|
# Объект Документ
|
|
|
|
# Объект Документ
|
|
|
@ -3866,8 +3825,8 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
ListOptTitle)
|
|
|
|
ListOptTitle)
|
|
|
|
title = title.encode("UTF-8")
|
|
|
|
title = title.encode("UTF-8")
|
|
|
|
# Замена
|
|
|
|
# Замена
|
|
|
|
if objHeadNew.typeAppend == "replace":
|
|
|
|
if typeAppendTemplate == "replace":
|
|
|
|
if "xml_" in objHeadNew.fileType:
|
|
|
|
if "xml_" in formatTemplate:
|
|
|
|
data = self.textTemplate.split("\n")
|
|
|
|
data = self.textTemplate.split("\n")
|
|
|
|
data.insert(1,title)
|
|
|
|
data.insert(1,title)
|
|
|
|
self.textConfig = "\n".join(data)
|
|
|
|
self.textConfig = "\n".join(data)
|
|
|
@ -3880,8 +3839,8 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
self.saveConfFile()
|
|
|
|
self.saveConfFile()
|
|
|
|
return filesApply
|
|
|
|
return filesApply
|
|
|
|
# Впереди
|
|
|
|
# Впереди
|
|
|
|
elif objHeadNew.typeAppend == "before":
|
|
|
|
elif typeAppendTemplate == "before":
|
|
|
|
if "xml_" in objHeadNew.fileType:
|
|
|
|
if "xml_" in formatTemplate:
|
|
|
|
self.setError(\
|
|
|
|
self.setError(\
|
|
|
|
_("False option append=before in template %s")\
|
|
|
|
_("False option append=before in template %s")\
|
|
|
|
%nameFileTemplate)
|
|
|
|
%nameFileTemplate)
|
|
|
@ -3903,8 +3862,8 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
self.saveConfFile()
|
|
|
|
self.saveConfFile()
|
|
|
|
return filesApply
|
|
|
|
return filesApply
|
|
|
|
# Cзади
|
|
|
|
# Cзади
|
|
|
|
elif objHeadNew.typeAppend == "after":
|
|
|
|
elif typeAppendTemplate == "after":
|
|
|
|
if "xml_" in objHeadNew.fileType:
|
|
|
|
if "xml_" in formatTemplate:
|
|
|
|
self.setError(\
|
|
|
|
self.setError(\
|
|
|
|
_("False option append=after in template %s")\
|
|
|
|
_("False option append=after in template %s")\
|
|
|
|
%nameFileTemplate)
|
|
|
|
%nameFileTemplate)
|
|
|
@ -3924,19 +3883,19 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
self.saveConfFile()
|
|
|
|
self.saveConfFile()
|
|
|
|
return filesApply
|
|
|
|
return filesApply
|
|
|
|
# Объединение
|
|
|
|
# Объединение
|
|
|
|
elif objHeadNew.typeAppend == "join":
|
|
|
|
elif typeAppendTemplate == "join":
|
|
|
|
if flagNotUtf8New:
|
|
|
|
if flagNotUtf8New:
|
|
|
|
objTxtCoder = utfBin()
|
|
|
|
objTxtCoder = utfBin()
|
|
|
|
self.textTemplate = objTxtCoder.encode(self.textTemplate)
|
|
|
|
self.textTemplate = objTxtCoder.encode(self.textTemplate)
|
|
|
|
# создаем объект формата шаблона
|
|
|
|
# создаем объект формата шаблона
|
|
|
|
objTemplNew = self.getFormatObj(objHeadNew.fileType,
|
|
|
|
objTemplNew = self.getFormatObj(formatTemplate,
|
|
|
|
self.textTemplate)
|
|
|
|
self.textTemplate)
|
|
|
|
if not objTemplNew:
|
|
|
|
if not objTemplNew:
|
|
|
|
self.setError(\
|
|
|
|
self.setError(\
|
|
|
|
_("Incorrect header parmeter format=%s in template")\
|
|
|
|
_("Incorrect header parmeter format=%s in template")\
|
|
|
|
%formatTemplate + " " + nameFileTemplate)
|
|
|
|
%formatTemplate + " " + nameFileTemplate)
|
|
|
|
return False
|
|
|
|
return False
|
|
|
|
if "xml_" in objHeadNew.fileType:
|
|
|
|
if "xml_" in formatTemplate:
|
|
|
|
if objTemplNew.getError():
|
|
|
|
if objTemplNew.getError():
|
|
|
|
self.setError(_("False template: " ) + nameFileTemplate)
|
|
|
|
self.setError(_("False template: " ) + nameFileTemplate)
|
|
|
|
return False
|
|
|
|
return False
|
|
|
@ -3962,7 +3921,8 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
#self.saveConfFile()
|
|
|
|
#self.saveConfFile()
|
|
|
|
#return True
|
|
|
|
#return True
|
|
|
|
|
|
|
|
|
|
|
|
objHeadOld = fileHeader(self.textConfig, objTemplNew._comment)
|
|
|
|
objHeadOld = fileHeader(nameFileConfig, self.textConfig,
|
|
|
|
|
|
|
|
objTemplNew._comment)
|
|
|
|
if objHeadOld.body:
|
|
|
|
if objHeadOld.body:
|
|
|
|
self.textConfig = objHeadOld.body
|
|
|
|
self.textConfig = objHeadOld.body
|
|
|
|
else:
|
|
|
|
else:
|
|
|
@ -3971,12 +3931,12 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
objTxtCoder = utfBin()
|
|
|
|
objTxtCoder = utfBin()
|
|
|
|
self.textConfig = objTxtCoder.encode(self.textConfig)
|
|
|
|
self.textConfig = objTxtCoder.encode(self.textConfig)
|
|
|
|
# создаем объект формата шаблона для конфигурационного файла
|
|
|
|
# создаем объект формата шаблона для конфигурационного файла
|
|
|
|
objTemplOld = self.getFormatObj(objHeadNew.fileType,
|
|
|
|
objTemplOld = self.getFormatObj(formatTemplate,
|
|
|
|
self.textConfig)
|
|
|
|
self.textConfig)
|
|
|
|
if not objTemplOld:
|
|
|
|
if not objTemplOld:
|
|
|
|
self.setError(_("Error in template %s") %nameFileConfig)
|
|
|
|
self.setError(_("Error in template %s") %nameFileConfig)
|
|
|
|
return False
|
|
|
|
return False
|
|
|
|
if "xml_" in objHeadNew.fileType:
|
|
|
|
if "xml_" in formatTemplate:
|
|
|
|
if objTemplOld.getError():
|
|
|
|
if objTemplOld.getError():
|
|
|
|
self.setError(_("False template: " ) + nameFileConfig)
|
|
|
|
self.setError(_("False template: " ) + nameFileConfig)
|
|
|
|
return False
|
|
|
|
return False
|
|
|
@ -3988,7 +3948,7 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
objTemplOld.join(objTemplNew)
|
|
|
|
objTemplOld.join(objTemplNew)
|
|
|
|
#print objTemplOld.doc.toprettyxml()
|
|
|
|
#print objTemplOld.doc.toprettyxml()
|
|
|
|
#print objTemplNew.doc.toprettyxml()
|
|
|
|
#print objTemplNew.doc.toprettyxml()
|
|
|
|
if "xml_" in objHeadNew.fileType:
|
|
|
|
if "xml_" in formatTemplate:
|
|
|
|
if objTemplOld.getError():
|
|
|
|
if objTemplOld.getError():
|
|
|
|
self.setError(_("False template: " ) + nameFileTemplate)
|
|
|
|
self.setError(_("False template: " ) + nameFileTemplate)
|
|
|
|
return False
|
|
|
|
return False
|
|
|
@ -4014,7 +3974,7 @@ class template(_file, _terms, xmlShare, templateFormat, _shareTemplate):
|
|
|
|
return filesApply
|
|
|
|
return filesApply
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
self.setError(_("False (type append) template: " ) +\
|
|
|
|
self.setError(_("False (type append) template: " ) +\
|
|
|
|
objHeadNew.typeAppend)
|
|
|
|
typeAppendTemplate)
|
|
|
|
return False
|
|
|
|
return False
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
self.setError(_("Type template not found: ") + nameFileTemplate)
|
|
|
|
self.setError(_("Type template not found: ") + nameFileTemplate)
|
|
|
@ -4047,12 +4007,14 @@ class iniParser(_error, templateFormat):
|
|
|
|
|
|
|
|
|
|
|
|
def writeIniFile(self, txtConfig):
|
|
|
|
def writeIniFile(self, txtConfig):
|
|
|
|
if not os.path.exists(self.iniFile):
|
|
|
|
if not os.path.exists(self.iniFile):
|
|
|
|
fd = os.open(self.iniFile, os.O_CREAT)
|
|
|
|
try:
|
|
|
|
os.close(fd)
|
|
|
|
# Создание файла
|
|
|
|
|
|
|
|
FD = open(self.iniFile, "w+")
|
|
|
|
os.chmod(self.iniFile, self.mode)
|
|
|
|
os.chmod(self.iniFile, self.mode)
|
|
|
|
if not os.path.exists(self.iniFile):
|
|
|
|
except:
|
|
|
|
self.setError(_("Unable to create file") + ": " + self.iniFile)
|
|
|
|
self.setError(_("Unable to create file") + ": " + self.iniFile)
|
|
|
|
return False
|
|
|
|
return False
|
|
|
|
|
|
|
|
else:
|
|
|
|
FD = open(self.iniFile, "r+")
|
|
|
|
FD = open(self.iniFile, "r+")
|
|
|
|
FD.truncate(0)
|
|
|
|
FD.truncate(0)
|
|
|
|
FD.seek(0)
|
|
|
|
FD.seek(0)
|
|
|
|