Add group tree (nested groups)
This commit is contained in:
parent
0bbf06340a
commit
48d491312a
73
sshch/sshch
73
sshch/sshch
|
@ -20,7 +20,7 @@ import curses
|
|||
from curses import textpad, panel
|
||||
|
||||
# https://gitlab.com/zlax/sshch
|
||||
version = "1.05"
|
||||
version = "1.06"
|
||||
# expand groups by default
|
||||
expand_default = True
|
||||
# path to conf dir and file, default: ~/.config/sshch.conf
|
||||
|
@ -28,6 +28,15 @@ conf_dir = path.expanduser("~") + '/.config'
|
|||
conf_file = conf_dir + '/' + 'sshch.conf'
|
||||
|
||||
|
||||
class GroupTree(object):
|
||||
"""Group object with relatives information"""
|
||||
def __init__(self, group):
|
||||
self.group = group
|
||||
self.aliases = []
|
||||
self.children = []
|
||||
self.parent = []
|
||||
|
||||
|
||||
def AddNewAlias(alias):
|
||||
if not conf.has_section(alias):
|
||||
conf.add_section(alias)
|
||||
|
@ -219,9 +228,34 @@ def CMDList(option, opt, value, parser):
|
|||
print(' '.join(str(p) for p in conf.sections()))
|
||||
|
||||
|
||||
def GroupTreeRecursion(level, group, treelist, resultalias, resultstring, expandlist, previousgroups):
|
||||
if group in previousgroups:
|
||||
return resultalias, resultstring
|
||||
previousgroups.append(group)
|
||||
resultalias.append(group)
|
||||
if group in expandlist:
|
||||
resultstring.append(' '*(level-1)+">> "+group)
|
||||
else:
|
||||
resultstring.append(' '*(level-1)+"<> "+group)
|
||||
if expandlist == True or group in expandlist:
|
||||
for g in treelist[group].children:
|
||||
resultalias, resultstring = GroupTreeRecursion(level+1, g, treelist, resultalias, resultstring, expandlist, previousgroups)
|
||||
if expandlist == True or group in expandlist:
|
||||
for ga in treelist[group].aliases:
|
||||
if conf.has_option(ga, "exec_string"):
|
||||
resultalias.append(ga)
|
||||
result = "".join([' '*(level-1)+" ~ ", str(ga), " (", (conf.get(ga, "exec_string") if
|
||||
conf.has_option(ga, "exec_string") else ""), ")",
|
||||
(" [password]" if conf.has_option(ga, "password") else "")])
|
||||
resultstring.append(result)
|
||||
return resultalias, resultstring
|
||||
|
||||
|
||||
def GetTreeList(strings=True, expandlist=True):
|
||||
aliases = []
|
||||
groups = []
|
||||
treelist = {}
|
||||
rootgroups = []
|
||||
resultalias = []
|
||||
resultstring = []
|
||||
for a in conf.sections():
|
||||
|
@ -229,7 +263,33 @@ def GetTreeList(strings=True, expandlist=True):
|
|||
groups.append(a)
|
||||
elif conf.has_option(a, "exec_string"):
|
||||
aliases.append(a)
|
||||
rootaliases = list(aliases)
|
||||
for g in groups:
|
||||
treelist[g] = GroupTree(g)
|
||||
group_aliases = conf.get(g, "group").split()
|
||||
for ga in group_aliases:
|
||||
if ga in groups:
|
||||
treelist[g].children.append(ga)
|
||||
elif ga in aliases:
|
||||
treelist[g].aliases.append(ga)
|
||||
try:
|
||||
rootaliases.remove(ga)
|
||||
except ValueError:
|
||||
pass
|
||||
for g in groups:
|
||||
if treelist[g].children:
|
||||
for child in treelist[g].children:
|
||||
treelist[child].parent.append(g)
|
||||
for g in groups:
|
||||
if not treelist[g].parent:
|
||||
rootgroups.append(g)
|
||||
for g in rootgroups:
|
||||
resultalias, resultstring = GroupTreeRecursion(1, g, treelist, resultalias, resultstring, expandlist, [])
|
||||
"""
|
||||
|
||||
# if not treelist[g].parent:
|
||||
# resultalias.append(g)
|
||||
|
||||
resultalias.append(g)
|
||||
resultstring.append(">> "+g)
|
||||
group_aliases = conf.get(g, "group").split()
|
||||
|
@ -247,16 +307,17 @@ def GetTreeList(strings=True, expandlist=True):
|
|||
aliases.remove(ga)
|
||||
except ValueError:
|
||||
pass
|
||||
for a in aliases:
|
||||
"""
|
||||
for a in rootaliases:
|
||||
resultalias.append(a)
|
||||
result = "".join([str(a), " (", (conf.get(a, "exec_string") if
|
||||
conf.has_option(a, "exec_string") else ""), ")",
|
||||
(" [password]" if conf.has_option(a, "password") else "")])
|
||||
resultstring.append(result)
|
||||
if strings:
|
||||
return resultstring;
|
||||
return resultstring
|
||||
else:
|
||||
return resultalias;
|
||||
return resultalias
|
||||
|
||||
|
||||
def CMDFullList(option, opt, value, parser):
|
||||
|
@ -452,12 +513,12 @@ def CursesMain():
|
|||
for a in conf.sections():
|
||||
if conf.has_option(a, "group"):
|
||||
groups.append(a)
|
||||
expanded = groups
|
||||
expanded = list(groups)
|
||||
strings = GetTreeList(False, expanded)
|
||||
stringsfull = GetTreeList(True, expanded)
|
||||
elif expand_default == False:
|
||||
groups = []
|
||||
expanded = groups
|
||||
expanded = []
|
||||
strings = GetTreeList(False, expanded)
|
||||
stringsfull = GetTreeList(True, expanded)
|
||||
row_num = len(strings)
|
||||
|
|
Loading…
Reference in New Issue