def testDataContextNavigatorDict(self): dc = {'foo': 'bar', 'this': [1,2,3], 'that': {'wat': 1, 'err': {'ha':'ja'}}} dcn = DataContextNavigator(dc) self.assertEqual(dcn.navigate('.'), dc) self.assertEqual(dcn.navigate('foo'), 'bar') self.assertEqual(dcn.navigate('this'), [1,2,3]) self.assertEqual(dcn.navigate('that'), {'wat': 1, 'err': {'ha':'ja'}}) self.assertEqual(dcn.navigate('that.err'), {'ha':'ja'}) self.assertEqual(dcn.navigate('that.err.ha'), 'ja')
def __setup_data_context(self): dc = self.data_context dc_navigator = DataContextNavigator(dc) for col_name, col in self.columns.iteritems(): metadata = Column.get_metadata(col) if metadata.uses_data_context: dc_prop = col_name if metadata.data_context == True else\ metadata.data_context try: column_context = dc_navigator.navigate(dc_prop) except (AttributeError, KeyError): raise Exception(type(self).__name__ + ', missing data_context value for column ' '%(col_name)s: %(dc_prop)s' '\n\t data_context = %(dc)s' % locals()) # allow binding primitives to single argument functions if not isinstance(column_context, dict): args = inspect.getargspec(metadata.inner_func).args if args == ['self']: column_context = {tuple():column_context} else: raise Exception(type(self).__name__ + ', data_context error for column ' '%s(col_name), unexpected data type. ' 'Must be dictionary, since the function' ' takes multiple arguments ' '(not just "self"\ndata_context=' '%(column_context)' % column_context) for args, val in column_context.iteritems(): col.set_value(args, val)
def testDataContextNavigatorObj(self): dc = TestObj1() dcn = DataContextNavigator(dc) self.assertEqual(dcn.navigate('foo'), dc.foo) self.assertEqual(dcn.navigate('foo.that'), dc.foo.that) self.assertEqual(dcn.navigate('foo.err'), dc.foo.err) self.assertEqual(dcn.navigate('foo.err.ha'), 'ja') self.assertEqual(dcn.navigate('bar'), dc.bar) self.assertEqual(dcn.navigate('bar.who'), dc.bar.who)
def __setup_data_context(self): dc = self.data_context dc_navigator = DataContextNavigator(dc) for col_name, col in self.columns.iteritems(): metadata = Column.get_metadata(col) if metadata.uses_data_context: dc_prop = col_name if metadata.data_context == True else\ metadata.data_context try: column_context = dc_navigator.navigate(dc_prop) except (AttributeError, KeyError): raise Exception( type(self).__name__ + ', missing data_context value for column ' '%(col_name)s: %(dc_prop)s' '\n\t data_context = %(dc)s' % locals()) # allow binding primitives to single argument functions if not isinstance(column_context, dict): args = inspect.getargspec(metadata.inner_func).args if args == ['self']: column_context = {tuple(): column_context} else: raise Exception( type(self).__name__ + ', data_context error for column ' '%s(col_name), unexpected data type. ' 'Must be dictionary, since the function' ' takes multiple arguments ' '(not just "self"\ndata_context=' '%(column_context)' % column_context) for args, val in column_context.iteritems(): col.set_value(args, val)