Skip to content

Commit b136cab

Browse files
committed
fix/event_removal
``` jul 12 14:53:26 LenovoSatellite hivemind-voice-sat[9425]: 2024-07-12 14:53:26.777 - HiveMind-voice-sat - ovos_dinkum_listener.service:_record_end_signal:650 - DEBUG - Record end jul 12 14:53:26 LenovoSatellite hivemind-voice-sat[9425]: 2024-07-12 14:53:26.778 - HiveMind-voice-sat - hivemind_bus_client.client:on_mycroft:341 - DEBUG - registering mycroft event: recognizer_loop:speech.recognition.unknown jul 12 14:53:26 LenovoSatellite hivemind-voice-sat[9425]: 2024-07-12 14:53:26.779 - HiveMind-voice-sat - hivemind_bus_client.client:on_mycroft:341 - DEBUG - registering mycroft event: speak jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: 2024-07-12 14:53:34.780 - HiveMind-voice-sat - ovos_bus_client.client.client:_remove_normal:341 - DEBUG - Not able to find 'speak' jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: 2024-07-12 14:53:34.780 - HiveMind-voice-sat - ovos_dinkum_listener.service:run:334 - ERROR - voice_loop failed jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: Traceback (most recent call last): jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/ovos_dinkum_listener/service.py", line 330, in run jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: self.voice_loop.run() jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/ovos_dinkum_listener/voice_loop/voice_loop.py", line 269, in run jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: self._after_cmd(chunk) jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/ovos_dinkum_listener/voice_loop/voice_loop.py", line 798, in _after_cmd jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: self.record_end_callback() jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/ovos_dinkum_listener/service.py", line 659, in _record_end_signal jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: self.bus.emit(Message("recognizer_loop:record_end")) jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/hivemind_bus_client/client.py", line 308, in emit jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: self.internal_bus.emit(message.payload) jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/ovos_utils/fakebus.py", line 50, in emit jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: self.ee.emit(message.msg_type, message) jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/pyee/_base.py", line 115, in emit jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: handled = self._call_handlers(event, args, kwargs) jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/pyee/_base.py", line 98, in _call_handlers jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: self._emit_run(f, args, kwargs) jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/pyee/_base.py", line 83, in _emit_run jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: f(*args, **kwargs) jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/ovos_audio/utils.py", line 46, in func_wrapper jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: return func(self, message) jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: ^^^^^^^^^^^^^^^^^^^ jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/ovos_audio/audio.py", line 345, in _restore_volume_after_record jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: speak_msg_detected = self.bus.wait_for_message('speak', jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/hivemind_bus_client/client.py", line 370, in wait_for_message jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: return HiveMessageWaiter(self, message_type).wait(timeout) jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/hivemind_bus_client/client.py", line 58, in wait jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: self.bus.remove(self.msg_type, self._handler) jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/ovos_bus_client/client/client.py", line 330, in remove jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: self._remove_normal(event_name, func) jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/ovos_bus_client/client/client.py", line 342, in _remove_normal jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: self.emitter.remove_listener(event_name, func) jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/pyee/_base.py", line 155, in remove_listener jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: self._remove_listener(event, f) jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: File "/home/ovos/.venvs/ovos/lib/python3.11/site-packages/pyee/_base.py", line 150, in _remove_listener jul 12 14:53:34 LenovoSatellite hivemind-voice-sat[9425]: self._events[event].pop(f) ```
1 parent e67f1d6 commit b136cab

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

hivemind_bus_client/client.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import json
33
import ssl
44
from threading import Event
5-
from typing import Union, Optional
5+
from typing import Union, Optional, Callable
66

77
from ovos_bus_client import Message as MycroftMessage, MessageBusClient as OVOSBusClient
88
from ovos_bus_client.session import Session
@@ -32,13 +32,14 @@ class HiveMessageWaiter:
3232
message_type: message type to wait for
3333
"""
3434

35-
def __init__(self, bus, message_type: Union[HiveMessageType, str]):
35+
def __init__(self, bus: 'HiveMessageBusClient',
36+
message_type: Union[HiveMessageType, str]):
3637
self.bus = bus
3738
self.msg_type = message_type
3839
self.received_msg = None
3940
# Setup response handler
4041
self.response_event = Event()
41-
self.bus.on(message_type, self._handler)
42+
self.bus.on(self.msg_type, self._handler)
4243

4344
def _handler(self, message):
4445
"""Receive response data."""
@@ -60,9 +61,12 @@ def wait(self, timeout=3.0):
6061

6162

6263
class HivePayloadWaiter(HiveMessageWaiter):
63-
def __init__(self, payload_type: Union[HiveMessageType, str],
64+
def __init__(self, bus: 'HiveMessageBusClient',
65+
payload_type: Union[HiveMessageType, str],
66+
message_type: Union[HiveMessageType, str] = HiveMessageType.BUS,
6467
*args, **kwargs):
65-
super(HivePayloadWaiter, self).__init__(*args, **kwargs)
68+
super(HivePayloadWaiter, self).__init__(bus=bus, message_type=message_type,
69+
*args, **kwargs)
6670
self.payload_type = payload_type
6771

6872
def _handler(self, message):
@@ -355,6 +359,12 @@ def on(self, event_name, func):
355359
LOG.debug(f"registering handler: {event_name}")
356360
self.emitter.on(event_name, func)
357361

362+
def remove(self, event_name: str, func: Callable):
363+
if event_name not in list(HiveMessageType):
364+
self.internal_bus.remove(event_name, func)
365+
else: # hivemind message
366+
self.emitter.remove_listener(event_name, func)
367+
358368
# utility
359369
def wait_for_message(self, message_type: Union[HiveMessageType, str], timeout=3.0):
360370
"""Wait for a message of a specific type.
@@ -404,10 +414,11 @@ def wait_for_response(self, message: Union[MycroftMessage, HiveMessage],
404414
Returns:
405415
The received message or None if the response timed out
406416
"""
407-
if isinstance(message, MycroftMessage):
408-
message = HiveMessage(msg_type=HiveMessageType.BUS, payload=message)
409417
message_type = reply_type or message.msg_type
410-
waiter = HiveMessageWaiter(self, message_type) # Setup response handler
418+
if isinstance(message, MycroftMessage):
419+
waiter = HivePayloadWaiter(bus=self, payload_type=message_type)
420+
else:
421+
waiter = HiveMessageWaiter(bus=self, message_type=message_type) # Setup response handler
411422
# Send message and wait for it's response
412423
self.emit(message)
413424
return waiter.wait(timeout)

0 commit comments

Comments
 (0)