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')
Beispiel #2
0
 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)
Beispiel #4
0
    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)