From efc045e40b6edb9b665003f18c20c5decaed0144 Mon Sep 17 00:00:00 2001 From: Jerome Petazzoni Date: Mon, 20 Aug 2018 08:31:47 -0500 Subject: [PATCH] autopilot: put a bunch of features behind flags We don't always need to track slides, switch desktops, and open links. (These things are not necessary when we're purely testing the labs.) All these features are now behind boolean flags saved in the state file. --- slides/autopilot/autotest.py | 44 +++++++++++++++++++++++++------ slides/autopilot/requirements.txt | 1 + 2 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 slides/autopilot/requirements.txt diff --git a/slides/autopilot/autotest.py b/slides/autopilot/autotest.py index b35bd8db..9cdbdde5 100755 --- a/slides/autopilot/autotest.py +++ b/slides/autopilot/autotest.py @@ -29,6 +29,9 @@ class State(object): self.interactive = True self.verify_status = False self.simulate_type = True + self.switch_desktop = False + self.sync_slides = False + self.open_links = False self.slide = 1 self.snippet = 0 @@ -37,6 +40,9 @@ class State(object): self.interactive = bool(data["interactive"]) self.verify_status = bool(data["verify_status"]) self.simulate_type = bool(data["simulate_type"]) + self.switch_desktop = bool(data["switch_desktop"]) + self.sync_slides = bool(data["sync_slides"]) + self.open_links = bool(data["open_links"]) self.slide = int(data["slide"]) self.snippet = int(data["snippet"]) @@ -46,6 +52,9 @@ class State(object): interactive=self.interactive, verify_status=self.verify_status, simulate_type=self.simulate_type, + switch_desktop=self.switch_desktop, + sync_slides=self.sync_slides, + open_links=self.open_links, slide=self.slide, snippet=self.snippet, ), f, default_flow_style=False) @@ -122,14 +131,20 @@ class Slide(object): def focus_slides(): + if not state.switch_desktop: + return subprocess.check_output(["i3-msg", "workspace", "3"]) subprocess.check_output(["i3-msg", "workspace", "1"]) def focus_terminal(): + if not state.switch_desktop: + return subprocess.check_output(["i3-msg", "workspace", "2"]) subprocess.check_output(["i3-msg", "workspace", "1"]) def focus_browser(): + if not state.switch_desktop: + return subprocess.check_output(["i3-msg", "workspace", "4"]) subprocess.check_output(["i3-msg", "workspace", "1"]) @@ -307,17 +322,20 @@ while True: slide = slides[state.slide] snippet = slide.snippets[state.snippet-1] if state.snippet else None click.clear() - print("[Slide {}/{}] [Snippet {}/{}] [simulate_type:{}] [verify_status:{}]" + print("[Slide {}/{}] [Snippet {}/{}] [simulate_type:{}] [verify_status:{}] " + "[switch_desktop:{}] [sync_slides:{}] [open_links:{}]" .format(state.slide, len(slides)-1, state.snippet, len(slide.snippets) if slide.snippets else 0, - state.simulate_type, state.verify_status)) + state.simulate_type, state.verify_status, + state.switch_desktop, state.sync_slides, state.open_links)) print(hrule()) if snippet: print(slide.content.replace(snippet.content, ansi(7)(snippet.content))) focus_terminal() else: print(slide.content) - subprocess.check_output(["./gotoslide.js", str(slide.number)]) + if state.sync_slides: + subprocess.check_output(["./gotoslide.js", str(slide.number)]) focus_slides() print(hrule()) if state.interactive: @@ -326,6 +344,9 @@ while True: print("n/→ Next") print("s Simulate keystrokes") print("v Validate exit status") + print("d Switch desktop") + print("k Sync slides") + print("o Open links") print("g Go to a specific slide") print("q Quit") print("c Continue non-interactively until next error") @@ -341,6 +362,12 @@ while True: state.simulate_type = not state.simulate_type elif command == "v": state.verify_status = not state.verify_status + elif command == "d": + state.switch_desktop = not state.switch_desktop + elif command == "k": + state.sync_slides = not state.sync_slides + elif command == "o": + state.open_links = not state.open_links elif command == "g": state.slide = click.prompt("Enter slide number", type=int) state.snippet = 0 @@ -405,11 +432,12 @@ while True: screen = capture_pane() url = data.replace("/node1", "/{}".format(IPADDR)) # This should probably be adapted to run on different OS - subprocess.check_output(["xdg-open", url]) - focus_browser() - if state.interactive: - print("Press any key to continue to next step...") - click.getchar() + if state.open_links: + subprocess.check_output(["xdg-open", url]) + focus_browser() + if state.interactive: + print("Press any key to continue to next step...") + click.getchar() else: logging.warning("Unknown method {}: {!r}".format(method, data)) move_forward() diff --git a/slides/autopilot/requirements.txt b/slides/autopilot/requirements.txt new file mode 100644 index 00000000..dca9a909 --- /dev/null +++ b/slides/autopilot/requirements.txt @@ -0,0 +1 @@ +click