Documentation and cleanup for APIItem mixin.

This commit is contained in:
Jeremy Goecks
2013-08-20 14:08:27 -04:00
parent fbbcfbbbbd
commit 62d5441e8d
+25 -11
View File
@@ -160,19 +160,34 @@ class UsesAnnotations:
class APIItem:
""" Mixin for api representation. """
#api_collection_visible_keys = ( 'id' )
#api_element_visible_keys = ( 'id' )
def get_api_value( self, view='collection', value_mapper = None ):
def get_api_value( self, view='collection', value_mapper=None ):
"""
Return item dictionary.
"""
if not value_mapper:
value_mapper = {}
def get_value( key, item ):
"""
Recursive helper function to get item values.
"""
# FIXME: why use exception here? Why not look for key in value_mapper
# first and then default to get_api_value?
try:
return item.get_api_value( view=view, value_mapper=value_mapper )
except:
if key in value_mapper:
return value_mapper.get( key )( item )
return item
if value_mapper is None:
value_mapper = {}
rval = {}
# Create dict to represent item.
rval = dict(
model_class=self.__class__.__name__
)
# Fill item dict with visible keys.
try:
visible_keys = self.__getattribute__( 'api_' + view + '_visible_keys' )
except AttributeError:
@@ -181,13 +196,12 @@ class APIItem:
try:
item = self.__getattribute__( key )
if type( item ) == InstrumentedList:
rval[key] = []
rval[ key ] = []
for i in item:
rval[key].append( get_value( key, i ) )
rval[ key ].append( get_value( key, i ) )
else:
rval[key] = get_value( key, item )
rval[ key ] = get_value( key, item )
except AttributeError:
rval[key] = None
rval[ key ] = None
rval['model_class'] = self.__class__.__name__
return rval