simplejson. Tests seem to work so far. Still need to figure out how to get data into the records in some easy way.
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
from fields import Field
|
|
|
|
class Model(object):
|
|
record_identifier = ' '
|
|
|
|
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()
|
|
|
|
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)
|
|
|
|
|