"""Syncs the backend database with the taskd server"""
pass
+ def convert_datetime_string(self, value):
+ """
+ Converts TW syntax datetime string to a localized datetime
+ object. This method is not mandatory.
+ """
+ raise NotImplemented
+
class TaskWarriorException(Exception):
pass
else:
return six.u("description:'{0}'").format(task._data['description'] or '')
+ def convert_datetime_string(self, value):
+
+ if self.version >= VERSION_2_4_0:
+ # For strings, use 'task calc' to evaluate the string to datetime
+ # available since TW 2.4.0
+ args = value.split()
+ result = self.execute_command(['calc'] + args)
+ naive = datetime.datetime.strptime(result[0], DATE_FORMAT_CALC)
+ localized = local_zone.localize(naive)
+ else:
+ raise ValueError("Provided value could not be converted to "
+ "datetime, its type is not supported: {}"
+ .format(type(value)))
# Public interface
to raise ValueError.
"""
- def __init__(self, warrior):
- self.warrior = warrior
+ def __init__(self, backend):
+ self.backend = backend
def _deserialize(self, key, value):
hydrate_func = getattr(self, 'deserialize_{0}'.format(key),
else:
uuids = raw_uuids
- return set(self.warrior.tasks.get(uuid=uuid) for uuid in uuids if uuid)
+ return set(self.backend.tasks.get(uuid=uuid) for uuid in uuids if uuid)
def datetime_normalizer(self, value):
"""
# If the value is already localized, there is no need to change
# time zone at this point. Also None is a valid value too.
localized = value
- elif (isinstance(value, six.string_types)
- and self.warrior.version >= VERSION_2_4_0):
- # For strings, use 'task calc' to evaluate the string to datetime
- # available since TW 2.4.0
- args = value.split()
- result = self.warrior.execute_command(['calc'] + args)
- naive = datetime.datetime.strptime(result[0], DATE_FORMAT_CALC)
- localized = local_zone.localize(naive)
+ elif isinstance(value, six.string_types):
+ localized = self.backend.convert_datetime_string(value)
else:
raise ValueError("Provided value could not be converted to "
"datetime, its type is not supported: {}"