develop
mhiretskiy 16 years ago
parent 3c2ef3048f
commit 59fc006e72

@ -225,6 +225,17 @@ class cl_ldap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
]
}
# список разделов, которые на наличие в ней информации
# используется для автоматического отображения/скрытия
# опций help-имя
# Пример: self.relOption =
# { "help-all":[_("Common options"], _("Service Unix options"),
# _("Service Samba options"), _("Service LDAP options")}]
# self.relChapterPass = (_("Common options"),)
# это означается что опция будет активна, если только в разделах
# кроме Common options есть хоть одна доступная опция.
self.relChapterPass = (_("Common options"),)
self.data = [\
# Options
{'shortOption':"h",
@ -713,6 +724,38 @@ class cl_ldap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
self.allServ = []
self.__setAllServ()
def handleCheckAccess(self,dataHash):
"""Дополнительная проверка опций-справок - опция доступна только если
в разделах этой справки есть хотябы одна опция
Входные параметры:
dataHash словарь из списка self.data
"""
# если эта опция для реализации справки
if 'longOption' in dataHash \
and dataHash['longOption'] in self.relOptions:
# составляем список разделов которые должны быть не пустые
# разделы из relOptions относящиеся к этой опции за исключением
# разделов которые надо пропустить (relChapterPass)
trueChapters = \
set(self.relOptions[dataHash['longOption']]).difference( \
self.relChapterPass)
# перебираем все опции
for unit in self.data:
# если опция не отностится к выполняемой программе, то
# ее пропустить
if 'progAccess' in unit and \
not self.progName[self.cmdName] in unit['progAccess']:
continue
# если опция отностится к необходмой справки
if unit['helpChapter'] in trueChapters:
# опция справки - доступна
return True
# если не оказалось не одной опция для разделов этой справки
return False
# опция доступна, так как не справочная
return True
def __setAllServ(self):
"""Записывает в аттрибут self.allServ названия всех сервисов"""
sServ = re.compile("\s*([^\s]+)\s*")
@ -2623,56 +2666,62 @@ Samba in backup directory")
self.printERROR(_("Not add user ..."))
return False
class tsOpt:
"""Класс для обработки параметров и вывода help"""
def __init__(self, obj, parBeforeService):
class tsOpt(cl_base.opt):
"""Класс для обработки параметров и вывода help
Параметры:
helpObj объект-справка содержащий необходимые опции
parBeforeService дополнительные необходимые параметры перед указанным
сервисом. (например "group" или "user")
"""
def __init__(self, helpObj, parBeforeService):
# последний параметр является сервисом
service = sys.argv[-1:][0].rstrip()
shortOpt = obj.getAllOpt('short', obj.relOptions['h'])
longOpt = obj.getAllOpt('long', obj.relOptions['h'])
if service in obj.allServ:
obj.clearAllOpt()
shortOpt = obj.getAllOpt('short',obj.relServices[service])
longOpt = obj.getAllOpt('long', obj.relServices[service])
optObj = cl_base.opt(shortOpt, longOpt)
optObj.sysArgv = sys.argv[1:]
optObj.obj = obj
optObj.__iter = 0
optObj.opt = {}
optObj.params = {}
optObj.handlerOpt = tsOpt.handlerOpt.__get__(optObj)
optObj.handlerErrOpt = tsOpt.handlerErrOpt.__get__(optObj)
optObj.handlerParam = tsOpt.handlerParam.__get__(optObj)
# названия параметров из хвоста командной строки
optObj.nameParams = parBeforeService + ['service']
optObj.getopt()
# параметры из хвоста командной строки
self.params = optObj.params
self.opt = optObj.opt
# от cl_help получаем короткие и длинные опции
if service in helpObj.allServ:
shortOpt, longOpt = helpObj.getAllOpt('all', helpObj.relServices[service])
else:
shortOpt,longOpt = helpObj.getAllOpt('all', helpObj.relOptions['h'])
# вызвать конструктор объекта, распознающего опции
cl_base.opt.__init__(self,shortOpt,longOpt)
self.nameParams = parBeforeService + ['service']
self.sysArgv = sys.argv[1:]
self.helpObj = helpObj
self.__iter = 0
self.opt = {}
self.params = {}
self.getopt()
# Обработка help
self.flagHelp = False
for relOpt in obj.relOptions.keys():
if relOpt in optObj.opt:
print obj.getHelp(obj.relOptions[relOpt])
self.flagHelp = True
break
if not self.flagHelp:
if optObj.params.has_key('service'):
if not (optObj.params['service'] in obj.allServ) or\
len(optObj.nameParams) != optObj.__iter:
optObj.handlerErrOpt()
# определяем есть ли среди опций опции, которые влияют на показ
# опциональных разделов (метод пересечения множеств)
helpopt = \
tuple(set(self.opt.keys()).intersection(helpObj.relOptions.keys()))
if len(helpopt) > 0:
print helpObj.getHelp(helpObj.relOptions[helpopt[0]])
self.flagHelp = True
elif not self.params:
print helpObj.getHelp(helpObj.relOptions['h'])
self.flagHelp = True
else:
if self.params.has_key('service'):
if not (self.params['service'] in helpObj.allServ) or\
len(self.nameParams) != self.__iter:
self.handlerErrOpt()
else:
optObj.handlerErrOpt()
self.handlerErrOpt()
def handlerOpt(self,option,value):
# Обработчик (опция значение)
#print option, value
shortOpt = self.obj.getShortOpt(option)
shortOpt = self.helpObj.getShortOpt(option)
if not shortOpt:
shortOpt = option
if not self.opt.has_key(shortOpt):
if not shortOpt in self.opt:
self.opt[shortOpt] = value
def handlerErrOpt(self):
# Обработчик ошибок
argv = " ".join(sys.argv[1:])

Loading…
Cancel
Save