mirror of
https://gitlab.com/datalifeit/python-retrofix
synced 2023-12-14 06:13:03 +01:00
Manage None values on fields
Convert None to empty values when possible and raise errors when not possible.
This commit is contained in:
parent
9622230b3e
commit
2595f3ceeb
3 changed files with 45 additions and 3 deletions
|
@ -1,3 +1,5 @@
|
|||
* Manage None values on fields
|
||||
|
||||
Version 0.21 - 2016-08-09
|
||||
* Add python 3 support
|
||||
|
||||
|
|
|
@ -73,6 +73,8 @@ class Char(Field):
|
|||
return super(Char, self).set_from_file(value)
|
||||
|
||||
def set(self, value):
|
||||
if value is None:
|
||||
value = ''
|
||||
if len(value) > self._size:
|
||||
value = value[:self._size]
|
||||
return super(Char, self).set(value)
|
||||
|
@ -132,6 +134,8 @@ class Number(Char):
|
|||
return super(Number, self).set_from_file(value)
|
||||
|
||||
def set(self, value):
|
||||
if value is None:
|
||||
value = ''
|
||||
assert re.match('[0-9]*$', value), (
|
||||
'Non-number value "%s" in field "%s"' % (value, self._name))
|
||||
|
||||
|
@ -196,6 +200,9 @@ class Numeric(Field):
|
|||
def set(self, value):
|
||||
try:
|
||||
return Decimal(value)
|
||||
except TypeError:
|
||||
raise RetrofixException('Invalid value "%s" for Numeric Field "%s"'
|
||||
% (value, self._name))
|
||||
except ValueError:
|
||||
raise RetrofixException('Invalid value "%s" for Numeric Field "%s"'
|
||||
% (value, self._name))
|
||||
|
@ -229,7 +236,8 @@ class Date(Field):
|
|||
return super(Date, self).get_for_file(res)
|
||||
|
||||
def set(self, value):
|
||||
assert value, datetime
|
||||
if value is not None:
|
||||
assert value, datetime
|
||||
return super(Date, self).set(value)
|
||||
|
||||
|
||||
|
|
|
@ -25,6 +25,9 @@ from decimal import Decimal
|
|||
import codecs
|
||||
|
||||
from retrofix.record import Record
|
||||
from retrofix.fields import Char, Account, Number, Numeric, Integer, Date,\
|
||||
Boolean
|
||||
from retrofix.exception import RetrofixException
|
||||
from retrofix import c19
|
||||
from retrofix import c32
|
||||
from retrofix import c34_1_la_caixa as c34
|
||||
|
@ -43,8 +46,6 @@ def read_flat(file_name):
|
|||
return codecs.open(file_path, 'r', encoding='latin1').read()
|
||||
|
||||
|
||||
|
||||
|
||||
class C19TestCase(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.data = read_flat('c19.txt')
|
||||
|
@ -118,6 +119,7 @@ class C34TestCase(unittest.TestCase):
|
|||
data = self.ordering_header.write()
|
||||
self.assert_(self.data.startswith(data))
|
||||
|
||||
|
||||
class C43TestCase(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.data = read_flat('c43.txt')
|
||||
|
@ -242,6 +244,36 @@ class C57TestCase(unittest.TestCase):
|
|||
self.assertEqual(records[12], record)
|
||||
|
||||
|
||||
class GenericTestCase(unittest.TestCase):
|
||||
|
||||
def test_none_fields(self):
|
||||
'Test setting none values on fields'
|
||||
TEST_RECORD = (
|
||||
(1, 1, 'char', Char),
|
||||
(2, 22, 'account', Account),
|
||||
(22, 26, 'number', Number),
|
||||
(26, 30, 'numeric', Numeric),
|
||||
(30, 40, 'integer', Integer),
|
||||
(40, 48, 'date', Date('YYYYMMDD')),
|
||||
(48, 50, 'boolean', Boolean),
|
||||
)
|
||||
record = Record(TEST_RECORD)
|
||||
record.char = None
|
||||
record.account = None
|
||||
record.number = None
|
||||
with self.assertRaises(RetrofixException):
|
||||
record.numeric = None
|
||||
with self.assertRaises(RetrofixException):
|
||||
record.integer = None
|
||||
record.date = None
|
||||
record.boolean = None
|
||||
self.assertEqual(record.char, '')
|
||||
self.assertEqual(record.account, '')
|
||||
self.assertEqual(record.number, '')
|
||||
self.assertEqual(record.date, None)
|
||||
self.assertEqual(record.boolean, False)
|
||||
|
||||
|
||||
def suite():
|
||||
suite = unittest.TestSuite()
|
||||
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(C19TestCase))
|
||||
|
|
Loading…
Reference in a new issue