]> git.madduck.net Git - etc/taskwarrior.git/blobdiff - tasklib/task.py

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:

Task: Make sure empty values are not passed to TW via hooks
[etc/taskwarrior.git] / tasklib / task.py
index ec3de29dc28f4c8887b14721c468c861b15a893a..0b18a14a5d1bcdbe1f77cc58344a1695e1fa79a8 100644 (file)
@@ -207,7 +207,7 @@ class Task(TaskResource):
         pass
 
     @classmethod
-    def from_input(cls, input_file=sys.stdin, modify=False):
+    def from_input(cls, input_file=sys.stdin, modify=None):
         """
         Creates a Task object, directly from the stdin, by reading one line.
         If modify=True, two lines are used, first line interpreted as the
@@ -226,6 +226,10 @@ class Task(TaskResource):
         # TaskWarrior instance is set to None
         task = cls(None)
 
+        # Detect the hook type if not given directly
+        name = os.path.basename(sys.argv[0])
+        modify = name.startswith('on-modify') if modify is None else modify
+
         # Load the data from the input
         task._load_data(json.loads(input_file.readline().strip()))
 
@@ -467,7 +471,14 @@ class Task(TaskResource):
         """
 
         # We need to remove spaces for TW-1504, use custom separators
-        return json.dumps(self._data, separators=(',',':'))
+        data_tuples = ((key, self._serialize(key, value))
+                       for key, value in six.iteritems(self._data))
+
+        # Empty string denotes empty serialized value, we do not want
+        # to pass that to TaskWarrior.
+        data_tuples = filter(lambda t: t[1] is not '', data_tuples)
+        data = dict(data_tuples)
+        return json.dumps(data, separators=(',',':'))
 
 class TaskFilter(SerializingObject):
     """