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

View file

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

View file

@ -33,6 +33,11 @@ class TestTextField(unittest.TestCase):
self.assertEqual(len(data), field.max_length) self.assertEqual(len(data), field.max_length)
self.assertEqual(data, b'HELLO,') 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): class TestStaticField(unittest.TestCase):
def test_static_field(self): def test_static_field(self):
field = StaticField(value='TEST') field = StaticField(value='TEST')

View file

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