From 89a82ebc0cb075b782504b4b3f1028c49f5b9b4c Mon Sep 17 00:00:00 2001 From: Ralph Bean Date: Tue, 8 Apr 2014 16:01:44 -0400 Subject: [PATCH] Handle some conversion cases to minimize erroneous "diffs" --- bugwarrior/db.py | 45 +++++++++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/bugwarrior/db.py b/bugwarrior/db.py index c781df552..da55f26f1 100644 --- a/bugwarrior/db.py +++ b/bugwarrior/db.py @@ -1,5 +1,7 @@ from ConfigParser import NoOptionError import copy +import datetime +import dateutil.parser import os import re import warnings @@ -106,19 +108,38 @@ def tasks_differ(left, right): ): if set(left.get(k, [])) != set(right.get(k, [])): return True - else: - if six.text_type(left.get(k)) != six.text_type(right.get(k)): - log.name('db').debug( - (u"%s:%s has changed from (%r)'%s' to (%r)'%s'." % ( - sanitize(left['uuid']), - sanitize(k), - type(left.get(k)), - sanitize(left.get(k)), - type(right.get(k)), - sanitize(right.get(k)) - )).encode('utf-8') - ) + elif ( + not isinstance(left.get(k), datetime.datetime) + and isinstance(right.get(k), datetime.datetime) + ): + # TODO -- this block is here only temporarily until we can get + # taskw data marshalling working with bugwarrior. It handles a + # specific case where dates are not deserialized into nice datetime + # objects. + left_value = dateutil.parser.parse(left.get(k)) + if left_value != right.get(k): + log.name('db').debug(u"%s:%s dates changed from %r to %r" % ( + sanitize(left['uuid']), + sanitize(k), + sanitize(left_value), + sanitize(right.get(k)), + )) return True + elif not left.get(k) and not right.get(k): + # If one is None and the other is the empty string, then.. + return False + elif six.text_type(left.get(k)) != six.text_type(right.get(k)): + log.name('db').debug( + (u"%s:%s has changed from (%r)'%s' to (%r)'%s'." % ( + sanitize(left['uuid']), + sanitize(k), + type(left.get(k)), + sanitize(left.get(k)), + type(right.get(k)), + sanitize(right.get(k)) + )).encode('utf-8') + ) + return True return False