(fn)
| 1160 | return insert |
| 1161 | |
| 1162 | def __setitem__(fn): |
| 1163 | def __setitem__(self, index, value): |
| 1164 | if not isinstance(index, slice): |
| 1165 | existing = self[index] |
| 1166 | if existing is not None: |
| 1167 | __del(self, existing, None, index) |
| 1168 | value = __set(self, value, None, index) |
| 1169 | fn(self, index, value) |
| 1170 | else: |
| 1171 | # slice assignment requires __delitem__, insert, __len__ |
| 1172 | step = index.step or 1 |
| 1173 | start = index.start or 0 |
| 1174 | if start < 0: |
| 1175 | start += len(self) |
| 1176 | if index.stop is not None: |
| 1177 | stop = index.stop |
| 1178 | else: |
| 1179 | stop = len(self) |
| 1180 | if stop < 0: |
| 1181 | stop += len(self) |
| 1182 | |
| 1183 | if step == 1: |
| 1184 | if value is self: |
| 1185 | return |
| 1186 | for i in range(start, stop, step): |
| 1187 | if len(self) > start: |
| 1188 | del self[start] |
| 1189 | |
| 1190 | for i, item in enumerate(value): |
| 1191 | self.insert(i + start, item) |
| 1192 | else: |
| 1193 | rng = list(range(start, stop, step)) |
| 1194 | if len(value) != len(rng): |
| 1195 | raise ValueError( |
| 1196 | "attempt to assign sequence of size %s to " |
| 1197 | "extended slice of size %s" |
| 1198 | % (len(value), len(rng)) |
| 1199 | ) |
| 1200 | for i, item in zip(rng, value): |
| 1201 | self.__setitem__(i, item) |
| 1202 | |
| 1203 | _tidy(__setitem__) |
| 1204 | return __setitem__ |
| 1205 | |
| 1206 | def __delitem__(fn): |
| 1207 | def __delitem__(self, index): |
nothing calls this directly
no test coverage detected