add min_length option to TextField for SSNs and stuff like that

This commit is contained in:
Mark Riedesel 2024-03-31 11:52:22 -04:00
parent 5f4dc8b80f
commit e0e4c1291d
3 changed files with 32 additions and 5 deletions

View file

@ -23,10 +23,11 @@ class Field(object):
is_read_only = False
_value = None
def __init__(self, name=None, max_length=0, blank=False, required=True, uppercase=True, creation_counter=None):
def __init__(self, name=None, min_length=0, max_length=0, blank=False, required=True, uppercase=True, creation_counter=None):
self.name = name
self._value = None
self._orig_value = None
self.min_length = min_length
self.max_length = max_length
self.blank = blank
self.required = required
@ -120,10 +121,13 @@ class TextField(Field):
def validate(self):
if self.value is None and self.required:
raise ValidationError("value required", field=self)
if len(self.get_data()) > self.max_length:
data = self.get_data()
if len(data) > self.max_length:
raise ValidationError("value is too long", field=self)
if len(self.get_data().strip()) == 0 and (not self.blank and self.required):
print(self.name, 'blank', self.blank, self.required)
stripped_data_length = len(data.strip())
if stripped_data_length < self.min_length:
raise ValidationError("value is too short", field=self)
if stripped_data_length == 0 and (not self.blank and self.required):
raise ValidationError("field cannot be blank", field=self)
def get_data(self):

View file

@ -7,7 +7,7 @@ def pyaccuwage_tests():
return test_suite
setup(name='pyaccuwage',
version='0.2024.1',
version='0.2024.2',
packages=['pyaccuwage'],
scripts=[
'scripts/pyaccuwage-checkseq',

View file

@ -38,6 +38,29 @@ class TestTextField(unittest.TestCase):
field.validate()
self.assertEqual(field.get_data(), b' ' * 6)
def testStringRequiredUnassigned(self):
field = TextField(max_length=6)
self.assertRaises(ValidationError, lambda: field.validate())
def testStringRequiredNonBlank(self):
field = TextField(max_length=6)
field.value = ''
self.assertRaises(ValidationError, lambda: field.validate())
def testStringRequiredBlank(self):
field = TextField(max_length=6, blank=True)
field.value = ''
field.validate()
self.assertEqual(len(field.get_data()), 6)
def testStringMinimumLength(self):
field = TextField(max_length=6, min_length=6, blank=True) # blank has no effect
field.value = '' # one character too short
self.assertRaises(ValidationError, lambda: field.validate())
field.value = '12345' # one character too short
self.assertRaises(ValidationError, lambda: field.validate())
field.value = '123456' # one character too short
class TestStaticField(unittest.TestCase):
def test_static_field(self):
field = StaticField(value='TEST')