@@ -4,30 +4,32 @@ class Data(object):
44 def __init__ (self , json ):
55 self .json = json
66 self .index = 0
7+ self ._data = {}
8+ for row in self .json ['page' ]:
9+ el = DataElement (self .columns , row )
10+ self ._data [str (el )] = el
711
812 def __repr__ (self ):
9- return 'OPUS API Data object (with {} elements)' .format (self .count )
13+ return 'OPUS API Data object (with {} elements):\n ' .format (len (self )) + \
14+ '\n ' .join (' - {}' .format (key ) for key , _ in self .items ())
1015
1116 def __len__ (self ):
12- return self .count
17+ return len ( self ._data )
1318
14- def __getitem__ (self , index ):
15- return self .json [ 'page' ][ index ]
19+ def __getitem__ (self , attr ):
20+ return self ._data [ attr ]
1621
1722 def __iter__ (self ):
18- return self
23+ return iter ( self . _data )
1924
20- def __next__ (self ):
21- try :
22- result = self .__getitem__ (self .index )
23- except IndexError :
24- self .index = 0
25- raise StopIteration
26- self .index += 1
27- return result
25+ def keys (self ):
26+ return self ._data .keys ()
2827
29- def next (self ):
30- return self .__next__ ()
28+ def items (self ):
29+ return self ._data .items ()
30+
31+ def values (self ):
32+ return self ._data .values ()
3133
3234 @property
3335 def count (self ):
@@ -48,3 +50,47 @@ def page_no(self):
4850 @property
4951 def labels (self ):
5052 return self .json ['labels' ]
53+
54+ @property
55+ def columns (self ):
56+ return self .json ['columns' ]
57+
58+ class DataElement (object ):
59+ def __init__ (self , columns , row ):
60+ self ._columns = columns
61+ self ._row = row
62+ self ._id = None
63+ self ._data = {}
64+ for column , value in zip (columns , row ):
65+ if 'Ring Observation ID' in column :
66+ self ._id = value
67+ else :
68+ self ._data [column ] = value
69+
70+ if self ._id is None :
71+ raise KeyError ('`Ring Observation ID` key is missing in `cols` query' )
72+
73+ def __repr__ (self ):
74+ return 'Ring Observation ID: {}\n ' .format (str (self )) + \
75+ '\n ' .join (' - {}: {}' .format (key , value ) for key , value in self .items ())
76+
77+ def __str__ (self ):
78+ return self ._id
79+
80+ def __len__ (self ):
81+ return len (self ._data )
82+
83+ def __getitem__ (self , attr ):
84+ return self ._data [attr ]
85+
86+ def __iter__ (self ):
87+ return iter (self ._data )
88+
89+ def keys (self ):
90+ return self ._data .keys ()
91+
92+ def items (self ):
93+ return self ._data .items ()
94+
95+ def values (self ):
96+ return self ._data .values ()
0 commit comments