def test_get_all_fields(self): class Model(dict): field1 = Field(required=True) field2 = Field(default=None) for field_name, field in get_all_fields(Model): if field_name == "field1": self.assertEqual(True, field.required) self.assertEqual(EMPTY, field.default) else: self.assertEqual(None, field.default) self.assertEqual(False, field.required)
def __new__(cls, *args, **kwargs): # caching fields and required fields on the model # so we don't have to discover every time. if not hasattr(cls, "_fields"): fields = [] required_fields = [] for field_name, field in get_all_fields(cls): fields.append(field_name) if field.required: required_fields.append(field_name) cls._fields = set(fields) cls._required_fields = set(required_fields) instance = super(Model, cls).__new__(cls) instance._data = {} populate_defaults(instance) return instance