summaryrefslogtreecommitdiff
path: root/sleekxmpp/xmlstream/statemachine.py
diff options
context:
space:
mode:
authorNathan Fritz <nathan@andyet.net>2010-10-13 18:15:21 -0700
committerNathan Fritz <nathan@andyet.net>2010-10-13 18:15:21 -0700
commit7ad7a29a8f08ff815164731eec50ff1cba46b07a (patch)
tree444a2d89993072a377155d8f131899a19d18dffa /sleekxmpp/xmlstream/statemachine.py
parentb0e036d03c5e850af3a3c1589af7333becf54a86 (diff)
downloadslixmpp-7ad7a29a8f08ff815164731eec50ff1cba46b07a.tar.gz
slixmpp-7ad7a29a8f08ff815164731eec50ff1cba46b07a.tar.bz2
slixmpp-7ad7a29a8f08ff815164731eec50ff1cba46b07a.tar.xz
slixmpp-7ad7a29a8f08ff815164731eec50ff1cba46b07a.zip
new state machine in place
Diffstat (limited to 'sleekxmpp/xmlstream/statemachine.py')
-rw-r--r--sleekxmpp/xmlstream/statemachine.py59
1 files changed, 0 insertions, 59 deletions
diff --git a/sleekxmpp/xmlstream/statemachine.py b/sleekxmpp/xmlstream/statemachine.py
deleted file mode 100644
index 8a1aa22d..00000000
--- a/sleekxmpp/xmlstream/statemachine.py
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
- SleekXMPP: The Sleek XMPP Library
- Copyright (C) 2010 Nathanael C. Fritz
- This file is part of SleekXMPP.
-
- See the file LICENSE for copying permission.
-"""
-from __future__ import with_statement
-import threading
-
-class StateMachine(object):
-
- def __init__(self, states=[], groups=[]):
- self.lock = threading.Lock()
- self.__state = {}
- self.__default_state = {}
- self.__group = {}
- self.addStates(states)
- self.addGroups(groups)
-
- def addStates(self, states):
- with self.lock:
- for state in states:
- if state in self.__state or state in self.__group:
- raise IndexError("The state or group '%s' is already in the StateMachine." % state)
- self.__state[state] = states[state]
- self.__default_state[state] = states[state]
-
- def addGroups(self, groups):
- with self.lock:
- for gstate in groups:
- if gstate in self.__state or gstate in self.__group:
- raise IndexError("The key or group '%s' is already in the StateMachine." % gstate)
- for state in groups[gstate]:
- if state in self.__state:
- raise IndexError("The group %s contains a key %s which is not set in the StateMachine." % (gstate, state))
- self.__group[gstate] = groups[gstate]
-
- def set(self, state, status):
- with self.lock:
- if state in self.__state:
- self.__state[state] = bool(status)
- else:
- raise KeyError("StateMachine does not contain state %s." % state)
-
- def __getitem__(self, key):
- if key in self.__group:
- for state in self.__group[key]:
- if not self.__state[state]:
- return False
- return True
- return self.__state[key]
-
- def __getattr__(self, attr):
- return self.__getitem__(attr)
-
- def reset(self):
- self.__state = self.__default_state
-