Skip to content

Commit dab415d

Browse files
authored
Merge pull request #177 from MichaelWasher/state_machine_clean
Clean State Machine Graphs
2 parents c7bfb60 + d1ace21 commit dab415d

File tree

5 files changed

+201
-140
lines changed

5 files changed

+201
-140
lines changed

chewie/chewie.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,8 @@ def send_preemptive_identity_request(self, port_id):
232232

233233
def reauth_port(self, src_mac, port_id):
234234
"""
235-
Send an Identity Request to src_mac, on port_id. prompting the supplicant to re authenticate.
235+
Send an Identity Request to src_mac, on port_id. prompting
236+
the supplicant to re authenticate.
236237
Args:
237238
src_mac (MacAddress):
238239
port_id (str):
@@ -288,17 +289,19 @@ def setup_radius_socket(self):
288289
self.radius_server_port,
289290
log_prefix)
290291
self.radius_socket.setup()
291-
self.logger.info("Radius Listening on %s:%d" % (self.radius_listen_ip,
292-
self.radius_listen_port))
292+
self.logger.info("Radius Listening on %s:%d",
293+
self.radius_listen_ip,
294+
self.radius_listen_port)
293295

294296
def send_eap_messages(self):
295297
"""Send EAP messages to Supplicant forever."""
296298
while self.running():
297299
sleep(0)
298300
eap_queue_message = self.eap_output_messages.get()
299-
self.logger.info("Sending message %s from %s to %s" %
300-
(eap_queue_message.message, str(eap_queue_message.port_mac),
301-
str(eap_queue_message.src_mac)))
301+
self.logger.info("Sending message %s from %s to %s",
302+
eap_queue_message.message,
303+
str(eap_queue_message.port_mac),
304+
str(eap_queue_message.src_mac))
302305
self.eap_socket.send(MessagePacker.ethernet_pack(eap_queue_message.message,
303306
eap_queue_message.port_mac,
304307
eap_queue_message.src_mac))
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
"""This Module provides the Abstract Design Requirements for a State Machine in Chewie"""
2+
from transitions.extensions import GraphMachine
3+
4+
5+
class AbstractStateMachine:
6+
"""This Class provides the Abstract Design Requirements for a State Machine in Chewie"""
7+
8+
PROGRESS_STATES = []
9+
10+
SUCCESS_STATES = []
11+
FAILURE_STATES = []
12+
COMPLETION_STATES = FAILURE_STATES + SUCCESS_STATES
13+
INITIAL_STATE = None
14+
STATES = COMPLETION_STATES + PROGRESS_STATES
15+
16+
ERROR_TRANSTIONS = []
17+
18+
CORE_TRANSITIONS = []
19+
TRANSITIONS = CORE_TRANSITIONS + ERROR_TRANSTIONS
20+
port_enabled = None
21+
state = None
22+
23+
def is_in_progress(self):
24+
"""
25+
Returns true if the state machine is currently in progress
26+
"""
27+
return self.port_enabled and self.state not in self.COMPLETION_STATES
28+
29+
def is_success(self):
30+
"""
31+
Returns true if the state machine currently in a successful completion state and enabled
32+
"""
33+
return self.port_enabled and self.state in self.SUCCESS_STATES
34+
35+
@classmethod
36+
def build_state_graph(cls, filename):
37+
"Build a graphc representation of the state machine and store in 'filename'.png"
38+
model = type('model', (object,), {})()
39+
GraphMachine(model=model, states=cls.STATES,
40+
title=cls.__name__,
41+
transitions=cls.CORE_TRANSITIONS,
42+
queued=True,
43+
initial=cls.INITIAL_STATE)
44+
model.get_graph().draw(filename, prog='dot') # pylint: disable=no-member

0 commit comments

Comments
 (0)