Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/frozenlist/__init__.py: 54%
61 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:52 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:52 +0000
1import os
2import sys
3import types
4from collections.abc import MutableSequence
5from functools import total_ordering
6from typing import Tuple, Type
8__version__ = "1.3.1"
10__all__ = ("FrozenList", "PyFrozenList") # type: Tuple[str, ...]
13NO_EXTENSIONS = bool(os.environ.get("FROZENLIST_NO_EXTENSIONS")) # type: bool
16@total_ordering
17class FrozenList(MutableSequence):
19 __slots__ = ("_frozen", "_items")
21 if sys.version_info >= (3, 9):
22 __class_getitem__ = classmethod(types.GenericAlias)
23 else:
25 @classmethod
26 def __class_getitem__(cls: Type["FrozenList"]) -> Type["FrozenList"]:
27 return cls
29 def __init__(self, items=None):
30 self._frozen = False
31 if items is not None:
32 items = list(items)
33 else:
34 items = []
35 self._items = items
37 @property
38 def frozen(self):
39 return self._frozen
41 def freeze(self):
42 self._frozen = True
44 def __getitem__(self, index):
45 return self._items[index]
47 def __setitem__(self, index, value):
48 if self._frozen:
49 raise RuntimeError("Cannot modify frozen list.")
50 self._items[index] = value
52 def __delitem__(self, index):
53 if self._frozen:
54 raise RuntimeError("Cannot modify frozen list.")
55 del self._items[index]
57 def __len__(self):
58 return self._items.__len__()
60 def __iter__(self):
61 return self._items.__iter__()
63 def __reversed__(self):
64 return self._items.__reversed__()
66 def __eq__(self, other):
67 return list(self) == other
69 def __le__(self, other):
70 return list(self) <= other
72 def insert(self, pos, item):
73 if self._frozen:
74 raise RuntimeError("Cannot modify frozen list.")
75 self._items.insert(pos, item)
77 def __repr__(self):
78 return f"<FrozenList(frozen={self._frozen}, {self._items!r})>"
80 def __hash__(self):
81 if self._frozen:
82 return hash(tuple(self))
83 else:
84 raise RuntimeError("Cannot hash unfrozen list.")
87PyFrozenList = FrozenList
90try:
91 from ._frozenlist import FrozenList as CFrozenList # type: ignore
93 if not NO_EXTENSIONS: # pragma: no cover
94 FrozenList = CFrozenList # type: ignore
95except ImportError: # pragma: no cover
96 pass