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

1from .message import Message 

2 

3class Messages: 

4 """ 

5 Collection of parsed message schemas 

6 """ 

7 

8 def __init__(self): 

9 self._by_id:dict[int, Message] = {} 

10 self._by_name:dict[str, Message] = {} 

11 

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 

22 

23 

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}'") 

35 

36 def __len__(self) -> int: 

37 """ 

38 Returns the number of messages in the collection. 

39 """ 

40 return len(self._by_id) 

41 

42 

43 

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)