prevent messages stack

This commit is contained in:
Will McGugan
2023-02-23 15:26:41 +00:00
parent 0f1251d0bf
commit fd9ce05305

View File

@@ -161,10 +161,7 @@ class MessagePump(metaclass=MessagePumpMeta):
`True` if the message will be sent, or `False` if it is disabled. `True` if the message will be sent, or `False` if it is disabled.
""" """
message_type = type(message) message_type = type(message)
if ( if self._prevent_events and message_type in self._prevent_events[-1]:
self._prevent_message_types_stack
and message_type in self._prevent_message_types_stack[-1]
):
return False return False
return type(message) not in self._disabled_messages return type(message) not in self._disabled_messages
@@ -475,12 +472,11 @@ class MessagePump(metaclass=MessagePumpMeta):
if message.no_dispatch: if message.no_dispatch:
return return
with self.prevent(*message._prevent): # Allow apps to treat events and messages separately
# Allow apps to treat events and messages separately if isinstance(message, Event):
if isinstance(message, Event): await self.on_event(message)
await self.on_event(message) else:
else: await self._on_message(message)
await self._on_message(message)
await self._flush_next_callbacks() await self._flush_next_callbacks()
def _get_dispatch_methods( def _get_dispatch_methods(
@@ -557,27 +553,14 @@ class MessagePump(metaclass=MessagePumpMeta):
``` ```
""" """
if self._prevent_message_types_stack: if self._prevent_events:
self._prevent_message_types_stack.append( self._prevent_events.append(self._prevent_events[-1].union(message_types))
self._prevent_message_types_stack[-1].union(message_types)
)
else: else:
self._prevent_message_types_stack.append(set(message_types)) self._prevent_events.append(set(message_types))
try: try:
yield yield
finally: finally:
self._prevent_message_types_stack.pop() self._prevent_events.pop()
def is_prevented(self, message_type: type[Message]) -> bool:
"""Check if a message type is currently prevented from posting with [prevent][textual.message_pump.MessagePump.prevent].
Args:
message_type: A message type.
Returns:
`True` if the message type is currently prevented, otherwise `False`
"""
return message_type in self._prevent_message_types_stack
async def post_message(self, message: Message) -> bool: async def post_message(self, message: Message) -> bool:
"""Post a message or an event to this message pump. """Post a message or an event to this message pump.
@@ -594,8 +577,6 @@ class MessagePump(metaclass=MessagePumpMeta):
return False return False
if not self.check_message_enabled(message): if not self.check_message_enabled(message):
return True return True
if self._prevent_message_types_stack:
message._prevent.update(self._prevent_message_types_stack[-1])
await self._message_queue.put(message) await self._message_queue.put(message)
return True return True
@@ -618,8 +599,6 @@ class MessagePump(metaclass=MessagePumpMeta):
return False return False
if not self.check_message_enabled(message): if not self.check_message_enabled(message):
return False return False
if self._prevent_message_types_stack:
message._prevent.update(self._prevent_message_types_stack[-1])
await self._message_queue.put(message) await self._message_queue.put(message)
return True return True