Coverage for sbe2/schema/messages.py: 100%
26 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-21 20:49 +0200
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-21 20:49 +0200
1from .message import Message
3class Messages:
4 """
5 Collection of parsed message schemas
6 """
8 def __init__(self):
9 self._by_id:dict[int, Message] = {}
10 self._by_name:dict[str, Message] = {}
12 def add(self, msg: Message):
13 """
14 Adds message to the collection
15 """
16 if msg.id in self._by_id:
17 raise ValueError(f'Message with ID {msg.id} is already defined')
18 if msg.name in self._by_name:
19 raise ValueError(f"Message with name '{msg.name}' is already defined")
20 self._by_id[msg.id] = msg
21 self._by_name[msg.name] = msg
24 def __getitem__(self, key: int|str) -> Message:
25 """
26 Returns Message by ID or name.
27 Raises KeyError if not found.
28 """
29 if isinstance(key, str):
30 return self._by_name[key]
31 if isinstance(key, int):
32 return self._by_id[key]
33 key_type = type(key)
34 raise KeyError(f"Unrecognized message key type: '{key_type}'")
36 def __len__(self) -> int:
37 """
38 Returns the number of messages in the collection.
39 """
40 return len(self._by_id)
44 def get(self, key: int|str) -> Message | None:
45 """
46 Returns Message by ID or name
47 """
48 if isinstance(key, str):
49 return self._by_name.get(key)
50 if isinstance(key, int):
51 return self._by_id.get(key)