Commit dd573766 authored by Dom Sekotill's avatar Dom Sekotill
Browse files

Handle log lines separately from events

parent 10d37bda
Loading
Loading
Loading
Loading
+20 −20
Original line number Diff line number Diff line
@@ -194,10 +194,10 @@ class SendMessageTests(unittest.TestCase):
				b"OK",  # Response to "ATTACH"
				b"UNEXPECTED1",
				b"UNEXPECTED2",
				b"<2>SOME-MESSAGE",
				b"<2>CTRL-EVENT-EXAMPLE",
				b"OK",  # Response to "DETACH"
			]
			assert await client.event("SOME-MESSAGE")
			assert await client.event("CTRL-EVENT-EXAMPLE")


class EventTests(unittest.TestCase):
@@ -221,12 +221,12 @@ class EventTests(unittest.TestCase):
		async with self.client as client, anyio.fail_after(2):
			client.sock.recv.side_effect = [
				b"OK",  # Respond to ATTACH
				b"<2>EXAMPLE-EVENT",
				b"<2>CTRL-EVENT-EXAMPLE",
				b"OK",  # Respond to DETACH
			]
			prio, evt, args = await client.event("EXAMPLE-EVENT")
			prio, evt, args = await client.event("CTRL-EVENT-EXAMPLE")
			assert prio == 2
			assert evt == "EXAMPLE-EVENT"
			assert evt == "CTRL-EVENT-EXAMPLE"
			assert args is None

	@anyio_mock.with_anyio()
@@ -238,14 +238,14 @@ class EventTests(unittest.TestCase):
			client.sock.recv.side_effect = [
				b"OK",  # Respond to ATTACH
				b"<1>OTHER-MESSAGE",
				b"<2>OTHER-MESSAGE",
				b"<4>EXAMPLE-EVENT",
				b"<2>CTRL-EVENT-OTHER",
				b"<4>CTRL-EVENT-EXAMPLE",
				b"OK",  # Respond to DETACH
				b"<3>OTHER-MESSAGE",
			]
			prio, evt, args = await client.event("EXAMPLE-EVENT")
			prio, evt, args = await client.event("CTRL-EVENT-EXAMPLE")
			assert prio == 4
			assert evt == "EXAMPLE-EVENT"
			assert evt == "CTRL-EVENT-EXAMPLE"
			assert args is None

	@anyio_mock.with_anyio()
@@ -257,17 +257,17 @@ class EventTests(unittest.TestCase):
			client.sock.recv.side_effect = [
				b"OK",  # Respond to ATTACH
				b"<1>OTHER-MESSAGE",
				b"<2>OTHER-MESSAGE",
				b"<4>EXAMPLE-EVENT3",
				b"<4>EXAMPLE-EVENT1",
				b"<2>CTRL-EVENT-OTHER",
				b"<4>CTRL-EVENT-EXAMPLE3",
				b"<4>CTRL-EVENT-EXAMPLE1",
				b"OK",  # Respond to DETACH
				b"<3>OTHER-MESSAGE",
				b"<3>CTRL-EVENT-OTHER",
			]
			prio, evt, args = await client.event(
				"EXAMPLE-EVENT1", "EXAMPLE-EVENT2", "EXAMPLE-EVENT3"
				"CTRL-EVENT-EXAMPLE1", "CTRL-EVENT-EXAMPLE2", "CTRL-EVENT-EXAMPLE3"
			)
			assert prio == 4
			assert evt == "EXAMPLE-EVENT3"
			assert evt == "CTRL-EVENT-EXAMPLE3"
			assert args is None

	@anyio_mock.with_anyio()
@@ -280,18 +280,18 @@ class EventTests(unittest.TestCase):
				b"<1>OTHER-MESSAGE",
				b"OK",  # Respond to SOME_COMMAND
				b"OK",  # Respond to ATTACH
				b"<2>OTHER-MESSAGE",
				b"<4>EXAMPLE-EVENT",
				b"<3>OTHER-MESSAGE",
				b"<2>CTRL-EVENT-OTHER",
				b"<4>CTRL-EVENT-EXAMPLE",
				b"<3>CTRL-EVENT-OTHER",
				b"OK",  # Respond to DETACH
				b"FOO",
			]

			assert await client.send_command("SOME_COMMAND") is None

			prio, evt, args = await client.event("EXAMPLE-EVENT")
			prio, evt, args = await client.event("CTRL-EVENT-EXAMPLE")
			assert prio == 4
			assert evt == "EXAMPLE-EVENT"
			assert evt == "CTRL-EVENT-EXAMPLE"
			assert args is None

			assert await client.send_command("SOME_COMMAND", expect="FOO") is None
+8 −4
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ class BaseClient:
	InterfaceClient.
	"""

	event_regex = regex(r"<([0-9]+)>(\S+)(?:\s(.*))?")
	event_regex = regex(r"<([0-9]+)>(?:((?:CTRL|WPS|AP|P2P)-[A-Z0-9-]+)(?:\s|$))?(.+)?")

	def __init__(self, *, logger=None):
		self.logger = logger or logging.getLogger(__package__)
@@ -201,16 +201,20 @@ class BaseClient:
				self.logger.warning("Unexpected response message: %s", msg)
			return

		prio, name, args = match.groups()
		prio, name, msg = match.groups()
		prio = EventPriority(int(prio))

		if name is None:
			self.logger.log(prio.get_logger_level(), msg)
			return

		try:
			queues = self._eventqueues[name]
		except KeyError:
			self.logger.log(prio.get_logger_level(), "%s [UNEXPECTED]: %s", name, args)
			self.logger.debug("[unhandled] %s: %s", name, msg or "[no arguments]")
		else:
			for msgqueue in queues:
				await msgqueue.put((prio, name, args))
				await msgqueue.put((prio, name, msg))

	@contextlib.contextmanager
	def _events_queue(self, events: Union[Sequence, Set]):