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
|
is_read_only = False
|
||||||
_value = None
|
_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.name = name
|
||||||
self._value = None
|
self._value = None
|
||||||
self._orig_value = None
|
self._orig_value = None
|
||||||
|
self.min_length = min_length
|
||||||
self.max_length = max_length
|
self.max_length = max_length
|
||||||
self.blank = blank
|
self.blank = blank
|
||||||
self.required = required
|
self.required = required
|
||||||
|
@ -120,10 +121,13 @@ class TextField(Field):
|
||||||
def validate(self):
|
def validate(self):
|
||||||
if self.value is None and self.required:
|
if self.value is None and self.required:
|
||||||
raise ValidationError("value required", field=self)
|
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)
|
raise ValidationError("value is too long", field=self)
|
||||||
if len(self.get_data().strip()) == 0 and (not self.blank and self.required):
|
stripped_data_length = len(data.strip())
|
||||||
print(self.name, 'blank', self.blank, self.required)
|
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)
|
raise ValidationError("field cannot be blank", field=self)
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -7,7 +7,7 @@ def pyaccuwage_tests():
|
||||||
return test_suite
|
return test_suite
|
||||||
|
|
||||||
setup(name='pyaccuwage',
|
setup(name='pyaccuwage',
|
||||||
version='0.2024.1',
|
version='0.2024.2',
|
||||||
packages=['pyaccuwage'],
|
packages=['pyaccuwage'],
|
||||||
scripts=[
|
scripts=[
|
||||||
'scripts/pyaccuwage-checkseq',
|
'scripts/pyaccuwage-checkseq',
|
||||||
|
|
|
@ -38,6 +38,29 @@ class TestTextField(unittest.TestCase):
|
||||||
field.validate()
|
field.validate()
|
||||||
self.assertEqual(field.get_data(), b' ' * 6)
|
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):
|
class TestStaticField(unittest.TestCase):
|
||||||
def test_static_field(self):
|
def test_static_field(self):
|
||||||
field = StaticField(value='TEST')
|
field = StaticField(value='TEST')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue