]> git.madduck.net Git - etc/taskwarrior.git/commitdiff

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Merge pull request #25 from tbabej/deserialized-data-dict
authorTomas Babej <tomasbabej@gmail.com>
Thu, 15 Jan 2015 21:26:02 +0000 (22:26 +0100)
committerTomas Babej <tomasbabej@gmail.com>
Thu, 15 Jan 2015 21:26:02 +0000 (22:26 +0100)
Make sure modified fields were actually modified

tasklib/task.py
tasklib/tests.py

index 1ab63479d96e140873730c2a39a5eea345627a78..f61fb056591c3afb22486ad62a30f78c586c8918 100644 (file)
@@ -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
index 8fc5753219fd1ee224d758b82f83d1a6d29df4b0..35979a8c889b7743cc533db79ea6f02432e101f8 100644 (file)
@@ -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: