Loading wgcli.py +117 −64 Original line number Diff line number Diff line Loading @@ -10,6 +10,14 @@ import atexit import os import sys import argparse import logging logging.basicConfig( stream=sys.stdout, level=os.environ.get("LOGLEVEL", "INFO"), format="%(levelname)s %(message)s", ) logger = logging.getLogger(__name__) if sys.version_info[0] < 3: raise Exception("Must be using Python 3") Loading Loading @@ -56,16 +64,115 @@ def print_workgroup(workgroupt, workgroup, maxdepth=1000, depth=1): print_workgroup("ADMIN_WORKGROUP", child, maxdepth, depth + 1) def cmd_tree(manager, workgroup): print_workgroup("WORKGROUP", manager.workgroup(workgroup)) class MainMenu(object): def __init__(self, base_url, cert, cert_key): # UAT/DEV url: # https://aswsuat.stanford.edu/mais/workgroupsvc/v1/workgroups self.manager = SUWorkgroupManager(base_url, cert, cert_key) self.workgroup = None def usage(self, banner=False): if banner: print( """###################################### Welcome to Stanford Workgroup CLI tool ###################################### """ ) print( """ Commands are: workgroup <workgroup> to select a working workgroup workgroup_full <workgroup> to select a working workgroup and load it with stem-owners (slower) ls to list members tree to list members recursively """ ) def cmd_tree(self): print_workgroup("WORKGROUP", self.manager.workgroup(self.workgroup.name)) def cmd_ls(self): print_workgroup( "WORKGROUP", self.manager.workgroup(self.workgroup.name), maxdepth=1 ) def cmd_ls(manager, workgroup): print_workgroup("WORKGROUP", manager.workgroup(workgroup), maxdepth=1) def cmd_workgroup(self, workgroup_name): logger.debug("loading workgroup {}...".format(workgroup_name)) self.workgroup = self.manager.workgroup(workgroup_name, fetch_owners=False) logger.debug("workgroup loaded: {}".format(self.workgroup)) def cmd_workgroup_full(self, workgroup_name): logger.debug("loading workgroup in full {}...".format(workgroup_name)) self.workgroup = self.manager.workgroup(workgroup_name, fetch_owners=True) logger.debug("workgroup fully loaded: {}".format(self.workgroup)) def cmd_add(self, member_name): self.workgroup.add_member(member_name) def cmd_remove(self, member_name): self.workgroup.remove_member(member_name) def cmd_reload(self): self.manager.clear() self.workgroup = self.manager.workgroup(self.workgroup.name) def cmd_exit(self): sys.exit(0) def selector(self, argument): switcher = { "quit": ("cmd_exit", 0), "exit": ("cmd_exit", 0), "workgroup": ("cmd_workgroup", 1), "workgroup_full": ("cmd_workgroup_full", 1), "add": ("cmd_add", 1), "remove": ("cmd_remove", 1), "reload": ("cmd_reload", 0), "ls": ("cmd_ls", 0), "tree": ("cmd_tree", 0), "help": ("usage", 0), } logger.debug("switcher arg: {}".format(argument)) selection = switcher.get(argument, "Invalid command") logger.debug("menu choice: {}".format(selection)) return selection def main_menu(self): self.usage(banner=True) while True: prompt = "{}> ".format(self.workgroup.name) if self.workgroup else "#> " choice = input(prompt) dgrams = choice.split(" ") if len(dgrams) == 0: continue choice = dgrams[0] args = dgrams[1:] logger.debug("Got dgrams: {}".format(dgrams)) logger.debug("choice: {}".format(choice)) logger.debug("args: {}".format(args)) try: selection = self.selector(choice) cmd = selection[0] args_needed = selection[1] if args_needed != (len(args)): print("Wrong number of args") usage() continue if args_needed > 0: getattr(self, cmd)(*args) else: getattr(self, cmd)() except SUWorkgroupAPIError as exc: print(exc) def main(): """wgcli script main entry point""" if __name__ == "__main__": try: readline_setup() except ImportError: Loading Loading @@ -95,62 +202,8 @@ def main(): ) args = parser.parse_args() # UAT/DEV url: # https://aswsuat.stanford.edu/mais/workgroupsvc/v1/workgroups manager = SUWorkgroupManager(base_url=args.base_url, cert=args.wg_cert, cert_key=args.wg_cert_key) print( """###################################### Welcome to Stanford Workgroup CLI tool ###################################### Commands are: workgroup <workgroup> to select a working workgroup workgroup_full <workgroup> to select a working workgroup and load it with stem-owners (slower) ls to list members tree to list members recursively """ # wgcli script main entry point main = MainMenu( base_url=args.base_url, cert=args.wg_cert, cert_key=args.wg_cert_key ) workgroup = None cmd = "" while cmd.lower() != "quit": if workgroup: prompt = "%s> " % workgroup.name else: prompt = "#> " cmd = input(prompt) ##print "Got cmd %s" % cmd args = cmd.split() if len(args) == 0: continue cmd = args[0] try: if cmd == "workgroup": workgroup = manager.workgroup(args[1], fetch_owners=False) if cmd == "workgroup_full": workgroup = manager.workgroup(args[1]) elif cmd == "add": workgroup.add_member(args[1]) elif cmd == "remove": workgroup.remove_member(args[1]) elif cmd == "reload": manager.clear() workgroup = manager.workgroup(workgroup.name) elif cmd == "ls": cmd_ls(manager, workgroup.name) elif cmd == "tree": cmd_tree(manager, workgroup.name) except SUWorkgroupAPIError as exc: print(exc) if __name__ == "__main__": main() main.main_menu() Loading
wgcli.py +117 −64 Original line number Diff line number Diff line Loading @@ -10,6 +10,14 @@ import atexit import os import sys import argparse import logging logging.basicConfig( stream=sys.stdout, level=os.environ.get("LOGLEVEL", "INFO"), format="%(levelname)s %(message)s", ) logger = logging.getLogger(__name__) if sys.version_info[0] < 3: raise Exception("Must be using Python 3") Loading Loading @@ -56,16 +64,115 @@ def print_workgroup(workgroupt, workgroup, maxdepth=1000, depth=1): print_workgroup("ADMIN_WORKGROUP", child, maxdepth, depth + 1) def cmd_tree(manager, workgroup): print_workgroup("WORKGROUP", manager.workgroup(workgroup)) class MainMenu(object): def __init__(self, base_url, cert, cert_key): # UAT/DEV url: # https://aswsuat.stanford.edu/mais/workgroupsvc/v1/workgroups self.manager = SUWorkgroupManager(base_url, cert, cert_key) self.workgroup = None def usage(self, banner=False): if banner: print( """###################################### Welcome to Stanford Workgroup CLI tool ###################################### """ ) print( """ Commands are: workgroup <workgroup> to select a working workgroup workgroup_full <workgroup> to select a working workgroup and load it with stem-owners (slower) ls to list members tree to list members recursively """ ) def cmd_tree(self): print_workgroup("WORKGROUP", self.manager.workgroup(self.workgroup.name)) def cmd_ls(self): print_workgroup( "WORKGROUP", self.manager.workgroup(self.workgroup.name), maxdepth=1 ) def cmd_ls(manager, workgroup): print_workgroup("WORKGROUP", manager.workgroup(workgroup), maxdepth=1) def cmd_workgroup(self, workgroup_name): logger.debug("loading workgroup {}...".format(workgroup_name)) self.workgroup = self.manager.workgroup(workgroup_name, fetch_owners=False) logger.debug("workgroup loaded: {}".format(self.workgroup)) def cmd_workgroup_full(self, workgroup_name): logger.debug("loading workgroup in full {}...".format(workgroup_name)) self.workgroup = self.manager.workgroup(workgroup_name, fetch_owners=True) logger.debug("workgroup fully loaded: {}".format(self.workgroup)) def cmd_add(self, member_name): self.workgroup.add_member(member_name) def cmd_remove(self, member_name): self.workgroup.remove_member(member_name) def cmd_reload(self): self.manager.clear() self.workgroup = self.manager.workgroup(self.workgroup.name) def cmd_exit(self): sys.exit(0) def selector(self, argument): switcher = { "quit": ("cmd_exit", 0), "exit": ("cmd_exit", 0), "workgroup": ("cmd_workgroup", 1), "workgroup_full": ("cmd_workgroup_full", 1), "add": ("cmd_add", 1), "remove": ("cmd_remove", 1), "reload": ("cmd_reload", 0), "ls": ("cmd_ls", 0), "tree": ("cmd_tree", 0), "help": ("usage", 0), } logger.debug("switcher arg: {}".format(argument)) selection = switcher.get(argument, "Invalid command") logger.debug("menu choice: {}".format(selection)) return selection def main_menu(self): self.usage(banner=True) while True: prompt = "{}> ".format(self.workgroup.name) if self.workgroup else "#> " choice = input(prompt) dgrams = choice.split(" ") if len(dgrams) == 0: continue choice = dgrams[0] args = dgrams[1:] logger.debug("Got dgrams: {}".format(dgrams)) logger.debug("choice: {}".format(choice)) logger.debug("args: {}".format(args)) try: selection = self.selector(choice) cmd = selection[0] args_needed = selection[1] if args_needed != (len(args)): print("Wrong number of args") usage() continue if args_needed > 0: getattr(self, cmd)(*args) else: getattr(self, cmd)() except SUWorkgroupAPIError as exc: print(exc) def main(): """wgcli script main entry point""" if __name__ == "__main__": try: readline_setup() except ImportError: Loading Loading @@ -95,62 +202,8 @@ def main(): ) args = parser.parse_args() # UAT/DEV url: # https://aswsuat.stanford.edu/mais/workgroupsvc/v1/workgroups manager = SUWorkgroupManager(base_url=args.base_url, cert=args.wg_cert, cert_key=args.wg_cert_key) print( """###################################### Welcome to Stanford Workgroup CLI tool ###################################### Commands are: workgroup <workgroup> to select a working workgroup workgroup_full <workgroup> to select a working workgroup and load it with stem-owners (slower) ls to list members tree to list members recursively """ # wgcli script main entry point main = MainMenu( base_url=args.base_url, cert=args.wg_cert, cert_key=args.wg_cert_key ) workgroup = None cmd = "" while cmd.lower() != "quit": if workgroup: prompt = "%s> " % workgroup.name else: prompt = "#> " cmd = input(prompt) ##print "Got cmd %s" % cmd args = cmd.split() if len(args) == 0: continue cmd = args[0] try: if cmd == "workgroup": workgroup = manager.workgroup(args[1], fetch_owners=False) if cmd == "workgroup_full": workgroup = manager.workgroup(args[1]) elif cmd == "add": workgroup.add_member(args[1]) elif cmd == "remove": workgroup.remove_member(args[1]) elif cmd == "reload": manager.clear() workgroup = manager.workgroup(workgroup.name) elif cmd == "ls": cmd_ls(manager, workgroup.name) elif cmd == "tree": cmd_tree(manager, workgroup.name) except SUWorkgroupAPIError as exc: print(exc) if __name__ == "__main__": main() main.main_menu()