Исходный код EJIO.utils.struct.dict
## /utils/struct/dict.py
from threading import Lock
from collections.abc import Iterator, MutableMapping
from typing import Any
__all__ = [
'Dict',
]
[документация]
class Dict[K, V](MutableMapping[K, V]):
"""
Потокобезопасная обертка над стандартным словарем dict.
"""
__slots__ = ('_storage', '_lock')
def __init__(self, *args: Any, **kwargs: Any) -> None:
"""
Создает объект потокобезопасного словаря.
:param args: Параметры.
:param kwargs: Ключевые параметры.
"""
self._storage: dict[K, V] = dict(*args, **kwargs)
self._lock: Lock = Lock()
def __getitem__(self, key: K) -> V:
"""
Получает элемент словаря по ключу.
:param key: Ключ.
:return: Элемент словаря.
"""
with self._lock:
return self._storage[key]
def __setitem__(self, key: K, value: V) -> None:
"""
Установливает соостветствие между заданным ключом и значением в слоаре.
:param key: Ключ.
:param value: Значение.
"""
with self._lock:
self._storage[key] = value
def __delitem__(self, key: K) -> None:
"""
Удаляет элемент словаря по ключу.
:param key: Ключ.
"""
with self._lock:
del self._storage[key]
def __iter__(self) -> Iterator[K]:
"""
Создает итератор содержащий копию ключей словаря.
:return: Итератор по ключам словаря.
"""
with self._lock:
return iter(list(self._storage.keys()))
def __len__(self) -> int:
"""
Возвращает число, обозначающее количество пар ключ -> значение в словаре.
:return: Число элементов словаря.
"""
with self._lock:
return len(self._storage)
[документация]
def clear(self) -> None:
"""Очищает словарь."""
with self._lock:
self._storage.clear()
def __str__(self) -> str:
"""
Возвращает строковое представление словаря.
:return: Представления словаря в виде строки.
"""
with self._lock:
return str(self._storage)
def __repr__(self) -> str:
"""
Возвращает строковое представление словаря.
:return: Представления словаря в виде строки.
"""
with self._lock:
return f"Dict({self._storage!r})"