Исходный код 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})"