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

1import os 

2import sys 

3import types 

4from collections.abc import MutableSequence 

5from functools import total_ordering 

6from typing import Tuple, Type 

7 

8__version__ = "1.3.1" 

9 

10__all__ = ("FrozenList", "PyFrozenList") # type: Tuple[str, ...] 

11 

12 

13NO_EXTENSIONS = bool(os.environ.get("FROZENLIST_NO_EXTENSIONS")) # type: bool 

14 

15 

16@total_ordering 

17class FrozenList(MutableSequence): 

18 

19 __slots__ = ("_frozen", "_items") 

20 

21 if sys.version_info >= (3, 9): 

22 __class_getitem__ = classmethod(types.GenericAlias) 

23 else: 

24 

25 @classmethod 

26 def __class_getitem__(cls: Type["FrozenList"]) -> Type["FrozenList"]: 

27 return cls 

28 

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 

36 

37 @property 

38 def frozen(self): 

39 return self._frozen 

40 

41 def freeze(self): 

42 self._frozen = True 

43 

44 def __getitem__(self, index): 

45 return self._items[index] 

46 

47 def __setitem__(self, index, value): 

48 if self._frozen: 

49 raise RuntimeError("Cannot modify frozen list.") 

50 self._items[index] = value 

51 

52 def __delitem__(self, index): 

53 if self._frozen: 

54 raise RuntimeError("Cannot modify frozen list.") 

55 del self._items[index] 

56 

57 def __len__(self): 

58 return self._items.__len__() 

59 

60 def __iter__(self): 

61 return self._items.__iter__() 

62 

63 def __reversed__(self): 

64 return self._items.__reversed__() 

65 

66 def __eq__(self, other): 

67 return list(self) == other 

68 

69 def __le__(self, other): 

70 return list(self) <= other 

71 

72 def insert(self, pos, item): 

73 if self._frozen: 

74 raise RuntimeError("Cannot modify frozen list.") 

75 self._items.insert(pos, item) 

76 

77 def __repr__(self): 

78 return f"<FrozenList(frozen={self._frozen}, {self._items!r})>" 

79 

80 def __hash__(self): 

81 if self._frozen: 

82 return hash(tuple(self)) 

83 else: 

84 raise RuntimeError("Cannot hash unfrozen list.") 

85 

86 

87PyFrozenList = FrozenList 

88 

89 

90try: 

91 from ._frozenlist import FrozenList as CFrozenList # type: ignore 

92 

93 if not NO_EXTENSIONS: # pragma: no cover 

94 FrozenList = CFrozenList # type: ignore 

95except ImportError: # pragma: no cover 

96 pass