|
|
|
@ -25,11 +25,48 @@ import fcntl
|
|
|
|
|
import cl_utils
|
|
|
|
|
|
|
|
|
|
pcs = cl_utils.prettyColumnStr
|
|
|
|
|
CONWIDTH = 78
|
|
|
|
|
|
|
|
|
|
class cl_params:
|
|
|
|
|
|
|
|
|
|
class cl_help:
|
|
|
|
|
"""Объект для работы со справкой, и обработкой параметров.
|
|
|
|
|
|
|
|
|
|
Конструктор __init__ должен определить следующие переменные:
|
|
|
|
|
|
|
|
|
|
self.chapter список разделов справки, каждый элементы состоит из
|
|
|
|
|
имени раздела, флаг видимый/скрытый, кол-во переводов строк
|
|
|
|
|
после названия раздела, количество строк после раздела,
|
|
|
|
|
тип раздела
|
|
|
|
|
Пример: [("Copyright",False,0,2),"options"]
|
|
|
|
|
self.relService словарь связей сервисов и действующих опций
|
|
|
|
|
ключ - название сервиса, значение - список отображаемых
|
|
|
|
|
разделов отмеченных как "options"
|
|
|
|
|
Пример: {"samba":[_("Common options"),
|
|
|
|
|
_("Service Samba options")]}
|
|
|
|
|
self.relOptions словарь связей длинных опций помощи и выводимых разделов
|
|
|
|
|
помощи с опциями
|
|
|
|
|
ключ - параметр справки, значение список отображаемых
|
|
|
|
|
разделов справки
|
|
|
|
|
Пример: {"help-ldap":[_("Common options"),
|
|
|
|
|
_("Service LDAP options)]}
|
|
|
|
|
self.progName словарь имена используемых программ и их номера для
|
|
|
|
|
доступа к переменным
|
|
|
|
|
Пример: {'cl-groupadd':0, 'cl-groupdel':1}
|
|
|
|
|
self.data список данных для словаря, каждый эленмент словарь:
|
|
|
|
|
progAccess: список номеров программ отображающих
|
|
|
|
|
Пример: {'progAccess':(0,),
|
|
|
|
|
'shortOption':"g",
|
|
|
|
|
'longOption':"gid",
|
|
|
|
|
'optVal':"GID",
|
|
|
|
|
'helpChapter':_("Options"),
|
|
|
|
|
'help':_("use GID for the new group")
|
|
|
|
|
},
|
|
|
|
|
после заполнения параметров необходимо выполнить
|
|
|
|
|
self._cl_help__setParamHelp() для заполнения справки
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
def __init__(self, cmdName):
|
|
|
|
|
# ширина консоли взята 80
|
|
|
|
|
# -1 чтобы компенсировать расстрояние между колонками
|
|
|
|
|
self.consolewidth = 79
|
|
|
|
|
self.column_width = 32
|
|
|
|
|
self.cmdName = cmdName
|
|
|
|
|
#короткие опции командной строки
|
|
|
|
@ -41,7 +78,7 @@ class cl_params:
|
|
|
|
|
#optEnd = _("user")
|
|
|
|
|
#elif "group" in self.cmdName and not "mod" in self.cmdName:
|
|
|
|
|
#optEnd = _("group")
|
|
|
|
|
self.__setParamHelp()
|
|
|
|
|
#self.__setParamHelp()
|
|
|
|
|
|
|
|
|
|
def getChapterNumber(self,NameChapter):
|
|
|
|
|
# Показать номер раздела по его имени
|
|
|
|
@ -53,6 +90,8 @@ class cl_params:
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
def __setParamHelp(self):
|
|
|
|
|
# сформировать нужное количество блоков раздела
|
|
|
|
|
self.chapterBloc = [""]*len(self.chapter)
|
|
|
|
|
# записать параметры в справку
|
|
|
|
|
sp = []
|
|
|
|
|
for par in self.data:
|
|
|
|
@ -78,12 +117,12 @@ class cl_params:
|
|
|
|
|
helpTxt = pcs(
|
|
|
|
|
" -%s, --%s "%(par["shortOption"],longOption),
|
|
|
|
|
self.column_width, par['help'],
|
|
|
|
|
CONWIDTH-self.column_width)
|
|
|
|
|
self.consolewidth-self.column_width)
|
|
|
|
|
else:
|
|
|
|
|
helpTxt = pcs(
|
|
|
|
|
" -%s "%(par["shortOption"]),
|
|
|
|
|
self.column_width, par['help'],
|
|
|
|
|
CONWIDTH-self.column_width)
|
|
|
|
|
self.consolewidth-self.column_width)
|
|
|
|
|
self.addChapterHelp(numChapter,helpTxt)
|
|
|
|
|
break
|
|
|
|
|
elif par.has_key("longOption") and self.access(par):
|
|
|
|
@ -212,49 +251,29 @@ class cl_params:
|
|
|
|
|
break
|
|
|
|
|
return ""
|
|
|
|
|
|
|
|
|
|
BG_BLACK = "40"
|
|
|
|
|
BG_RED = "41"
|
|
|
|
|
BG_GREEN = "42"
|
|
|
|
|
BG_YELLOW = "43"
|
|
|
|
|
BG_BLUE = "44"
|
|
|
|
|
BG_PURPLE = "45"
|
|
|
|
|
BG_CYAN = "46"
|
|
|
|
|
BG_WHITE = "47"
|
|
|
|
|
|
|
|
|
|
FG_BLACK = "30"
|
|
|
|
|
FG_RED = "31"
|
|
|
|
|
FG_GREEN = "32"
|
|
|
|
|
FG_YELLOW = "33"
|
|
|
|
|
FG_BLUE = "34"
|
|
|
|
|
FG_PURPLE = "35"
|
|
|
|
|
FG_CYAN = "36"
|
|
|
|
|
FG_WHITE = "37"
|
|
|
|
|
|
|
|
|
|
ATTR_RESET = "0"
|
|
|
|
|
ATTR_BRIGHTOFF = "1"
|
|
|
|
|
ATTR_BRIGHTON = "2"
|
|
|
|
|
ATTR_UNDERLINE = "3"
|
|
|
|
|
ATTR_FLASH = "5"
|
|
|
|
|
ATTR_REVERSE = "7"
|
|
|
|
|
ATTR_INVISIBLE = "8"
|
|
|
|
|
|
|
|
|
|
def colorstr(s, *attrs):
|
|
|
|
|
return "\033[%sm" % ";".join(attrs) + s
|
|
|
|
|
|
|
|
|
|
def colorwrite(s, *attrs):
|
|
|
|
|
print colorstr(s, *attrs)
|
|
|
|
|
|
|
|
|
|
class cl_smartconsole:
|
|
|
|
|
def printRight(self, offsetLeft, offsetRight):
|
|
|
|
|
"""Добавляет необходимое количество пробелов:
|
|
|
|
|
class cl_smartcon(object):
|
|
|
|
|
selfobj = None
|
|
|
|
|
|
|
|
|
|
количество пробелов = (ширина консоли - offsetLeft - offsetRight)
|
|
|
|
|
"""
|
|
|
|
|
def __new__(cls, *args,**kw):
|
|
|
|
|
"""Механизм синглтона"""
|
|
|
|
|
if cls.selfobj is None:
|
|
|
|
|
cls.selfobj = object.__new__(cls,*args,**kw)
|
|
|
|
|
return cls.selfobj
|
|
|
|
|
|
|
|
|
|
def getconsolewidth(self):
|
|
|
|
|
"""Получить ширину текущей консоли"""
|
|
|
|
|
s = struct.pack("HHHH", 0, 0, 0, 0)
|
|
|
|
|
fd_stdout = sys.stdout.fileno()
|
|
|
|
|
x = fcntl.ioctl(fd_stdout, termios.TIOCGWINSZ, s)
|
|
|
|
|
#(rows, cols, x pixels, y pixels)
|
|
|
|
|
cols = struct.unpack("HHHH", x)[1]
|
|
|
|
|
return struct.unpack("HHHH", x)[1]
|
|
|
|
|
|
|
|
|
|
def printRight(self, offsetLeft, offsetRight):
|
|
|
|
|
"""Добавляет необходимое количество пробелов:
|
|
|
|
|
|
|
|
|
|
количество пробелов = (ширина консоли - offsetLeft - offsetRight)
|
|
|
|
|
"""
|
|
|
|
|
cols = self.getconsolewidth()
|
|
|
|
|
for i in range(cols - offsetLeft - offsetRight):
|
|
|
|
|
sys.stdout.write(" ")
|
|
|
|
|
|
|
|
|
|