Fix StaticField + tests for StaticField and unset optional TextField

This commit is contained in:
Mark Riedesel 2021-09-03 05:45:01 -05:00
parent 558e3fd232
commit 0bd82e09c4
4 changed files with 20 additions and 10 deletions

View file

@ -21,6 +21,7 @@ class ValidationError(Exception):
class Field(object):
creation_counter = 0
is_read_only = False
_value = None
def __init__(self, name=None, max_length=0, required=True, uppercase=True, creation_counter=None):
self.name = name
@ -122,7 +123,7 @@ class TextField(Field):
raise ValidationError("value is too long", field=self)
def get_data(self):
value = str(self.value).encode('ascii') or b''
value = str(self.value or '').encode('ascii') or b''
if self.uppercase:
value = value.upper()
return value.ljust(self.max_length)[:self.max_length]
@ -195,13 +196,13 @@ class IntegerField(TextField):
class StaticField(TextField):
def __init__(self, name=None, required=True, value=None):
super(StaticField, self).__init__(name=name, required=required,
max_length=len(value))
def __init__(self, name=None, required=True, value=None, uppercase=False):
super(StaticField, self).__init__(name=name,
required=required,
max_length=len(value),
uppercase=uppercase)
self._static_value = value
def get_data(self):
return str(self._static_value).encode('ascii')[:self.max_length]
self._value = value
def parse(self, s):
pass

View file

@ -25,7 +25,7 @@ class Model(object):
setattr(src_field, 'parent_name', self.__class__.__name__)
new_field_instance = copy.copy(src_field)
new_field_instance._orig_value = None
new_field_instance._value = None
new_field_instance._value = new_field_instance.value
self.__dict__[key] = new_field_instance
def __setattr__(self, key, value):

View file

@ -33,6 +33,11 @@ class TestTextField(unittest.TestCase):
self.assertEqual(len(data), field.max_length)
self.assertEqual(data, b'HELLO,')
def testStringUnsetOptional(self):
field = TextField(max_length=6, required=False)
field.validate()
self.assertEqual(field.get_data(), b' ' * 6)
class TestStaticField(unittest.TestCase):
def test_static_field(self):
field = StaticField(value='TEST')

View file

@ -7,6 +7,7 @@ from pyaccuwage.fields import MoneyField
from pyaccuwage.fields import StateField
from pyaccuwage.fields import TextField
from pyaccuwage.fields import ZeroField
from pyaccuwage.fields import StaticField
from pyaccuwage.model import Model
class TestModelOutput(unittest.TestCase):
@ -20,7 +21,8 @@ class TestModelOutput(unittest.TestCase):
money = MoneyField(max_length=32)
state_txt = StateField()
state_num = StateField(use_numeric=True)
blank2 = BlankField(max_length=24)
blank2 = BlankField(max_length=12)
static1 = StaticField(value='hey mister!!')
def setUp(self):
self.model = TestModelOutput.TestModel()
@ -42,7 +44,8 @@ class TestModelOutput(unittest.TestCase):
b'313377'.zfill(32),
b'IA',
b'19',
b' ' * 24,
b' ' * 12,
b'hey mister!!',
])
output = model.output()
@ -64,6 +67,7 @@ field2: 12345
money: 3133.77
state_txt: IA
state_num: IA
static1: hey mister!!
''')