summaryrefslogtreecommitdiff
path: root/examples/statemachine/video_demo.py
diff options
context:
space:
mode:
authorPaul McGuire <ptmcg@austin.rr.com>2019-05-27 20:36:04 -0500
committerPaul McGuire <ptmcg@austin.rr.com>2019-05-27 20:36:04 -0500
commitde5633bc975aad61d28ade5f96bf4af854657a6a (patch)
tree168adf36c42a7b70c98f2bd93d3918d8d653ab9b /examples/statemachine/video_demo.py
parentd2332c95675d71c10605eaf00b1171ef11d0970d (diff)
downloadpyparsing-git-de5633bc975aad61d28ade5f96bf4af854657a6a.tar.gz
Fine tuning of statemachine example, moving InvalidStateTransition declaration inside generated class; added video state machine demo; added vending machine state machine demo showing how to using statemachine without importing a .pystate file
Diffstat (limited to 'examples/statemachine/video_demo.py')
-rw-r--r--examples/statemachine/video_demo.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/examples/statemachine/video_demo.py b/examples/statemachine/video_demo.py
new file mode 100644
index 0000000..fadfb9d
--- /dev/null
+++ b/examples/statemachine/video_demo.py
@@ -0,0 +1,48 @@
+#
+# video_demo.py
+#
+# Simple statemachine demo, based on the state transitions given in videostate.pystate
+#
+
+import statemachine
+import videostate
+
+
+class Video(videostate.VideoStateMixin):
+ def __init__(self, title):
+ self.initialize_state(videostate.Stopped)
+ self.title = title
+
+
+# ==== main loop - a REPL ====
+
+v = Video("Die Hard.mp4")
+
+while True:
+ print(v.state)
+ cmd = input("Command ({})> ".format('/'.join(videostate.VideoState.transition_names))).lower().strip()
+ if not cmd:
+ continue
+
+ if cmd in ('?', 'h', 'help'):
+ print('enter a transition {!r}'.format(videostate.VideoState.transition_names))
+ print(' q - quit')
+ print(' ?, h, help - this message')
+ continue
+
+ # quitting out
+ if cmd.startswith('q'):
+ break
+
+ # get transition function for given command
+ state_transition_fn = getattr(v, cmd, None)
+
+ if state_transition_fn is None:
+ print('???')
+ continue
+
+ # invoke the input transition, handle invalid commands
+ try:
+ state_transition_fn()
+ except videostate.VideoState.InvalidTransitionException as e:
+ print(e)