示例#1
0
文件: orm.py 项目: kball/databundles
 def caster(self):
     '''Returns a function that takes a row that can be indexed by positions which returns a new
     row with all of the values cast to schema types. '''
     from databundles.transform import CasterTransformBuilder
     
     bdr = CasterTransformBuilder()
     
     for c in self.columns:
         bdr.append(c.name, c.python_type)
     
     return bdr
示例#2
0
    def test_caster(self):
        from databundles.transform import CasterTransformBuilder
        import datetime
        
        ctb = CasterTransformBuilder()
        
        ctb.append('int',int)
        ctb.append('float',float)
        ctb.append('str',str)
        
        row = ctb({'int':1,'float':2,'str':'3'})
        
        self.assertTrue(isinstance(row['int'],int))
        self.assertEquals(row['int'],1)
        self.assertTrue(isinstance(row['float'],float))
        self.assertEquals(row['float'],2.0)
        self.assertTrue(isinstance(row['str'],unicode))
        self.assertEquals(row['str'],'3')
        
        # Should be idempotent
        row = ctb(row)
        self.assertTrue(isinstance(row['int'],int))
        self.assertEquals(row['int'],1)
        self.assertTrue(isinstance(row['float'],float))
        self.assertEquals(row['float'],2.0)
        self.assertTrue(isinstance(row['str'],unicode))
        self.assertEquals(row['str'],'3')
                
        
        ctb = CasterTransformBuilder()
        
        ctb.append('date',datetime.date)
        ctb.append('time',datetime.time)
        ctb.append('datetime',datetime.datetime)        
        
        row = ctb({'int':1,'float':2,'str':'3'})
        
        self.assertIsNone(row['date'])
        self.assertIsNone(row['time'])
        self.assertIsNone(row['datetime'])
        
        row = ctb({'date':'1990-01-01','time':'10:52','datetime':'1990-01-01T12:30'})
        
        self.assertTrue(isinstance(row['date'],datetime.date))
        self.assertTrue(isinstance(row['time'],datetime.time))
        self.assertTrue(isinstance(row['datetime'],datetime.datetime))
        
        self.assertEquals(row['date'],datetime.date(1990, 1, 1))
        self.assertEquals(row['time'],datetime.time(10, 52))
        self.assertEquals(row['datetime'],datetime.datetime(1990, 1, 1, 12, 30))
        
        # Should be idempotent
        row = ctb(row)
        self.assertTrue(isinstance(row['date'],datetime.date))
        self.assertTrue(isinstance(row['time'],datetime.time))
        self.assertTrue(isinstance(row['datetime'],datetime.datetime))
        
        # Case insensitive
        row = ctb({'Date':'1990-01-01','Time':'10:52','Datetime':'1990-01-01T12:30'})

        self.assertEquals(row['date'],datetime.date(1990, 1, 1))
        self.assertEquals(row['time'],datetime.time(10, 52))
        self.assertEquals(row['datetime'],datetime.datetime(1990, 1, 1, 12, 30))