def test_read_deleted(self, fh): dbf = YDbfReader(fh) reference_data = [ { '_deletion_flag': u'', 'INT_FLD': 25, 'FLT_FLD': decimal.Decimal('12.34'), 'CHR_FLD': u'test', 'DTE_FLD': datetime.date(2006, 5, 7), 'BLN_FLD': True }, { '_deletion_flag': u'', 'INT_FLD': 113, 'FLT_FLD': decimal.Decimal('1.01'), 'CHR_FLD': u'del', 'DTE_FLD': datetime.date(2006, 12, 23), 'BLN_FLD': False }, { '_deletion_flag': u'*', 'INT_FLD': 7436, 'FLT_FLD': decimal.Decimal('0.50'), 'CHR_FLD': u'ex.', 'DTE_FLD': datetime.date(2006, 7, 15), 'BLN_FLD': True }, ] self.assertEqual(list(dbf.records(show_deleted=True)), reference_data)
def test_call(self, fh): dbf = YDbfReader(fh) reference_data = [{'INT_FLD': 25, 'FLT_FLD': decimal.Decimal('12.34'), 'CHR_FLD': u'test', 'DTE_FLD': datetime.date(2006, 5, 7), 'BLN_FLD': True}, {'INT_FLD': 113, 'FLT_FLD': decimal.Decimal('1.01'), 'CHR_FLD': u'del', 'DTE_FLD': datetime.date(2006, 12, 23), 'BLN_FLD': False}, # skipped deleted line ] self.assertEqual(list(dbf), reference_data) self.assertEqual(list(dbf.records(start_from=1)), [reference_data[1]]) self.assertEqual(list(dbf.records(start_from=0, limit=1)), [reference_data[0]])
def test_ooo_num_bug(self, fh): # OpenOffice produces wrong dbfs: it justify numbers on left and fill # it zeros (0x00) dbf = YDbfReader(fh) reference_data = [{'INT_FLD': 25, 'FLT_FLD': decimal.Decimal('12.34'), 'CHR_FLD': u'test', 'DTE_FLD': datetime.date(2006, 5, 7), 'BLN_FLD': True}, {'INT_FLD': 113, 'FLT_FLD': decimal.Decimal('1.01'), 'CHR_FLD': u'del', 'DTE_FLD': datetime.date(2006, 12, 23), 'BLN_FLD': False}, ] self.assertEqual(list(dbf), reference_data) self.assertEqual(list(dbf.records(start_from=1)), [reference_data[1]]) self.assertEqual(list(dbf.records(start_from=0, limit=1)), [reference_data[0]])
def test_read_deleted(self, fh): dbf = YDbfReader(fh) reference_data = [{'_deletion_flag': u'', 'INT_FLD': 25, 'FLT_FLD': decimal.Decimal('12.34'), 'CHR_FLD': u'test', 'DTE_FLD': datetime.date(2006, 5, 7), 'BLN_FLD': True}, {'_deletion_flag': u'', 'INT_FLD': 113, 'FLT_FLD': decimal.Decimal('1.01'), 'CHR_FLD': u'del', 'DTE_FLD': datetime.date(2006, 12, 23), 'BLN_FLD': False}, {'_deletion_flag': u'*', 'INT_FLD': 7436, 'FLT_FLD': decimal.Decimal('0.50'), 'CHR_FLD': u'ex.', 'DTE_FLD': datetime.date(2006, 7, 15), 'BLN_FLD': True}, ] self.assertEqual(list(dbf.records(show_deleted=True)), reference_data)
def test_ooo_num_bug(self, fh): # OpenOffice produces wrong dbfs: it justify numbers on left and fill # it zeros (0x00) dbf = YDbfReader(fh) reference_data = [ { 'INT_FLD': 25, 'FLT_FLD': decimal.Decimal('12.34'), 'CHR_FLD': u'test', 'DTE_FLD': datetime.date(2006, 5, 7), 'BLN_FLD': True }, { 'INT_FLD': 113, 'FLT_FLD': decimal.Decimal('1.01'), 'CHR_FLD': u'del', 'DTE_FLD': datetime.date(2006, 12, 23), 'BLN_FLD': False }, ] self.assertEqual(list(dbf), reference_data) self.assertEqual(list(dbf.records(start_from=1)), [reference_data[1]]) self.assertEqual(list(dbf.records(start_from=0, limit=1)), [reference_data[0]])
def test_header(self, fh): dbf = YDbfReader(fh) self.assertEqual(dbf._fields, [('_deletion_flag', 'C', 1, 0), ('INT_FLD', 'N', 4, 0), ('FLT_FLD', 'N', 5, 2), ('CHR_FLD', 'C', 6, 0), ('DTE_FLD', 'D', 8, 0), ('BLN_FLD', 'L', 1, 0)]) self.assertEqual(dbf.fields, [('INT_FLD', 'N', 4, 0), ('FLT_FLD', 'N', 5, 2), ('CHR_FLD', 'C', 6, 0), ('DTE_FLD', 'D', 8, 0), ('BLN_FLD', 'L', 1, 0)]) self.assertEqual(dbf.numrec, 3) self.assertEqual(dbf.stop_at, 3) self.assertEqual(dbf.lenheader, 193) self.assertEqual(dbf.numfields, 5) self.assertEqual(dbf.recsize, 25) self.assertEqual(dbf.recfmt, '1s4s5s6s8s1s') self.assertEqual(dbf.field_names, ['INT_FLD', 'FLT_FLD', 'CHR_FLD', 'DTE_FLD', 'BLN_FLD'])
def test_constructor(self, fh): """ Unit-test for reader's constructor """ dbf_data = fh.read() self.assertEquals(YDbfReader(StringIO(dbf_data)).raw_lang, 0) self.assertEquals(YDbfReader(StringIO(dbf_data), use_unicode=True).raw_lang, 0) self.assertEquals(YDbfReader(StringIO(dbf_data), use_unicode=True).encoding, 'ascii') self.assertEquals(YDbfReader(StringIO(dbf_data), use_unicode=False, ).encoding, None) # without unicode encoding means nothing self.assertEquals(YDbfReader(StringIO(dbf_data), use_unicode=False, encoding='cp866').encoding, None) self.assertEquals(YDbfReader(StringIO(dbf_data), use_unicode=True, encoding='cp866').encoding, 'cp866')
def test_len(self, fh): dbf = YDbfReader(fh) self.assertEqual(len(dbf), 3)
def test_dbf2date(self, fh): dbf = YDbfReader(fh) self.assertEqual(dbf.dbf2date, dbf2date)
def setUp(self, fh): self.dbf = YDbfReader(fh, use_unicode=False) self.sizes = {} for name, typ, size, dec in self.dbf.fields: self.sizes[name] = size, dec
def setUp(self, fh): self.dbf = YDbfReader(fh) self.sizes = {} for name, typ, size, dec in self.dbf.fields: self.sizes[name] = size, dec