Skip to content

Commit

Permalink
Load obj to use real name
Browse files Browse the repository at this point in the history
  • Loading branch information
oarnauru committed Jun 12, 2014
1 parent 0364068 commit 9ad0f3c
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 27 deletions.
4 changes: 2 additions & 2 deletions dirty_models/fields.py
Expand Up @@ -69,10 +69,10 @@ def delete_value(self, obj):
obj.delete_field_value(self.name)

def __get__(self, obj, cls=None):
if self._getter:
return self._getter(self, obj, cls)
if obj is None:
return self
if self._getter:
return self._getter(self, obj, cls)
if self._name is None:
raise AttributeError("Field name must be set")
return self.get_value(obj)
Expand Down
55 changes: 30 additions & 25 deletions dirty_models/models.py
Expand Up @@ -104,17 +104,18 @@ def set_field_value(self, name, value):
"""
Set the value to the field modified_data
"""
if self._can_write_field(name):

if name in self._deleted_fields:
self._deleted_fields.remove(name)
if self._original_data.get(name) == value:
if self._modified_data.get(name):
self._modified_data.pop(name)
obj = self.__class__.get_field_obj(name)

if self._can_write_field(obj.name):
if obj.name in self._deleted_fields:
self._deleted_fields.remove(obj.name)
if self._original_data.get(obj.name) == value:
if self._modified_data.get(obj.name):
self._modified_data.pop(obj.name)
else:
self._modified_data[name] = value
self._modified_data[obj.name] = value
self._prepare_child(value)
if name in self._read_only_fields:
if obj.name in self._read_only_fields:
try:
value.set_read_only(True)
except AttributeError:
Expand All @@ -124,49 +125,53 @@ def get_field_value(self, name):
"""
Get the field value from the modified data or the original one
"""
if name in self._deleted_fields:
obj = self.__class__.get_field_obj(name)
if obj.name in self._deleted_fields:
return None
modified = self._modified_data.get(name)
modified = self._modified_data.get(obj.name)
if modified is not None:
return modified
return self._original_data.get(name)
return self._original_data.get(obj.name)

def delete_field_value(self, name):
"""
Mark this field to be deleted
"""
if self._can_write_field(name):
if name in self._modified_data:
self._modified_data.pop(name)
obj = self.__class__.get_field_obj(name)
if self._can_write_field(obj.name):
if obj.name in self._modified_data:
self._modified_data.pop(obj.name)

if name in self._original_data:
self._deleted_fields.append(name)
if obj.name in self._original_data:
self._deleted_fields.append(obj.name)

def reset_field_value(self, name):
"""
Resets value of a field
"""
if self._can_write_field(name):
if name in self._modified_data:
del self._modified_data[name]
obj = self.__class__.get_field_obj(name)
if self._can_write_field(obj.name):
if obj.name in self._modified_data:
del self._modified_data[obj.name]

if name in self._deleted_fields:
self._deleted_fields.remove(name)
if obj.name in self._deleted_fields:
self._deleted_fields.remove(obj.name)

try:
self._original_data[name].clear_modified_data()
self._original_data[obj.name].clear_modified_data()
except (KeyError, AttributeError):
pass

def is_modified_field(self, name):
"""
Returns whether a field is modified or not
"""
if name in self._modified_data or name in self._deleted_fields:
obj = self.__class__.get_field_obj(name)
if obj.name in self._modified_data or obj.name in self._deleted_fields:
return True

try:
return self.get_field_value(name).is_modified()
return self.get_field_value(obj.name).is_modified()
except AttributeError:
return False

Expand Down
6 changes: 6 additions & 0 deletions tests/dirty_models/tests_models.py
Expand Up @@ -134,6 +134,7 @@ class TestExportModel(BaseModel):
testField1 = BaseField()
testField2 = BaseField()
testField3 = BaseField()
test_field4 = BaseField(name="testField4")
testFieldModel = ModelField()

return TestExportModel()
Expand Down Expand Up @@ -342,19 +343,24 @@ def test_reset_field_value(self):
self.assertEqual(model.testField3, 'c')

def test_is_modified_field(self):

model = self._get_test_model_instance()
model.testField1 = 'a'
model.testField2 = 'b'
model.testField3 = 'c'
model.test_field4 = 'd'

model.flat_data()

self.assertFalse(model.is_modified_field('testField1'))
self.assertFalse(model.is_modified_field('testField2'))
self.assertFalse(model.is_modified_field('testField3'))
self.assertFalse(model.is_modified_field('test_field4'))

model.testField3 = 'cccc'
model.test_field4 = 'dddd'
self.assertTrue(model.is_modified_field('testField3'))
self.assertTrue(model.is_modified_field('test_field4'))

def test_fields_original_data(self):
model = self._get_test_model_instance()
Expand Down

0 comments on commit 9ad0f3c

Please sign in to comment.