Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/frozenlist/__init__.py: 54%
61 statements
« prev ^ index » next coverage.py v7.3.2, created at 2023-12-08 06:40 +0000
« prev ^ index » next coverage.py v7.3.2, created at 2023-12-08 06:40 +0000
1import os
2import sys
3import types
4from collections.abc import MutableSequence
5from functools import total_ordering
6from typing import Type
8__version__ = "1.4.0"
10__all__ = ("FrozenList", "PyFrozenList") # type: Tuple[str, ...]
13NO_EXTENSIONS = bool(os.environ.get("FROZENLIST_NO_EXTENSIONS")) # type: bool
16@total_ordering
17class FrozenList(MutableSequence):
18 __slots__ = ("_frozen", "_items")
20 if sys.version_info >= (3, 9):
21 __class_getitem__ = classmethod(types.GenericAlias)
22 else:
24 @classmethod
25 def __class_getitem__(cls: Type["FrozenList"]) -> Type["FrozenList"]:
26 return cls
28 def __init__(self, items=None):
29 self._frozen = False
30 if items is not None:
31 items = list(items)
32 else:
33 items = []
34 self._items = items
36 @property
37 def frozen(self):
38 return self._frozen
40 def freeze(self):
41 self._frozen = True
43 def __getitem__(self, index):
44 return self._items[index]
46 def __setitem__(self, index, value):
47 if self._frozen:
48 raise RuntimeError("Cannot modify frozen list.")
49 self._items[index] = value
51 def __delitem__(self, index):
52 if self._frozen:
53 raise RuntimeError("Cannot modify frozen list.")
54 del self._items[index]
56 def __len__(self):
57 return self._items.__len__()
59 def __iter__(self):
60 return self._items.__iter__()
62 def __reversed__(self):
63 return self._items.__reversed__()
65 def __eq__(self, other):
66 return list(self) == other
68 def __le__(self, other):
69 return list(self) <= other
71 def insert(self, pos, item):
72 if self._frozen:
73 raise RuntimeError("Cannot modify frozen list.")
74 self._items.insert(pos, item)
76 def __repr__(self):
77 return f"<FrozenList(frozen={self._frozen}, {self._items!r})>"
79 def __hash__(self):
80 if self._frozen:
81 return hash(tuple(self))
82 else:
83 raise RuntimeError("Cannot hash unfrozen list.")
86PyFrozenList = FrozenList
89try:
90 from ._frozenlist import FrozenList as CFrozenList # type: ignore
92 if not NO_EXTENSIONS: # pragma: no cover
93 FrozenList = CFrozenList # type: ignore
94except ImportError: # pragma: no cover
95 pass