Skip to content

Commit ea63259

Browse files
committed
implement all of the destructive methods for JsonArray
1 parent 46cfe2c commit ea63259

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

jsonobject/base.py

+59
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,65 @@ def extend(self, wrapped_list):
252252
self._obj.extend(unwrapped_list)
253253
super(JsonArray, self).extend(wrapped_list)
254254

255+
def insert(self, index, wrapped):
256+
wrapped, unwrapped = self._wrapper.unwrap(wrapped)
257+
self._obj.insert(index, unwrapped)
258+
super(JsonArray, self).insert(index, wrapped)
259+
260+
def remove(self, value):
261+
i = self.index(value)
262+
super(JsonArray, self).remove(value)
263+
self._obj.pop(i)
264+
265+
def pop(self, index=-1):
266+
self._obj.pop(index)
267+
return super(JsonArray, self).pop(index)
268+
269+
def sort(self, cmp=None, key=None, reverse=False):
270+
zipped = zip(self, self._obj)
271+
if key:
272+
new_key = lambda pair: key(pair[0])
273+
zipped.sort(key=new_key, reverse=reverse)
274+
elif cmp:
275+
new_cmp = lambda pair1, pair2: cmp(pair1[0], pair2[0])
276+
zipped.sort(cmp=new_cmp, reverse=reverse)
277+
else:
278+
zipped.sort(reverse=reverse)
279+
280+
wrapped_list, unwrapped_list = zip(*zipped)
281+
while self:
282+
self.pop()
283+
super(JsonArray, self).extend(wrapped_list)
284+
self._obj.extend(unwrapped_list)
285+
286+
def reverse(self):
287+
self._obj.reverse()
288+
super(JsonArray, self).reverse()
289+
290+
def __fix_slice(self, i, j):
291+
length = len(self)
292+
if j < 0:
293+
j += length
294+
if i < 0:
295+
i += length
296+
if i > length:
297+
i = length
298+
if j > length:
299+
j = length
300+
return i, j
301+
302+
def __setslice__(self, i, j, sequence):
303+
i, j = self.__fix_slice(i, j)
304+
for _ in range(j - i):
305+
self.pop(i)
306+
for k, wrapped in enumerate(sequence):
307+
self.insert(i + k, wrapped)
308+
309+
def __delslice__(self, i, j):
310+
i, j = self.__fix_slice(i, j)
311+
for _ in range(j - i):
312+
self.pop(i)
313+
255314

256315
class SimpleDict(dict):
257316
"""

0 commit comments

Comments
 (0)