def hackCursesFixes():
if sys.platform == 'darwin':
def windowChangedHandler(signum, frame):
curses.ungetch(curses.KEY_RESIZE)
signal.signal(signal.SIGWINCH, windowChangedHandler)
def wakeGetch(signum, frame):
curses.ungetch(0)
signal.signal(signal.SIGUSR1, wakeGetch)
python类ungetch()的实例源码
def changeToFindPrior(self):
curses.ungetch(self.savedCh)
self.host.changeFocusTo(self.host.interactiveFind)
def saveEventChangeToHostWindow(self, *args):
curses.ungetch(self.savedCh)
self.host.changeFocusTo(self.host)
def test_main_menu_config(self, open_mock):
"""Test that the menu configurator functions."""
self.ec2rl.options.global_args["abc"] = "def"
curses.initscr()
# main menu -> exit
curses.ungetch("\n")
curses.ungetch(curses.KEY_RIGHT)
# Modules menu -> main menu
curses.ungetch("\n")
curses.ungetch(curses.KEY_RIGHT)
# atop -> Modules menu
curses.ungetch("\n")
curses.ungetch(curses.KEY_RIGHT)
# atop -> period = 1
curses.ungetch("\n")
curses.ungetch("1")
curses.ungetch("\n")
# Modules menu -> atop
curses.ungetch("\n")
curses.ungetch(curses.KEY_DOWN)
curses.ungetch(curses.KEY_DOWN)
curses.ungetch(curses.KEY_DOWN)
curses.ungetch(curses.KEY_DOWN)
curses.ungetch(curses.KEY_DOWN)
# main menu -> Modules menu
curses.ungetch("\n")
curses.ungetch(curses.KEY_DOWN)
# Global menu -> main menu
curses.ungetch("\n")
curses.ungetch(curses.KEY_RIGHT)
# Global -> concurrency -> 2
curses.ungetch("\n")
curses.ungetch("2")
curses.ungetch("\n")
curses.ungetch(curses.KEY_DOWN)
curses.ungetch(curses.KEY_DOWN)
curses.ungetch(curses.KEY_DOWN)
# Global menu -> only-classes menu
curses.ungetch("\n")
curses.ungetch(curses.KEY_RIGHT)
# unselect "collect"
curses.ungetch(" ")
curses.ungetch("\n")
# main menu -> Global menu
curses.ungetch("\n")
with contextlib.redirect_stdout(self.output):
self.assertTrue(self.ec2rl.menu_config())
self.assertTrue(re.match(r"^\n----------\[Configuration File\]----------\n\nConfiguration file saved:\n"
r"/var/tmp/ec2rl/[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}_[0-9]{2}_[0-9]{2}.[0-9]{6}"
r"/configuration.cfg\n$",
self.output.getvalue()))
self.assertEqual(len(self.output.getvalue()), 129)
self.assertTrue(open_mock.called)
self.assertEqual(self.ec2rl.options.global_args["abc"], "def")
self.assertEqual(self.ec2rl.options.global_args["concurrency"], "2")
self.assertEqual(self.ec2rl.options.global_args["onlyclasses"], "diagnose,gather")
self.assertEqual(self.ec2rl.options.per_module_args["atop"]["period"], "1")
def test_main_menu_config_run(self,
prediag_mock,
main_log_handler_mock,
debug_log_handler_mock,
mkdir_mock,
copyfile_mock,
chdir_mock,
write_config_mock,
logging_fh_mock):
"""Test running ec2rl from the menu."""
# Setup the instance of Main
responses.add(responses.GET, "http://169.254.169.254/latest/meta-data/instance-id", body="i-deadbeef",
status=200)
path_to_ec2rl = os.path.abspath("ec2rl")
test_path = os.path.sep.join([os.path.split(path_to_ec2rl)[0], "test", "modules", "ec2rl"])
sys.argv = [test_path, "menu-config"]
module_path = os.path.join(self.callpath, "test/modules/single_diagnose/")
ec2rl_run_test = ec2rlcore.main.Main(debug=True, full_init=True)
ec2rl_run_test._prediags = ec2rlcore.moduledir.ModuleDir(module_path)
ec2rl_run_test._modules = ec2rlcore.moduledir.ModuleDir(module_path)
ec2rl_run_test._postdiags = ec2rlcore.moduledir.ModuleDir(module_path)
# We don't need to run pre/post modules for this test
ec2rl_run_test._prediags = []
ec2rl_run_test._postdiags = []
# Setup the input buffer for curses to grab from
curses.initscr()
# main menu -> run
curses.ungetch("\n")
curses.ungetch(curses.KEY_DOWN)
curses.ungetch(curses.KEY_DOWN)
curses.ungetch(curses.KEY_DOWN)
curses.ungetch(curses.KEY_DOWN)
curses.ungetch(curses.KEY_DOWN)
with contextlib.redirect_stdout(self.output):
ec2rl_run_test()
self.assertTrue(self.output.getvalue().startswith("\n-----------[Backup Creation]-----------\n\nNo backup op"))
self.assertTrue(self.output.getvalue().endswith(
"/SV_3KrcrMZ2quIDzjn?InstanceID=i-deadbeef&Version={}\n\n".format(ec2rlcore.main.Main.PROGRAM_VERSION)))
self.assertTrue("-\n\nRunning Modules:\nxennetrocket\n\n-" in self.output.getvalue())
self.assertEqual(len(self.output.getvalue()), 1635)
self.assertTrue(prediag_mock.called)
self.assertTrue(main_log_handler_mock.called)
self.assertTrue(debug_log_handler_mock.called)
self.assertTrue(mkdir_mock.called)
self.assertTrue(copyfile_mock.called)
self.assertTrue(chdir_mock.called)
self.assertTrue(write_config_mock.called)
self.assertTrue(logging_fh_mock.called)
# The resulting subcommand should be "run"
self.assertEqual(ec2rl_run_test.subcommand, "run")
def WinCgetch(self):
kp = -1
while kp==-1:
kp = self.VWscreen.getch()
ScrResized = curses.is_term_resized(self.scrsize[0],self.scrsize[1])
if ScrResized:
try:
y,x = self.VWscreen.getmaxyx()
minY = self.ScreenMinY
minX = self.ScreenMinX
bestY = self.ScreenFullY
bestX = self.ScreenFullX
if (y<minY) | (x<minX): # check resized size
self.VWscreen.clear()
self.VWscreen.refresh()
curses.resizeterm(self.scrsize[0],self.scrsize[1]) # reset to original size
self.VWscreen.clear()
self.VWscreen.refresh()
curses.flash()
self.WinPrintError("Screen size not valid. ")
time.sleep(1)
self.PRG_EXIT_SCR_SIZE = 1
curses.ungetch(27) # push ESC key to main loop: exit from program
else: # set new size
if (y>= bestY) and (x>=bestX):
self.ScreenFullSize = 1
else:
self.ScreenFullSize = 0
self.VWscreen.clear()
curses.resizeterm(y, x)
self.scrsize = []
self.scrsize = (y,x)
self.WinRefreshScr()
except Exception as err:
self.WinPrintError("Error resizing screen... "+str(err)+ " " )
return(kp)