Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/frozenlist/__init__.py: 53%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import os
2import types
3from collections.abc import MutableSequence
4from functools import total_ordering
6__version__ = "1.8.0"
8__all__ = ("FrozenList", "PyFrozenList") # type: Tuple[str, ...]
11NO_EXTENSIONS = bool(os.environ.get("FROZENLIST_NO_EXTENSIONS")) # type: bool
14@total_ordering
15class FrozenList(MutableSequence):
16 __slots__ = ("_frozen", "_items")
17 __class_getitem__ = classmethod(types.GenericAlias)
19 def __init__(self, items=None):
20 self._frozen = False
21 if items is not None:
22 items = list(items)
23 else:
24 items = []
25 self._items = items
27 @property
28 def frozen(self):
29 return self._frozen
31 def freeze(self):
32 self._frozen = True
34 def __getitem__(self, index):
35 return self._items[index]
37 def __setitem__(self, index, value):
38 if self._frozen:
39 raise RuntimeError("Cannot modify frozen list.")
40 self._items[index] = value
42 def __delitem__(self, index):
43 if self._frozen:
44 raise RuntimeError("Cannot modify frozen list.")
45 del self._items[index]
47 def __len__(self):
48 return self._items.__len__()
50 def __iter__(self):
51 return self._items.__iter__()
53 def __reversed__(self):
54 return self._items.__reversed__()
56 def __eq__(self, other):
57 return list(self) == other
59 def __le__(self, other):
60 return list(self) <= other
62 def insert(self, pos, item):
63 if self._frozen:
64 raise RuntimeError("Cannot modify frozen list.")
65 self._items.insert(pos, item)
67 def __repr__(self):
68 return f"<FrozenList(frozen={self._frozen}, {self._items!r})>"
70 def __hash__(self):
71 if self._frozen:
72 return hash(tuple(self))
73 else:
74 raise RuntimeError("Cannot hash unfrozen list.")
77PyFrozenList = FrozenList
80if not NO_EXTENSIONS:
81 try:
82 from ._frozenlist import FrozenList as CFrozenList # type: ignore
83 except ImportError: # pragma: no cover
84 pass
85 else:
86 FrozenList = CFrozenList # type: ignore