for all required records in a set. Added a controller class but decided to put stuff in __init__ instead, at least for now. Added a DateField which converts datetime.date into the proper string format for EFW2 files (hopefully), this should still be tested next week.
51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
from fields import Field
|
|
|
|
class Model(object):
|
|
record_identifier = ' '
|
|
required = False
|
|
|
|
def __init__(self):
|
|
for (key, value) in self.__class__.__dict__.items():
|
|
if isinstance(value, Field):
|
|
field = getattr(self, key)
|
|
if not field.name:
|
|
setattr(field, 'name', key)
|
|
|
|
def __setattr__(self, key, value):
|
|
if hasattr(self, key) and isinstance(getattr(self, key), Field):
|
|
getattr(self, key).value = value
|
|
else:
|
|
self.__dict__[key] = value
|
|
|
|
def get_fields(self):
|
|
fields = []
|
|
for key in self.__class__.__dict__.keys():
|
|
attr = getattr(self, key)
|
|
if isinstance(attr, Field):
|
|
fields.append(attr)
|
|
return fields
|
|
|
|
def get_sorted_fields(self):
|
|
fields = self.get_fields()
|
|
fields.sort(key=lambda x:x.creation_counter)
|
|
return fields
|
|
|
|
def validate(self):
|
|
for f in self.get_fields():
|
|
f.validate()
|
|
|
|
try:
|
|
custom_validator = getattr(self, 'validate_' + f.name)
|
|
except AttributeError, e:
|
|
continue
|
|
if callable(custom_validator):
|
|
custom_validator(f)
|
|
|
|
def output(self):
|
|
return ''.join([self.record_identifier] + [field.get_data() for field in self.get_sorted_fields()])
|
|
|
|
def read(self, fp):
|
|
for field in self.get_sorted_fields():
|
|
field.read(fp)
|
|
|
|
|