Home Assistant Unofficial Reference 2024.12.1
limited_size_dict.py
Go to the documentation of this file.
1 """Helpers for script and automation tracing and debugging."""
2 
3 from __future__ import annotations
4 
5 from collections import OrderedDict
6 from typing import Any
7 
8 
9 class LimitedSizeDict[_KT, _VT](OrderedDict[_KT, _VT]):
10  """OrderedDict limited in size."""
11 
12  def __init__(self, *args: Any, **kwds: Any) -> None:
13  """Initialize OrderedDict limited in size."""
14  self.size_limitsize_limit = kwds.pop("size_limit", None)
15  super().__init__(*args, **kwds)
16  self._check_size_limit_check_size_limit()
17 
18  def __setitem__(self, key: _KT, value: _VT) -> None:
19  """Set item and check dict size."""
20  super().__setitem__(key, value)
21  self._check_size_limit_check_size_limit()
22 
23  def _check_size_limit(self) -> None:
24  """Check dict size and evict items in FIFO order if needed."""
25  if self.size_limitsize_limit is not None:
26  while len(self) > self.size_limitsize_limit:
27  self.popitem(last=False)