Skip to content

Commit b5f5a0d

Browse files
save last messages by channel
1 parent 1294d29 commit b5f5a0d

File tree

4 files changed

+27
-20
lines changed

4 files changed

+27
-20
lines changed

functions/broker.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,10 @@ def on_connect(self, _client, _userdata, _flags, _rc, channel):
8787

8888
self.state.print_status(description=f"Connected to message broker channel {channel}")
8989

90-
def on_message(self, _client, _userdata, msg):
90+
def on_message(self, _client, _userdata, msg, channel):
9191
"""Callback function when message received from message broker."""
9292

93-
self.state.last_message = json.loads(msg.payload)
93+
self.state.last_messages[channel] = json.loads(msg.payload)
9494

9595
self.state.print_status(endpoint_json=json.loads(msg.payload), description=f"TOPIC: {msg.topic} ({datetime.now().strftime('%Y-%m-%d %H:%M:%S')})\n")
9696

@@ -100,9 +100,16 @@ def start_listen(self, channel="#"):
100100
if self.client is None:
101101
self.connect()
102102

103-
# Wrap on_connect to pass channel argument
104-
self.client.on_connect = lambda client, userdata, flags, rc: self.on_connect(client, userdata, flags, rc, channel)
105-
self.client.on_message = self.on_message
103+
def on_connect(client, userdata, flags, rc):
104+
"""Wrap on_connect to pass channel argument."""
105+
self.on_connect(client, userdata, flags, rc, channel)
106+
107+
def on_message(client, userdata, msg):
108+
"""Wrap on_message to pass channel argument."""
109+
self.on_message(client, userdata, msg, channel)
110+
111+
self.client.on_connect = on_connect
112+
self.client.on_message = on_message
106113

107114
self.client.loop_start()
108115
self.state.print_status(description=f"Now listening to message broker channel {channel}.")
@@ -121,17 +128,17 @@ def listen(self, duration, channel):
121128
start_time = datetime.now()
122129
self.start_listen(channel)
123130
if not self.state.test_env:
124-
self.state.last_message = None
131+
self.state.last_messages[channel] = None
125132
while (datetime.now() - start_time).seconds < duration:
126133
self.state.print_status(update_only=True, description=".", end="")
127134
time.sleep(0.25)
128-
if self.state.last_message is not None:
135+
if self.state.last_messages.get(channel) is not None:
129136
seconds = (datetime.now() - start_time).seconds
130137
self.state.print_status(
131138
description=f"Message received after {seconds} seconds",
132139
update_only=True)
133140
break
134-
if self.state.last_message is None:
141+
if self.state.last_messages.get(channel) is None:
135142
self.state.print_status(
136143
description=f"Did not receive message after {duration} seconds",
137144
update_only=True)

functions/information.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ def read_status(self):
137137

138138
self.broker.listen(self.state.broker_listen_duration, "status")
139139

140-
status_tree = self.state.last_message
140+
status_tree = self.state.last_messages.get("status")
141141

142142
self.state.print_status(update_only=True, endpoint_json=status_tree)
143143
return status_tree

state.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class State():
2424
def __init__(self):
2525
self.token = None
2626
self.error = None
27-
self.last_message = None
27+
self.last_messages = {}
2828
self.verbosity = 2
2929
self.broker_listen_duration = 15
3030
self.test_env = False

tests/tests_main.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -581,10 +581,10 @@ def test_listen_clear_last(self, mock_mqtt):
581581
'''Test listen command: clear last message'''
582582
mock_client = Mock()
583583
mock_mqtt.return_value = mock_client
584-
self.fb.state.last_message = "message"
584+
self.fb.state.last_messages = {'#': "message"}
585585
self.fb.state.test_env = False
586586
self.fb.listen(1)
587-
self.assertIsNone(self.fb.state.last_message)
587+
self.assertIsNone(self.fb.state.last_messages['#'])
588588

589589
@patch('requests.request')
590590
@patch('paho.mqtt.client.Client')
@@ -1074,7 +1074,7 @@ def exec_command():
10741074
def test_get_xyz(self):
10751075
'''Test get_xyz command'''
10761076
def exec_command():
1077-
self.fb.state.last_message = {
1077+
self.fb.state.last_messages['status'] = {
10781078
'location_data': {'position': {'x': 1, 'y': 2, 'z': 3}},
10791079
}
10801080
position = self.fb.get_xyz()
@@ -1091,7 +1091,7 @@ def exec_command():
10911091
def test_get_xyz_no_status(self):
10921092
'''Test get_xyz command: no status'''
10931093
def exec_command():
1094-
self.fb.state.last_message = None
1094+
self.fb.state.last_messages['status'] = None
10951095
position = self.fb.get_xyz()
10961096
self.assertIsNone(position)
10971097
self.send_command_test_helper(
@@ -1106,7 +1106,7 @@ def exec_command():
11061106
def test_check_position(self):
11071107
'''Test check_position command: at position'''
11081108
def exec_command():
1109-
self.fb.state.last_message = {
1109+
self.fb.state.last_messages['status'] = {
11101110
'location_data': {'position': {'x': 1, 'y': 2, 'z': 3}},
11111111
}
11121112
at_position = self.fb.check_position(1, 2, 3, 0)
@@ -1123,7 +1123,7 @@ def exec_command():
11231123
def test_check_position_false(self):
11241124
'''Test check_position command: not at position'''
11251125
def exec_command():
1126-
self.fb.state.last_message = {
1126+
self.fb.state.last_messages['status'] = {
11271127
'location_data': {'position': {'x': 1, 'y': 2, 'z': 3}},
11281128
}
11291129
at_position = self.fb.check_position(0, 0, 0, 2)
@@ -1140,7 +1140,7 @@ def exec_command():
11401140
def test_check_position_no_status(self):
11411141
'''Test check_position command: no status'''
11421142
def exec_command():
1143-
self.fb.state.last_message = None
1143+
self.fb.state.last_messages['status'] = None
11441144
at_position = self.fb.check_position(0, 0, 0, 2)
11451145
self.assertFalse(at_position)
11461146
self.send_command_test_helper(
@@ -1344,7 +1344,7 @@ def test_get_seed_tray_cell_invalid_pullout_direction(self):
13441344
def test_get_job_one(self):
13451345
'''Test get_job command: get one job'''
13461346
def exec_command():
1347-
self.fb.state.last_message = {
1347+
self.fb.state.last_messages['status'] = {
13481348
'jobs': {
13491349
'job name': {'status': 'working'},
13501350
},
@@ -1363,7 +1363,7 @@ def exec_command():
13631363
def test_get_job_all(self):
13641364
'''Test get_job command: get all jobs'''
13651365
def exec_command():
1366-
self.fb.state.last_message = {
1366+
self.fb.state.last_messages['status'] = {
13671367
'jobs': {
13681368
'job name': {'status': 'working'},
13691369
},
@@ -1382,7 +1382,7 @@ def exec_command():
13821382
def test_get_job_no_status(self):
13831383
'''Test get_job command: no status'''
13841384
def exec_command():
1385-
self.fb.state.last_message = None
1385+
self.fb.state.last_messages['status'] = None
13861386
job = self.fb.get_job('job name')
13871387
self.assertIsNone(job)
13881388
self.send_command_test_helper(

0 commit comments

Comments
 (0)