pyaccuwage/fields.py
2011-03-26 14:56:00 -05:00

57 lines
1.6 KiB
Python

class ValidationError(Exception):
pass
class Field(object):
creation_counter = 0
def __init__(self, name=None, max_length=0, required=True):
self.name = name
self._value = None
self.max_length = max_length
self.required = required
self.creation_counter = Field.creation_counter
Field.creation_counter += 1
def validate(self):
raise NotImplemented()
def get_data(self):
raise NotImplemented()
def __setvalue(self, value):
self._value = value
def __getvalue(self):
return self._value
value = property(__getvalue, __setvalue)
def __repr__(self):
return self.name
class TextField(Field):
def validate(self):
if self.value == None and self.required:
raise ValidationError("value required")
if len(self.value) > self.max_length:
raise ValidationError("value is too long")
def get_data(self):
return (self.value or "").encode('ascii').ljust(self.max_length)
class StateField(TextField):
def __init__(self, name=None, required=True):
return super(StateField, self).__init__(name=name, max_length=2, required=required)
class MoneyField(Field):
def validate(self):
if self.value == None and self.required:
raise ValidationError("value required")
if len(str(int((self.value or 0)*100))) > self.max_length:
raise ValidationError("value is too long")
def get_data(self):
return str(int((self.value or 0)*100)).encode('ascii').zfill(self.max_length)