(fn)
| 1108 | return insert |
| 1109 | |
| 1110 | def __setitem__(fn): |
| 1111 | def __setitem__(self, index, value): |
| 1112 | if not isinstance(index, slice): |
| 1113 | existing = self[index] |
| 1114 | if existing is not None: |
| 1115 | __del(self, existing, None, index) |
| 1116 | value = __set(self, value, None, index) |
| 1117 | fn(self, index, value) |
| 1118 | else: |
| 1119 | # slice assignment requires __delitem__, insert, __len__ |
| 1120 | step = index.step or 1 |
| 1121 | start = index.start or 0 |
| 1122 | if start < 0: |
| 1123 | start += len(self) |
| 1124 | if index.stop is not None: |
| 1125 | stop = index.stop |
| 1126 | else: |
| 1127 | stop = len(self) |
| 1128 | if stop < 0: |
| 1129 | stop += len(self) |
| 1130 | |
| 1131 | if step == 1: |
| 1132 | if value is self: |
| 1133 | return |
| 1134 | for i in range(start, stop, step): |
| 1135 | if len(self) > start: |
| 1136 | del self[start] |
| 1137 | |
| 1138 | for i, item in enumerate(value): |
| 1139 | self.insert(i + start, item) |
| 1140 | else: |
| 1141 | rng = list(range(start, stop, step)) |
| 1142 | if len(value) != len(rng): |
| 1143 | raise ValueError( |
| 1144 | "attempt to assign sequence of size %s to " |
| 1145 | "extended slice of size %s" |
| 1146 | % (len(value), len(rng)) |
| 1147 | ) |
| 1148 | for i, item in zip(rng, value): |
| 1149 | self.__setitem__(i, item) |
| 1150 | |
| 1151 | _tidy(__setitem__) |
| 1152 | return __setitem__ |
| 1153 | |
| 1154 | def __delitem__(fn): |
| 1155 | def __delitem__(self, index): |
nothing calls this directly
no test coverage detected