add min_length option to TextField for SSNs and stuff like that
This commit is contained in:
parent
5f4dc8b80f
commit
e0e4c1291d
3 changed files with 32 additions and 5 deletions
|
@ -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):
|
||||
|
|
2
setup.py
2
setup.py
|
@ -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',
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue