Make LimitedSizeDict a generic (#78440)
* Make LimitedSizeDict a generic * Remove comments * Use super() * Apply suggestion Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
This commit is contained in:
parent
ad25a966a8
commit
374b72f052
1 changed files with 12 additions and 6 deletions
|
@ -1,22 +1,28 @@
|
||||||
"""Helpers for script and automation tracing and debugging."""
|
"""Helpers for script and automation tracing and debugging."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
from typing import Any, TypeVar
|
||||||
|
|
||||||
|
_KT = TypeVar("_KT")
|
||||||
|
_VT = TypeVar("_VT")
|
||||||
|
|
||||||
|
|
||||||
class LimitedSizeDict(OrderedDict):
|
class LimitedSizeDict(OrderedDict[_KT, _VT]):
|
||||||
"""OrderedDict limited in size."""
|
"""OrderedDict limited in size."""
|
||||||
|
|
||||||
def __init__(self, *args, **kwds):
|
def __init__(self, *args: Any, **kwds: Any) -> None:
|
||||||
"""Initialize OrderedDict limited in size."""
|
"""Initialize OrderedDict limited in size."""
|
||||||
self.size_limit = kwds.pop("size_limit", None)
|
self.size_limit = kwds.pop("size_limit", None)
|
||||||
OrderedDict.__init__(self, *args, **kwds)
|
super().__init__(*args, **kwds)
|
||||||
self._check_size_limit()
|
self._check_size_limit()
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
def __setitem__(self, key: _KT, value: _VT) -> None:
|
||||||
"""Set item and check dict size."""
|
"""Set item and check dict size."""
|
||||||
OrderedDict.__setitem__(self, key, value)
|
super().__setitem__(key, value)
|
||||||
self._check_size_limit()
|
self._check_size_limit()
|
||||||
|
|
||||||
def _check_size_limit(self):
|
def _check_size_limit(self) -> None:
|
||||||
"""Check dict size and evict items in FIFO order if needed."""
|
"""Check dict size and evict items in FIFO order if needed."""
|
||||||
if self.size_limit is not None:
|
if self.size_limit is not None:
|
||||||
while len(self) > self.size_limit:
|
while len(self) > self.size_limit:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue