43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
from fields import Field, TextField, MoneyField, StateField
|
|
|
|
class Model(object):
|
|
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([field.get_data() for field in self.get_sorted_fields()])
|
|
|
|
|
|
|
|
class TestModel(Model):
|
|
field_a = TextField(max_length=20)
|
|
field_b = MoneyField(max_length=10)
|
|
state = StateField()
|
|
|