From: Tomas Babej Date: Thu, 15 Jan 2015 21:26:02 +0000 (+0100) Subject: Merge pull request #25 from tbabej/deserialized-data-dict X-Git-Url: https://git.madduck.net/etc/taskwarrior.git/commitdiff_plain/58f3ecf4ed9351d3226b3ac0152ec56313f79431?hp=336f586512208dc74ed72741c4ced644f79c6f87 Merge pull request #25 from tbabej/deserialized-data-dict Make sure modified fields were actually modified --- diff --git a/tasklib/task.py b/tasklib/task.py index 1ab6347..f61fb05 100644 --- a/tasklib/task.py +++ b/tasklib/task.py @@ -245,7 +245,15 @@ class Task(TaskResource): def _modified_fields(self): writable_fields = set(self._data.keys()) - set(self.read_only_fields) for key in writable_fields: - if self._data.get(key) != self._original_data.get(key): + new_value = self._data.get(key) + old_value = self._original_data.get(key) + + # Make sure not to mark data removal as modified field if the + # field originally had some empty value + if key in self._data and not new_value and not old_value: + continue + + if new_value != old_value: yield key @property diff --git a/tasklib/tests.py b/tasklib/tests.py index 8fc5753..35979a8 100644 --- a/tasklib/tests.py +++ b/tasklib/tests.py @@ -7,6 +7,29 @@ import unittest from .task import TaskWarrior, Task +# http://taskwarrior.org/docs/design/task.html , Section: The Attributes +TASK_STANDARD_ATTRS = ( + 'status', + 'uuid', + 'entry', + 'description', + 'start', + 'end', + 'due', + 'until', + 'wait', + 'modified', + 'scheduled', + 'recur', + 'mask', + 'imask', + 'parent', + 'project', + 'priority', + 'depends', + 'tags', + 'annotation', +) class TasklibTest(unittest.TestCase): @@ -411,6 +434,14 @@ class TaskTest(TasklibTest): t['depends'] = set([dependency]) self.assertEqual(set(t._modified_fields), set()) + def test_modified_fields_not_affected_by_reading(self): + t = Task(self.tw) + + for field in TASK_STANDARD_ATTRS: + value = t[field] + + self.assertEqual(set(t._modified_fields), set()) + def test_setting_read_only_attrs_through_init(self): # Test that we are unable to set readonly attrs through __init__ for readonly_key in Task.read_only_fields: