11"""
2-
3-
2+ This module implements the ObjectList class, which is used to peform type checks
3+ and handle relationships within the Neo Block-Segment-Data hierarchy.
44"""
55
6+ import sys
67from neo .core .baseneo import BaseNeo
78
89
910class ObjectList :
1011 """
11- handle relationships within Neo hierarchy
12+ This class behaves like a list, but has additional functionality
13+ to handle relationships within Neo hierarchy, and perform type checks.
1214 """
1315
1416 def __init__ (self , allowed_contents , parent = None ):
@@ -33,6 +35,8 @@ def _handle_append(self, obj):
3335 # set the child-parent relationship
3436 if self .parent :
3537 relationship_name = self .parent .__class__ .__name__ .lower ()
38+ if relationship_name == "group" :
39+ raise Exception ("Objects in groups should not link to the group as their parent" )
3640 current_parent = getattr (obj , relationship_name )
3741 if current_parent != self .parent :
3842 setattr (obj , relationship_name , self .parent )
@@ -63,6 +67,7 @@ def __iadd__(self, objects):
6367 for obj in objects :
6468 self ._handle_append (obj )
6569 self .contents .extend (objects )
70+ return self
6671
6772 def __iter__ (self ):
6873 return iter (self .contents )
@@ -73,11 +78,8 @@ def __getitem__(self, i):
7378 def __len__ (self ):
7479 return len (self .contents )
7580
76- def __reversed__ (self ):
77- raise NotImplementedError
78-
79- def __setitem__ (self , i ):
80- raise NotImplementedError
81+ def __setitem__ (self , key , value ):
82+ self .contents [key ] = value
8183
8284 def append (self , obj ):
8385 self ._handle_append (obj )
@@ -89,28 +91,26 @@ def extend(self, objects):
8991 self .contents .extend (objects )
9092
9193 def clear (self ):
92- raise NotImplementedError
93-
94- def copy (self ):
95- raise NotImplementedError
94+ self .contents = []
9695
97- def count (self ):
98- raise NotImplementedError
96+ def count (self , value ):
97+ return self . contents . count ( value )
9998
100- def index (self ):
101- raise NotImplementedError
99+ def index (self , value , start = 0 , stop = sys . maxsize ):
100+ return self . contents . index ( value , start , stop )
102101
103- def insert (self ):
104- raise NotImplementedError
102+ def insert (self , index , obj ):
103+ self ._handle_append (obj )
104+ self .contents [index ] = obj
105105
106- def pop (self ):
107- raise NotImplementedError
106+ def pop (self , index = - 1 ):
107+ return self . contents . pop ( index )
108108
109- def remove (self ):
110- raise NotImplementedError
109+ def remove (self , value ):
110+ return self . contents . remove ( value )
111111
112112 def reverse (self ):
113- raise NotImplementedError
113+ raise self . contents . reverse ()
114114
115- def sort (self ):
116- raise NotImplementedError
115+ def sort (self , * args , key = None , reverse = False ):
116+ self . contents . sort ( * args , key = key , reverse = reverse )
0 commit comments