]>
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:
summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
1225677 )
"Programming Language :: Python :: 3.3",
'License :: OSI Approved :: BSD License',
'Topic :: Software Development :: Libraries :: Python Modules',
"Programming Language :: Python :: 3.3",
'License :: OSI Approved :: BSD License',
'Topic :: Software Development :: Libraries :: Python Modules',
- 'Intended Audience :: Developers'
+ 'Intended Audience :: Developers',
if self.version < self.VERSION_2_4_0:
return task._data['description']
else:
if self.version < self.VERSION_2_4_0:
return task._data['description']
else:
- return six.u("description:'{0}'").format(task._data['description']
- or '')
+ return six.u("description:'{0}'").format(
+ task._data['description'] or '',
+ )
def convert_datetime_string(self, value):
def convert_datetime_string(self, value):
naive = datetime.datetime.strptime(result[0], DATE_FORMAT_CALC)
localized = local_zone.localize(naive)
else:
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)))
+ raise ValueError(
+ 'Provided value could not be converted to '
+ 'datetime, its type is not supported: {}'
+ .format(type(value)),
+ )
# Expected output: Created task 1.
# Created task 1 (recurrence template).
if len(id_lines) != 1 or len(id_lines[0].split(' ')) not in (3, 5):
# Expected output: Created task 1.
# Created task 1 (recurrence template).
if len(id_lines) != 1 or len(id_lines[0].split(' ')) not in (3, 5):
- raise TaskWarriorException("Unexpected output when creating "
- "task: %s" % '\n'.join(id_lines))
+ raise TaskWarriorException(
+ 'Unexpected output when creating '
+ 'task: %s' % '\n'.join(id_lines),
+ )
# Circumvent the ID storage, since ID is considered read-only
identifier = id_lines[0].split(' ')[2].rstrip('.')
# Circumvent the ID storage, since ID is considered read-only
identifier = id_lines[0].split(' ')[2].rstrip('.')
# If more than 1 task has been matched still, raise an exception
if not valid(output):
raise TaskWarriorException(
# If more than 1 task has been matched still, raise an exception
if not valid(output):
raise TaskWarriorException(
- "Unique identifiers {0} with description: {1} matches "
- "multiple tasks: {2}" .format(
+ 'Unique identifiers {0} with description: {1} matches '
+ 'multiple tasks: {2}' .format(
task['uuid'] or task['id'], task['description'], output)
)
task['uuid'] or task['id'], task['description'], output)
)
return self['uuid'].__hash__()
def __repr__(self):
return self['uuid'].__hash__()
def __repr__(self):
- return "LazyUUIDTask: {0}" .format(self._uuid)
+ return 'LazyUUIDTask: {0}' .format(self._uuid)
def __copy__(self):
return LazyUUIDTask(self._tw, self._uuid)
def __copy__(self):
return LazyUUIDTask(self._tw, self._uuid)
return getattr(self, name)
def __repr__(self):
return getattr(self, name)
def __repr__(self):
- return "LazyUUIDTaskSet([{0}])" .format(', '.join(self._uuids))
+ return 'LazyUUIDTaskSet([{0}])' .format(', '.join(self._uuids))
def __eq__(self, other):
return set(t['uuid'] for t in other) == self._uuids
def __eq__(self, other):
return set(t['uuid'] for t in other) == self._uuids
return self.difference_update(other)
def __rsub__(self, other):
return self.difference_update(other)
def __rsub__(self, other):
- return LazyUUIDTaskSet(self._tw,
- set(t['uuid'] for t in other) - self._uuids)
+ return LazyUUIDTaskSet(
+ self._tw,
+ set(t['uuid'] for t in other) - self._uuids,
+ )
def __or__(self, other):
return self.union(other)
def __or__(self, other):
return self.union(other)
return all([task in self for task in other])
def union(self, other):
return all([task in self for task in other])
def union(self, other):
- return LazyUUIDTaskSet(self._tw,
- self._uuids | set(t['uuid'] for t in other))
+ return LazyUUIDTaskSet(
+ self._tw,
+ self._uuids | set(t['uuid'] for t in other),
+ )
def intersection(self, other):
def intersection(self, other):
- return LazyUUIDTaskSet(self._tw,
- self._uuids & set(t['uuid'] for t in other))
+ return LazyUUIDTaskSet(
+ self._tw,
+ self._uuids & set(t['uuid'] for t in other),
+ )
def difference(self, other):
def difference(self, other):
- return LazyUUIDTaskSet(self._tw,
- self._uuids - set(t['uuid'] for t in other))
+ return LazyUUIDTaskSet(
+ self._tw,
+ self._uuids - set(t['uuid'] for t in other),
+ )
def symmetric_difference(self, other):
def symmetric_difference(self, other):
- return LazyUUIDTaskSet(self._tw,
- self._uuids ^ set(t['uuid'] for t in other))
+ return LazyUUIDTaskSet(
+ self._tw,
+ self._uuids ^ set(t['uuid'] for t in other),
+ )
def update(self, other):
self._uuids |= set(t['uuid'] for t in other)
def update(self, other):
self._uuids |= set(t['uuid'] for t in other)
# Check that all the tasks are saved
for task in (cur_dependencies or set()):
if not task.saved:
# Check that all the tasks are saved
for task in (cur_dependencies or set()):
if not task.saved:
- raise Task.NotSaved('Task \'%s\' needs to be saved before '
- 'it can be set as dependency.' % task)
+ raise Task.NotSaved(
+ 'Task \'%s\' needs to be saved before '
+ 'it can be set as dependency.' % task,
+ )
return super(Task, self).serialize_depends(cur_dependencies)
def delete(self):
if not self.saved:
raise Task.NotSaved(
return super(Task, self).serialize_depends(cur_dependencies)
def delete(self):
if not self.saved:
raise Task.NotSaved(
- "Task needs to be saved before it can be deleted")
+ 'Task needs to be saved before it can be deleted',
+ )
# Refresh the status, and raise exception if the task is deleted
self.refresh(only_fields=['status'])
if self.deleted:
# Refresh the status, and raise exception if the task is deleted
self.refresh(only_fields=['status'])
if self.deleted:
- raise Task.DeletedTask("Task was already deleted" )
+ raise Task.DeletedTask('Task was already deleted' )
self.backend.delete_task(self)
self.backend.delete_task(self)
def start(self):
if not self.saved:
raise Task.NotSaved(
def start(self):
if not self.saved:
raise Task.NotSaved(
- "Task needs to be saved before it can be started")
+ 'Task needs to be saved before it can be started',
+ )
# Refresh, and raise exception if task is already completed/deleted
self.refresh(only_fields=['status'])
if self.completed:
# Refresh, and raise exception if task is already completed/deleted
self.refresh(only_fields=['status'])
if self.completed:
- raise Task.CompletedTask("Cannot start a completed task" )
+ raise Task.CompletedTask('Cannot start a completed task' )
- raise Task.DeletedTask("Deleted task cannot be started" )
+ raise Task.DeletedTask('Deleted task cannot be started' )
- raise Task.ActiveTask("Task is already active" )
+ raise Task.ActiveTask('Task is already active' )
self.backend.start_task(self)
self.backend.start_task(self)
def stop(self):
if not self.saved:
raise Task.NotSaved(
def stop(self):
if not self.saved:
raise Task.NotSaved(
- "Task needs to be saved before it can be stopped")
+ 'Task needs to be saved before it can be stopped',
+ )
# Refresh, and raise exception if task is already completed/deleted
self.refresh(only_fields=['status'])
if not self.active:
# Refresh, and raise exception if task is already completed/deleted
self.refresh(only_fields=['status'])
if not self.active:
- raise Task.InactiveTask("Cannot stop an inactive task" )
+ raise Task.InactiveTask('Cannot stop an inactive task' )
self.backend.stop_task(self)
self.backend.stop_task(self)
def done(self):
if not self.saved:
raise Task.NotSaved(
def done(self):
if not self.saved:
raise Task.NotSaved(
- "Task needs to be saved before it can be completed")
+ 'Task needs to be saved before it can be completed',
+ )
# Refresh, and raise exception if task is already completed/deleted
self.refresh(only_fields=['status'])
if self.completed:
# Refresh, and raise exception if task is already completed/deleted
self.refresh(only_fields=['status'])
if self.completed:
- raise Task.CompletedTask("Cannot complete a completed task" )
+ raise Task.CompletedTask('Cannot complete a completed task' )
- raise Task.DeletedTask("Deleted task cannot be completed" )
+ raise Task.DeletedTask('Deleted task cannot be completed' )
self.backend.complete_task(self)
self.backend.complete_task(self)
def add_annotation(self, annotation):
if not self.saved:
def add_annotation(self, annotation):
if not self.saved:
- raise Task.NotSaved("Task needs to be saved to add annotation" )
+ raise Task.NotSaved('Task needs to be saved to add annotation' )
self.backend.annotate_task(self, annotation)
self.refresh(only_fields=['annotations'])
def remove_annotation(self, annotation):
if not self.saved:
self.backend.annotate_task(self, annotation)
self.refresh(only_fields=['annotations'])
def remove_annotation(self, annotation):
if not self.saved:
- raise Task.NotSaved("Task needs to be saved to remove annotation" )
+ raise Task.NotSaved('Task needs to be saved to remove annotation' )
if isinstance(annotation, TaskAnnotation):
annotation = annotation['description']
if isinstance(annotation, TaskAnnotation):
annotation = annotation['description']
def refresh(self, only_fields=None, after_save=False):
# Raise error when trying to refresh a task that has not been saved
if not self.saved:
def refresh(self, only_fields=None, after_save=False):
# Raise error when trying to refresh a task that has not been saved
if not self.saved:
- raise Task.NotSaved("Task needs to be saved to be refreshed" )
+ raise Task.NotSaved('Task needs to be saved to be refreshed' )
new_data = self.backend.refresh_task(self, after_save=after_save)
if only_fields:
to_update = dict(
new_data = self.backend.refresh_task(self, after_save=after_save)
if only_fields:
to_update = dict(
- [(k, new_data.get(k)) for k in only_fields])
+ [(k, new_data.get(k)) for k in only_fields],
+ )
self._update_data(to_update, update_original=True)
else:
self._load_data(new_data)
self._update_data(to_update, update_original=True)
else:
self._load_data(new_data)
def __repr__(self):
data = list(self[:REPR_OUTPUT_SIZE + 1])
if len(data) > REPR_OUTPUT_SIZE:
def __repr__(self):
data = list(self[:REPR_OUTPUT_SIZE + 1])
if len(data) > REPR_OUTPUT_SIZE:
- data[-1] = "...(remaining elements truncated)..."
+ data[-1] = '...(remaining elements truncated)...'
return repr(data)
def __len__(self):
return repr(data)
def __len__(self):
if not num:
raise Task.DoesNotExist(
'Task matching query does not exist. '
if not num:
raise Task.DoesNotExist(
'Task matching query does not exist. '
- 'Lookup parameters were {0}'.format(kwargs))
+ 'Lookup parameters were {0}'.format(kwargs),
+ )
raise ValueError(
'get() returned more than one Task -- it returned {0}! '
raise ValueError(
'get() returned more than one Task -- it returned {0}! '
- 'Lookup parameters were {1}'.format(num, kwargs))
+ 'Lookup parameters were {1}'.format(num, kwargs),
+ )
self.assertEqual(len(self.tw.tasks.all()), 0)
def test_all_non_empty(self):
self.assertEqual(len(self.tw.tasks.all()), 0)
def test_all_non_empty(self):
- Task(self.tw, description="test task" ).save()
+ Task(self.tw, description='test task' ).save()
self.assertEqual(len(self.tw.tasks.all()), 1)
self.assertEqual(self.tw.tasks.all()[0]['description'], 'test task')
self.assertEqual(self.tw.tasks.all()[0]['status'], 'pending')
def test_pending_non_empty(self):
self.assertEqual(len(self.tw.tasks.all()), 1)
self.assertEqual(self.tw.tasks.all()[0]['description'], 'test task')
self.assertEqual(self.tw.tasks.all()[0]['status'], 'pending')
def test_pending_non_empty(self):
- Task(self.tw, description="test task" ).save()
+ Task(self.tw, description='test task' ).save()
self.assertEqual(len(self.tw.tasks.pending()), 1)
self.assertEqual(len(self.tw.tasks.pending()), 1)
- self.assertEqual(self.tw.tasks.pending()[0]['description'],
- 'test task')
+ self.assertEqual(
+ self.tw.tasks.pending()[0]['description'],
+ 'test task',
+ )
self.assertEqual(self.tw.tasks.pending()[0]['status'], 'pending')
def test_completed_empty(self):
self.assertEqual(self.tw.tasks.pending()[0]['status'], 'pending')
def test_completed_empty(self):
- Task(self.tw, description="test task" ).save()
+ Task(self.tw, description='test task' ).save()
self.assertEqual(len(self.tw.tasks.completed()), 0)
def test_completed_non_empty(self):
self.assertEqual(len(self.tw.tasks.completed()), 0)
def test_completed_non_empty(self):
- Task(self.tw, description="test task" ).save()
+ Task(self.tw, description='test task' ).save()
self.assertEqual(len(self.tw.tasks.completed()), 0)
self.tw.tasks.all()[0].done()
self.assertEqual(len(self.tw.tasks.completed()), 1)
def test_deleted_empty(self):
self.assertEqual(len(self.tw.tasks.completed()), 0)
self.tw.tasks.all()[0].done()
self.assertEqual(len(self.tw.tasks.completed()), 1)
def test_deleted_empty(self):
- Task(self.tw, description="test task" ).save()
+ Task(self.tw, description='test task' ).save()
self.assertEqual(len(self.tw.tasks.deleted()), 0)
def test_deleted_non_empty(self):
self.assertEqual(len(self.tw.tasks.deleted()), 0)
def test_deleted_non_empty(self):
- Task(self.tw, description="test task" ).save()
+ Task(self.tw, description='test task' ).save()
self.assertEqual(len(self.tw.tasks.deleted()), 0)
self.tw.tasks.all()[0].delete()
self.assertEqual(len(self.tw.tasks.deleted()), 1)
def test_waiting_empty(self):
self.assertEqual(len(self.tw.tasks.deleted()), 0)
self.tw.tasks.all()[0].delete()
self.assertEqual(len(self.tw.tasks.deleted()), 1)
def test_waiting_empty(self):
- Task(self.tw, description="test task" ).save()
+ Task(self.tw, description='test task' ).save()
self.assertEqual(len(self.tw.tasks.waiting()), 0)
def test_waiting_non_empty(self):
self.assertEqual(len(self.tw.tasks.waiting()), 0)
def test_waiting_non_empty(self):
- Task(self.tw, description="test task" ).save()
+ Task(self.tw, description='test task' ).save()
self.assertEqual(len(self.tw.tasks.waiting()), 0)
t = self.tw.tasks.all()[0]
self.assertEqual(len(self.tw.tasks.waiting()), 0)
t = self.tw.tasks.all()[0]
self.assertEqual(len(self.tw.tasks.waiting()), 1)
def test_recurring_empty(self):
self.assertEqual(len(self.tw.tasks.waiting()), 1)
def test_recurring_empty(self):
- Task(self.tw, description="test task" ).save()
+ Task(self.tw, description='test task' ).save()
self.assertEqual(len(self.tw.tasks.recurring()), 0)
def test_recurring_non_empty(self):
self.assertEqual(len(self.tw.tasks.recurring()), 0)
def test_recurring_non_empty(self):
- Task(self.tw, description="test task", recur="daily",
- due=datetime.datetime.now()).save()
+ Task(
+ self.tw,
+ description='test task',
+ recur='daily',
+ due=datetime.datetime.now(),
+ ).save()
self.assertEqual(len(self.tw.tasks.recurring()), 1)
def test_filtering_by_attribute(self):
self.assertEqual(len(self.tw.tasks.recurring()), 1)
def test_filtering_by_attribute(self):
- Task(self.tw, description="no priority task" ).save()
- Task(self.tw, priority="H", description="high priority task" ).save()
+ Task(self.tw, description='no priority task' ).save()
+ Task(self.tw, priority='H', description='high priority task' ).save()
self.assertEqual(len(self.tw.tasks.all()), 2)
# Assert that the correct number of tasks is returned
self.assertEqual(len(self.tw.tasks.all()), 2)
# Assert that the correct number of tasks is returned
- self.assertEqual(len(self.tw.tasks.filter(priority="H" )), 1)
+ self.assertEqual(len(self.tw.tasks.filter(priority='H' )), 1)
# Assert that the correct tasks are returned
# Assert that the correct tasks are returned
- high_priority_task = self.tw.tasks.get(priority="H")
- self.assertEqual(high_priority_task['description'],
- "high priority task")
+ high_priority_task = self.tw.tasks.get(priority='H')
+ self.assertEqual(
+ high_priority_task['description'],
+ 'high priority task',
+ )
def test_filtering_by_empty_attribute(self):
def test_filtering_by_empty_attribute(self):
- Task(self.tw, description="no priority task" ).save()
- Task(self.tw, priority="H", description="high priority task" ).save()
+ Task(self.tw, description='no priority task' ).save()
+ Task(self.tw, priority='H', description='high priority task' ).save()
self.assertEqual(len(self.tw.tasks.all()), 2)
# Assert that the correct number of tasks is returned
self.assertEqual(len(self.tw.tasks.all()), 2)
# Assert that the correct number of tasks is returned
# Assert that the correct tasks are returned
no_priority_task = self.tw.tasks.get(priority=None)
# Assert that the correct tasks are returned
no_priority_task = self.tw.tasks.get(priority=None)
- self.assertEqual(no_priority_task['description'], "no priority task" )
+ self.assertEqual(no_priority_task['description'], 'no priority task' )
def test_filter_for_task_with_space_in_descripition(self):
def test_filter_for_task_with_space_in_descripition(self):
- task = Task(self.tw, description="test task" )
+ task = Task(self.tw, description='test task' )
- filtered_task = self.tw.tasks.get(description="test task" )
- self.assertEqual(filtered_task['description'], "test task" )
+ filtered_task = self.tw.tasks.get(description='test task' )
+ self.assertEqual(filtered_task['description'], 'test task' )
def test_filter_for_task_without_space_in_descripition(self):
def test_filter_for_task_without_space_in_descripition(self):
- task = Task(self.tw, description="test" )
+ task = Task(self.tw, description='test' )
- filtered_task = self.tw.tasks.get(description="test" )
- self.assertEqual(filtered_task['description'], "test" )
+ filtered_task = self.tw.tasks.get(description='test' )
+ self.assertEqual(filtered_task['description'], 'test' )
def test_filter_for_task_with_space_in_project(self):
def test_filter_for_task_with_space_in_project(self):
- task = Task(self.tw, description="test", project="random project" )
+ task = Task(self.tw, description='test', project='random project' )
- filtered_task = self.tw.tasks.get(project="random project" )
- self.assertEqual(filtered_task['project'], "random project" )
+ filtered_task = self.tw.tasks.get(project='random project' )
+ self.assertEqual(filtered_task['project'], 'random project' )
def test_filter_for_task_without_space_in_project(self):
def test_filter_for_task_without_space_in_project(self):
- task = Task(self.tw, description="test", project="random" )
+ task = Task(self.tw, description='test', project='random' )
- filtered_task = self.tw.tasks.get(project="random" )
- self.assertEqual(filtered_task['project'], "random" )
+ filtered_task = self.tw.tasks.get(project='random' )
+ self.assertEqual(filtered_task['project'], 'random' )
def test_filter_with_empty_uuid(self):
self.assertRaises(ValueError, lambda: self.tw.tasks.get(uuid=''))
def test_filter_dummy_by_status(self):
def test_filter_with_empty_uuid(self):
self.assertRaises(ValueError, lambda: self.tw.tasks.get(uuid=''))
def test_filter_dummy_by_status(self):
- t = Task(self.tw, description="test" )
+ t = Task(self.tw, description='test' )
t.save()
tasks = self.tw.tasks.filter(status=t['status'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_uuid(self):
t.save()
tasks = self.tw.tasks.filter(status=t['status'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_uuid(self):
- t = Task(self.tw, description="test" )
+ t = Task(self.tw, description='test' )
t.save()
tasks = self.tw.tasks.filter(uuid=t['uuid'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_entry(self):
t.save()
tasks = self.tw.tasks.filter(uuid=t['uuid'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_entry(self):
- t = Task(self.tw, description="test" )
+ t = Task(self.tw, description='test' )
t.save()
tasks = self.tw.tasks.filter(entry=t['entry'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_description(self):
t.save()
tasks = self.tw.tasks.filter(entry=t['entry'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_description(self):
- t = Task(self.tw, description="test" )
+ t = Task(self.tw, description='test' )
t.save()
tasks = self.tw.tasks.filter(description=t['description'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_start(self):
t.save()
tasks = self.tw.tasks.filter(description=t['description'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_start(self):
- t = Task(self.tw, description="test" )
+ t = Task(self.tw, description='test' )
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_end(self):
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_end(self):
- t = Task(self.tw, description="test" )
+ t = Task(self.tw, description='test' )
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_due(self):
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_due(self):
- t = Task(self.tw, description="test" , due=datetime.datetime.now())
+ t = Task(self.tw, description='test' , due=datetime.datetime.now())
t.save()
tasks = self.tw.tasks.filter(due=t['due'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_until(self):
t.save()
tasks = self.tw.tasks.filter(due=t['due'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_until(self):
- t = Task(self.tw, description="test" )
+ t = Task(self.tw, description='test' )
t.save()
tasks = self.tw.tasks.filter(until=t['until'])
t.save()
tasks = self.tw.tasks.filter(until=t['until'])
- t = Task(self.tw, description="test" )
+ t = Task(self.tw, description='test' )
t.save()
tasks = self.tw.tasks.filter(modified=t['modified'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_scheduled(self):
t.save()
tasks = self.tw.tasks.filter(modified=t['modified'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_scheduled(self):
- t = Task(self.tw, description="test" )
+ t = Task(self.tw, description='test' )
t.save()
tasks = self.tw.tasks.filter(scheduled=t['scheduled'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_tags(self):
t.save()
tasks = self.tw.tasks.filter(scheduled=t['scheduled'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_tags(self):
- t = Task(self.tw, description="test", tags=["home" ])
+ t = Task(self.tw, description='test', tags=['home' ])
t.save()
tasks = self.tw.tasks.filter(tags=t['tags'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_projects(self):
t.save()
tasks = self.tw.tasks.filter(tags=t['tags'])
self.assertEqual(list(tasks), [t])
def test_filter_dummy_by_projects(self):
- t = Task(self.tw, description="test", project="random" )
+ t = Task(self.tw, description='test', project='random' )
t.save()
tasks = self.tw.tasks.filter(project=t['project'])
self.assertEqual(list(tasks), [t])
def test_filter_by_priority(self):
t.save()
tasks = self.tw.tasks.filter(project=t['project'])
self.assertEqual(list(tasks), [t])
def test_filter_by_priority(self):
- t = Task(self.tw, description="test", priority="H" )
+ t = Task(self.tw, description='test', priority='H' )
t.save()
tasks = self.tw.tasks.filter(priority=t['priority'])
t.save()
tasks = self.tw.tasks.filter(priority=t['priority'])
def test_create_unsaved_task(self):
# Make sure a new task is not saved unless explicitly called for
def test_create_unsaved_task(self):
# Make sure a new task is not saved unless explicitly called for
- Task(self.tw, description="test task" )
+ Task(self.tw, description='test task' )
self.assertEqual(len(self.tw.tasks.all()), 0)
self.assertEqual(len(self.tw.tasks.all()), 0)
- # TODO: once python 2.6 compatiblity is over, use context managers here
+ # TODO: once python 2.6 compatibi lity is over, use context managers here
# and in all subsequent tests for assertRaises
def test_delete_unsaved_task(self):
# and in all subsequent tests for assertRaises
def test_delete_unsaved_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
self.assertRaises(Task.NotSaved, t.delete)
def test_complete_unsaved_task(self):
self.assertRaises(Task.NotSaved, t.delete)
def test_complete_unsaved_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
self.assertRaises(Task.NotSaved, t.done)
def test_refresh_unsaved_task(self):
self.assertRaises(Task.NotSaved, t.done)
def test_refresh_unsaved_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
self.assertRaises(Task.NotSaved, t.refresh)
def test_start_unsaved_task(self):
self.assertRaises(Task.NotSaved, t.refresh)
def test_start_unsaved_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
self.assertRaises(Task.NotSaved, t.start)
def test_delete_deleted_task(self):
self.assertRaises(Task.NotSaved, t.start)
def test_delete_deleted_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.save()
t.delete()
self.assertRaises(Task.DeletedTask, t.delete)
def test_complete_completed_task(self):
t.save()
t.delete()
self.assertRaises(Task.DeletedTask, t.delete)
def test_complete_completed_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.save()
t.done()
self.assertRaises(Task.CompletedTask, t.done)
def test_start_completed_task(self):
t.save()
t.done()
self.assertRaises(Task.CompletedTask, t.done)
def test_start_completed_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.save()
t.done()
self.assertRaises(Task.CompletedTask, t.start)
def test_add_completed_task(self):
t.save()
t.done()
self.assertRaises(Task.CompletedTask, t.start)
def test_add_completed_task(self):
- t = Task(self.tw, description="test", status="completed",
- end=datetime.datetime.now())
+ t = Task(
+ self.tw,
+ description='test',
+ status='completed',
+ end=datetime.datetime.now(),
+ )
t.save()
def test_add_multiple_completed_tasks(self):
t.save()
def test_add_multiple_completed_tasks(self):
- t1 = Task(self.tw, description="test1", status="completed",
- end=datetime.datetime.now())
- t2 = Task(self.tw, description="test2", status="completed",
- end=datetime.datetime.now())
+ t1 = Task(
+ self.tw,
+ description='test1',
+ status='completed',
+ end=datetime.datetime.now(),
+ )
+ t2 = Task(
+ self.tw,
+ description='test2',
+ status='completed',
+ end=datetime.datetime.now(),
+ )
t1.save()
t2.save()
def test_complete_deleted_task(self):
t1.save()
t2.save()
def test_complete_deleted_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.save()
t.delete()
self.assertRaises(Task.DeletedTask, t.done)
def test_starting_task(self):
t.save()
t.delete()
self.assertRaises(Task.DeletedTask, t.done)
def test_starting_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
now = t.datetime_normalizer(datetime.datetime.now())
t.save()
t.start()
now = t.datetime_normalizer(datetime.datetime.now())
t.save()
t.start()
self.assertEqual(t['status'], 'pending')
def test_completing_task(self):
self.assertEqual(t['status'], 'pending')
def test_completing_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
now = t.datetime_normalizer(datetime.datetime.now())
t.save()
t.done()
now = t.datetime_normalizer(datetime.datetime.now())
t.save()
t.done()
self.assertEqual(t['status'], 'completed')
def test_deleting_task(self):
self.assertEqual(t['status'], 'completed')
def test_deleting_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
now = t.datetime_normalizer(datetime.datetime.now())
t.save()
t.delete()
now = t.datetime_normalizer(datetime.datetime.now())
t.save()
t.delete()
self.assertEqual(t['status'], 'deleted')
def test_started_task_active(self):
self.assertEqual(t['status'], 'deleted')
def test_started_task_active(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.save()
t.start()
self.assertTrue(t.active)
def test_unstarted_task_inactive(self):
t.save()
t.start()
self.assertTrue(t.active)
def test_unstarted_task_inactive(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
self.assertFalse(t.active)
t.save()
self.assertFalse(t.active)
def test_start_active_task(self):
self.assertFalse(t.active)
t.save()
self.assertFalse(t.active)
def test_start_active_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.save()
t.start()
self.assertRaises(Task.ActiveTask, t.start)
def test_stop_completed_task(self):
t.save()
t.start()
self.assertRaises(Task.ActiveTask, t.start)
def test_stop_completed_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.save()
t.start()
t.done()
self.assertRaises(Task.InactiveTask, t.stop)
t.save()
t.start()
t.done()
self.assertRaises(Task.InactiveTask, t.stop)
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.save()
t.done()
self.assertRaises(Task.InactiveTask, t.stop)
def test_stop_deleted_task(self):
t.save()
t.done()
self.assertRaises(Task.InactiveTask, t.stop)
def test_stop_deleted_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.save()
t.start()
t.delete()
t.stop()
def test_stop_inactive_task(self):
t.save()
t.start()
t.delete()
t.stop()
def test_stop_inactive_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.save()
self.assertRaises(Task.InactiveTask, t.stop)
t.save()
self.assertRaises(Task.InactiveTask, t.stop)
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.save()
t.start()
t.stop()
t.save()
t.start()
t.stop()
self.assertRaises(Task.InactiveTask, t.stop)
def test_stopping_task(self):
self.assertRaises(Task.InactiveTask, t.stop)
def test_stopping_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.datetime_normalizer(datetime.datetime.now())
t.save()
t.start()
t.datetime_normalizer(datetime.datetime.now())
t.save()
t.start()
self.assertFalse(t.active)
def test_modify_simple_attribute_without_space(self):
self.assertFalse(t.active)
def test_modify_simple_attribute_without_space(self):
- t = Task(self.tw, description="test" )
+ t = Task(self.tw, description='test' )
- self.assertEquals(t['description'], "test" )
+ self.assertEquals(t['description'], 'test' )
- t['description'] = "test-modified"
+ t['description'] = 'test-modified'
- self.assertEquals(t['description'], "test-modified" )
+ self.assertEquals(t['description'], 'test-modified' )
def test_modify_simple_attribute_with_space(self):
# Space can pose problems with parsing
def test_modify_simple_attribute_with_space(self):
# Space can pose problems with parsing
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
- self.assertEquals(t['description'], "test task" )
+ self.assertEquals(t['description'], 'test task' )
- t['description'] = "test task modified"
+ t['description'] = 'test task modified'
- self.assertEquals(t['description'], "test task modified" )
+ self.assertEquals(t['description'], 'test task modified' )
def test_empty_dependency_set_of_unsaved_task(self):
def test_empty_dependency_set_of_unsaved_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
self.assertEqual(t['depends'], set())
def test_empty_dependency_set_of_saved_task(self):
self.assertEqual(t['depends'], set())
def test_empty_dependency_set_of_saved_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.save()
self.assertEqual(t['depends'], set())
def test_set_unsaved_task_as_dependency(self):
# Adds only one dependency to task with no dependencies
t.save()
self.assertEqual(t['depends'], set())
def test_set_unsaved_task_as_dependency(self):
# Adds only one dependency to task with no dependencies
- t = Task(self.tw, description="test task" )
- dependency = Task(self.tw, description="needs to be done first" )
+ t = Task(self.tw, description='test task' )
+ dependency = Task(self.tw, description='needs to be done first' )
# We only save the parent task, dependency task is unsaved
t.save()
# We only save the parent task, dependency task is unsaved
t.save()
def test_set_simple_dependency_set(self):
# Adds only one dependency to task with no dependencies
def test_set_simple_dependency_set(self):
# Adds only one dependency to task with no dependencies
- t = Task(self.tw, description="test task" )
- dependency = Task(self.tw, description="needs to be done first" )
+ t = Task(self.tw, description='test task' )
+ dependency = Task(self.tw, description='needs to be done first' )
t.save()
dependency.save()
t.save()
dependency.save()
def test_set_complex_dependency_set(self):
# Adds two dependencies to task with no dependencies
def test_set_complex_dependency_set(self):
# Adds two dependencies to task with no dependencies
- t = Task(self.tw, description="test task" )
- dependency1 = Task(self.tw, description="needs to be done first" )
- dependency2 = Task(self.tw, description="needs to be done second" )
+ t = Task(self.tw, description='test task' )
+ dependency1 = Task(self.tw, description='needs to be done first' )
+ dependency2 = Task(self.tw, description='needs to be done second' )
t.save()
dependency1.save()
t.save()
dependency1.save()
def test_remove_from_dependency_set(self):
# Removes dependency from task with two dependencies
def test_remove_from_dependency_set(self):
# Removes dependency from task with two dependencies
- t = Task(self.tw, description="test task" )
- dependency1 = Task(self.tw, description="needs to be done first" )
- dependency2 = Task(self.tw, description="needs to be done second" )
+ t = Task(self.tw, description='test task' )
+ dependency1 = Task(self.tw, description='needs to be done first' )
+ dependency2 = Task(self.tw, description='needs to be done second' )
dependency1.save()
dependency2.save()
dependency1.save()
dependency2.save()
def test_add_to_dependency_set(self):
# Adds dependency to task with one dependencies
def test_add_to_dependency_set(self):
# Adds dependency to task with one dependencies
- t = Task(self.tw, description="test task" )
- dependency1 = Task(self.tw, description="needs to be done first" )
- dependency2 = Task(self.tw, description="needs to be done second" )
+ t = Task(self.tw, description='test task' )
+ dependency1 = Task(self.tw, description='needs to be done first' )
+ dependency2 = Task(self.tw, description='needs to be done second' )
dependency1.save()
dependency2.save()
dependency1.save()
dependency2.save()
def test_add_to_empty_dependency_set(self):
# Adds dependency to task with one dependencies
def test_add_to_empty_dependency_set(self):
# Adds dependency to task with one dependencies
- t = Task(self.tw, description="test task" )
- dependency = Task(self.tw, description="needs to be done first" )
+ t = Task(self.tw, description='test task' )
+ dependency = Task(self.tw, description='needs to be done first' )
def test_simple_dependency_set_save_repeatedly(self):
# Adds only one dependency to task with no dependencies
def test_simple_dependency_set_save_repeatedly(self):
# Adds only one dependency to task with no dependencies
- t = Task(self.tw, description="test task" )
- dependency = Task(self.tw, description="needs to be done first" )
+ t = Task(self.tw, description='test task' )
+ dependency = Task(self.tw, description='needs to be done first' )
dependency.save()
t['depends'] = set([dependency])
t.save()
# We taint the task, but keep depends intact
dependency.save()
t['depends'] = set([dependency])
t.save()
# We taint the task, but keep depends intact
- t['description'] = "test task modified"
+ t['description'] = 'test task modified'
t.save()
self.assertEqual(t['depends'], set([dependency]))
# We taint the task, but assign the same set to the depends
t['depends'] = set([dependency])
t.save()
self.assertEqual(t['depends'], set([dependency]))
# We taint the task, but assign the same set to the depends
t['depends'] = set([dependency])
- t['description'] = "test task modified again"
+ t['description'] = 'test task modified again'
t.save()
self.assertEqual(t['depends'], set([dependency]))
def test_compare_different_tasks(self):
# Negative: compare two different tasks
t.save()
self.assertEqual(t['depends'], set([dependency]))
def test_compare_different_tasks(self):
# Negative: compare two different tasks
- t1 = Task(self.tw, description="test task" )
- t2 = Task(self.tw, description="test task" )
+ t1 = Task(self.tw, description='test task' )
+ t2 = Task(self.tw, description='test task' )
def test_compare_same_task_object(self):
# Compare Task object wit itself
def test_compare_same_task_object(self):
# Compare Task object wit itself
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.save()
self.assertEqual(t == t, True)
def test_compare_same_task(self):
# Compare the same task using two different objects
t.save()
self.assertEqual(t == t, True)
def test_compare_same_task(self):
# Compare the same task using two different objects
- t1 = Task(self.tw, description="test task" )
+ t1 = Task(self.tw, description='test task' )
t1.save()
t2 = self.tw.tasks.get(uuid=t1['uuid'])
t1.save()
t2 = self.tw.tasks.get(uuid=t1['uuid'])
def test_compare_unsaved_tasks(self):
# t1 and t2 are unsaved tasks, considered to be unequal
# despite the content of data
def test_compare_unsaved_tasks(self):
# t1 and t2 are unsaved tasks, considered to be unequal
# despite the content of data
- t1 = Task(self.tw, description="test task" )
- t2 = Task(self.tw, description="test task" )
+ t1 = Task(self.tw, description='test task' )
+ t2 = Task(self.tw, description='test task' )
self.assertEqual(t1 == t2, False)
def test_hash_unsaved_tasks(self):
# Considered equal, it's the same object
self.assertEqual(t1 == t2, False)
def test_hash_unsaved_tasks(self):
# Considered equal, it's the same object
- t1 = Task(self.tw, description="test task" )
+ t1 = Task(self.tw, description='test task' )
t2 = t1
self.assertEqual(hash(t1) == hash(t2), True)
def test_hash_same_task(self):
# Compare the hash of the task using two different objects
t2 = t1
self.assertEqual(hash(t1) == hash(t2), True)
def test_hash_same_task(self):
# Compare the hash of the task using two different objects
- t1 = Task(self.tw, description="test task" )
+ t1 = Task(self.tw, description='test task' )
t1.save()
t2 = self.tw.tasks.get(uuid=t1['uuid'])
t1.save()
t2 = self.tw.tasks.get(uuid=t1['uuid'])
def test_hash_unequal_unsaved_tasks(self):
# Compare the hash of the task using two different objects
def test_hash_unequal_unsaved_tasks(self):
# Compare the hash of the task using two different objects
- t1 = Task(self.tw, description="test task 1" )
- t2 = Task(self.tw, description="test task 2" )
+ t1 = Task(self.tw, description='test task 1' )
+ t2 = Task(self.tw, description='test task 2' )
self.assertNotEqual(t1.__hash__(), t2.__hash__())
def test_hash_unequal_saved_tasks(self):
# Compare the hash of the task using two different objects
self.assertNotEqual(t1.__hash__(), t2.__hash__())
def test_hash_unequal_saved_tasks(self):
# Compare the hash of the task using two different objects
- t1 = Task(self.tw, description="test task 1" )
- t2 = Task(self.tw, description="test task 2" )
+ t1 = Task(self.tw, description='test task 1' )
+ t2 = Task(self.tw, description='test task 2' )
self.assertNotEqual(t1.__hash__(), t2.__hash__())
def test_adding_task_with_priority(self):
self.assertNotEqual(t1.__hash__(), t2.__hash__())
def test_adding_task_with_priority(self):
- t = Task(self.tw, description="test task", priority="M" )
+ t = Task(self.tw, description='test task', priority='M' )
t.save()
def test_removing_priority_with_none(self):
t.save()
def test_removing_priority_with_none(self):
- t = Task(self.tw, description="test task", priority="L" )
+ t = Task(self.tw, description='test task', priority='L' )
t.save()
# Remove the priority mark
t.save()
# Remove the priority mark
self.assertEqual(t['priority'], None)
def test_adding_task_with_due_time(self):
self.assertEqual(t['priority'], None)
def test_adding_task_with_due_time(self):
- t = Task(self.tw, description="test task" , due=datetime.datetime.now())
+ t = Task(self.tw, description='test task' , due=datetime.datetime.now())
t.save()
def test_removing_due_time_with_none(self):
t.save()
def test_removing_due_time_with_none(self):
- t = Task(self.tw, description="test task" , due=datetime.datetime.now())
+ t = Task(self.tw, description='test task' , due=datetime.datetime.now())
t.save()
# Remove the due timestamp
t.save()
# Remove the due timestamp
self.assertEqual(set(t._modified_fields), set())
# Modify the task
self.assertEqual(set(t._modified_fields), set())
# Modify the task
- t['description'] = "test task"
+ t['description'] = 'test task'
self.assertEqual(set(t._modified_fields), set(['description']))
t['due'] = datetime.datetime(2014, 2, 14, 14, 14, 14) # <3
self.assertEqual(set(t._modified_fields), set(['description', 'due']))
self.assertEqual(set(t._modified_fields), set(['description']))
t['due'] = datetime.datetime(2014, 2, 14, 14, 14, 14) # <3
self.assertEqual(set(t._modified_fields), set(['description', 'due']))
- t['project'] = "test project"
- self.assertEqual(set(t._modified_fields),
- set(['description', 'due', 'project']))
+ t['project'] = 'test project'
+ self.assertEqual(
+ set(t._modified_fields),
+ set(['description', 'due', 'project']),
+ )
# List of modified fields should clear out when saved
t.save()
# List of modified fields should clear out when saved
t.save()
# Reassigning the fields with the same values now should not produce
# modified fields
# Reassigning the fields with the same values now should not produce
# modified fields
- t['description'] = "test task"
+ t['description'] = 'test task'
t['due'] = datetime.datetime(2014, 2, 14, 14, 14, 14) # <3
t['due'] = datetime.datetime(2014, 2, 14, 14, 14, 14) # <3
- t['project'] = "test project"
+ t['project'] = 'test project'
self.assertEqual(set(t._modified_fields), set())
def test_modified_fields_loaded_task(self):
t = Task(self.tw)
# Modify the task
self.assertEqual(set(t._modified_fields), set())
def test_modified_fields_loaded_task(self):
t = Task(self.tw)
# Modify the task
- t['description'] = "test task"
+ t['description'] = 'test task'
t['due'] = datetime.datetime(2014, 2, 14, 14, 14, 14) # <3
t['due'] = datetime.datetime(2014, 2, 14, 14, 14, 14) # <3
- t['project'] = "test project"
+ t['project'] = 'test project'
- dependency = Task(self.tw, description="dependency" )
+ dependency = Task(self.tw, description='dependency' )
dependency.save()
t['depends'] = set([dependency])
dependency.save()
t['depends'] = set([dependency])
# Reassigning the fields with the same values now should not produce
# modified fields
# Reassigning the fields with the same values now should not produce
# modified fields
- t['description'] = "test task"
+ t['description'] = 'test task'
t['due'] = datetime.datetime(2014, 2, 14, 14, 14, 14) # <3
t['due'] = datetime.datetime(2014, 2, 14, 14, 14, 14) # <3
- t['project'] = "test project"
+ t['project'] = 'test project'
t['depends'] = set([dependency])
self.assertEqual(set(t._modified_fields), set())
t['depends'] = set([dependency])
self.assertEqual(set(t._modified_fields), set())
# Test that we are unable to set readonly attrs through __init__
for readonly_key in Task.read_only_fields:
kwargs = {'description': 'test task', readonly_key: 'value'}
# Test that we are unable to set readonly attrs through __init__
for readonly_key in Task.read_only_fields:
kwargs = {'description': 'test task', readonly_key: 'value'}
- self.assertRaises(RuntimeError,
- lambda: Task(self.tw, **kwargs))
+ self.assertRaises(
+ RuntimeError,
+ lambda: Task(self.tw, **kwargs),
+ )
def test_setting_read_only_attrs_through_setitem(self):
# Test that we are unable to set readonly attrs through __init__
for readonly_key in Task.read_only_fields:
t = Task(self.tw, description='test task')
def test_setting_read_only_attrs_through_setitem(self):
# Test that we are unable to set readonly attrs through __init__
for readonly_key in Task.read_only_fields:
t = Task(self.tw, description='test task')
- self.assertRaises(RuntimeError,
- lambda: t.__setitem__(readonly_key, 'value'))
+ self.assertRaises(
+ RuntimeError,
+ lambda: t.__setitem__(readonly_key, 'value'),
+ )
def test_saving_unmodified_task(self):
def test_saving_unmodified_task(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.save()
t.save()
def test_adding_tag_by_appending(self):
t.save()
t.save()
def test_adding_tag_by_appending(self):
- t = Task(self.tw, description="test task" , tags=['test1'])
+ t = Task(self.tw, description='test task' , tags=['test1'])
t.save()
t['tags'].add('test2')
t.save()
self.assertEqual(t['tags'], set(['test1', 'test2']))
def test_adding_tag_twice(self):
t.save()
t['tags'].add('test2')
t.save()
self.assertEqual(t['tags'], set(['test1', 'test2']))
def test_adding_tag_twice(self):
- t = Task(self.tw, description="test task" , tags=['test1'])
+ t = Task(self.tw, description='test task' , tags=['test1'])
t.save()
t['tags'].add('test2')
t['tags'].add('test2')
t.save()
t['tags'].add('test2')
t['tags'].add('test2')
self.assertEqual(t['tags'], set(['test1', 'test2']))
def test_adding_tag_by_appending_empty(self):
self.assertEqual(t['tags'], set(['test1', 'test2']))
def test_adding_tag_by_appending_empty(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t.save()
t['tags'].add('test')
t.save()
t.save()
t['tags'].add('test')
t.save()
def test_serializers_returning_empty_string_for_none(self):
# Test that any serializer returns '' when passed None
t = Task(self.tw)
def test_serializers_returning_empty_string_for_none(self):
# Test that any serializer returns '' when passed None
t = Task(self.tw)
- serializers = [getattr(t, serializer_name) for serializer_name in
- filter(lambda x: x.startswith('serialize_'), dir(t))]
+ serializers = [
+ getattr(t, serializer_name)
+ for serializer_name in filter(
+ lambda x: x.startswith('serialize_'),
+ dir(t),
+ )
+ ]
for serializer in serializers:
self.assertEqual(serializer(None), '')
def test_deserializer_returning_empty_value_for_empty_string(self):
# Test that any deserializer returns empty value when passed ''
t = Task(self.tw)
for serializer in serializers:
self.assertEqual(serializer(None), '')
def test_deserializer_returning_empty_value_for_empty_string(self):
# Test that any deserializer returns empty value when passed ''
t = Task(self.tw)
- deserializers = [getattr(t, deserializer_name) for deserializer_name in
- filter(lambda x: x.startswith('deserialize_'), dir(t))]
+ deserializers = [
+ getattr(t, deserializer_name)
+ for deserializer_name in filter(
+ lambda x: x.startswith('deserialize_'),
+ dir(t),
+ )
+ ]
for deserializer in deserializers:
self.assertTrue(deserializer('') in (None, [], set()))
for deserializer in deserializers:
self.assertTrue(deserializer('') in (None, [], set()))
def test_recurrent_task_generation(self):
today = datetime.date.today()
def test_recurrent_task_generation(self):
today = datetime.date.today()
- t = Task(self.tw, description="brush teeth",
- due=today, recur="daily")
+ t = Task(
+ self.tw,
+ description='brush teeth',
+ due=today,
+ recur='daily',
+ )
t.save()
self.assertEqual(len(self.tw.tasks.pending()), 2)
def test_spawned_task_parent(self):
today = datetime.date.today()
t.save()
self.assertEqual(len(self.tw.tasks.pending()), 2)
def test_spawned_task_parent(self):
today = datetime.date.today()
- t = Task(self.tw, description="brush teeth",
- due=today, recur="daily")
+ t = Task(
+ self.tw,
+ description='brush teeth',
+ due=today,
+ recur='daily',
+ )
t.save()
spawned = self.tw.tasks.pending().get(due=today)
t.save()
spawned = self.tw.tasks.pending().get(due=today)
def test_modify_number_of_tasks_at_once(self):
for i in range(1, 100):
def test_modify_number_of_tasks_at_once(self):
for i in range(1, 100):
- Task(self.tw, description="test task %d" % i, tags=['test']).save()
+ Task(self.tw, description='test task %d' % i, tags=['test']).save()
self.tw.execute_command(['+test', 'mod', 'unified', 'description'])
def test_return_all_from_executed_command(self):
self.tw.execute_command(['+test', 'mod', 'unified', 'description'])
def test_return_all_from_executed_command(self):
- Task(self.tw, description="test task" , tags=['test']).save()
+ Task(self.tw, description='test task' , tags=['test']).save()
out, err, rc = self.tw.execute_command(['count'], return_all=True)
self.assertEqual(rc, 0)
def test_return_all_from_failed_executed_command(self):
out, err, rc = self.tw.execute_command(['count'], return_all=True)
self.assertEqual(rc, 0)
def test_return_all_from_failed_executed_command(self):
- Task(self.tw, description="test task", tags=['test']).save()
- out, err, rc = self.tw.execute_command(['countinvalid'],
- return_all=True,
- allow_failure=False)
+ Task(self.tw, description='test task', tags=['test']).save()
+ out, err, rc = self.tw.execute_command(
+ ['countinvalid'],
+ return_all=True,
+ allow_failure=False,
+ )
self.assertNotEqual(rc, 0)
self.assertNotEqual(rc, 0)
'"entry":"20141118T050231Z",'
'"status":"pending",'
'"start":"20141119T152233Z",'
'"entry":"20141118T050231Z",'
'"status":"pending",'
'"start":"20141119T152233Z",'
- '"uuid":"a360fc44-315c-4366-b70c-ea7e7520b749"}')
+ '"uuid":"a360fc44-315c-4366-b70c-ea7e7520b749"}',
+ )
input_add_data_recurring = six.StringIO(
'{"description":"Mow the lawn",'
input_add_data_recurring = six.StringIO(
'{"description":"Mow the lawn",'
'"parent":"62da6227-519c-42c2-915d-dccada926ad7",'
'"recur":"weekly",'
'"status":"pending",'
'"parent":"62da6227-519c-42c2-915d-dccada926ad7",'
'"recur":"weekly",'
'"status":"pending",'
- '"uuid":"81305335-0237-49ff-8e87-b3cdc2369cec"}')
+ '"uuid":"81305335-0237-49ff-8e87-b3cdc2369cec"}',
+ )
input_modify_data = six.StringIO(
input_modify_data = six.StringIO(
- input_add_data.getvalue() + '\n' +
- '{"description":"Buy some milk finally",'
- '"entry":"20141118T050231Z",'
- '"status":"completed",'
- '"uuid":"a360fc44-315c-4366-b70c-ea7e7520b749"}')
+ '\n'.join([
+ input_add_data.getvalue(),
+ (
+ '{"description":"Buy some milk finally",'
+ '"entry":"20141118T050231Z",'
+ '"status":"completed",'
+ '"uuid":"a360fc44-315c-4366-b70c-ea7e7520b749"}'
+ ),
+ ]),
+ )
exported_raw_data = (
'{"project":"Home",'
'"due":"20150101T232323Z",'
exported_raw_data = (
'{"project":"Home",'
'"due":"20150101T232323Z",'
- '"description":"test task"}')
+ '"description":"test task"}'
+ )
def test_setting_up_from_add_hook_input(self):
t = Task.from_input(input_file=self.input_add_data, backend=self.tw)
def test_setting_up_from_add_hook_input(self):
t = Task.from_input(input_file=self.input_add_data, backend=self.tw)
- self.assertEqual(t['description'], "Buy some milk" )
+ self.assertEqual(t['description'], 'Buy some milk' )
self.assertEqual(t.pending, True)
def test_setting_up_from_add_hook_input_recurring(self):
self.assertEqual(t.pending, True)
def test_setting_up_from_add_hook_input_recurring(self):
- t = Task.from_input(input_file=self.input_add_data_recurring,
- backend=self.tw)
- self.assertEqual(t['description'], "Mow the lawn")
+ t = Task.from_input(
+ input_file=self.input_add_data_recurring,
+ backend=self.tw,
+ )
+ self.assertEqual(t['description'], 'Mow the lawn')
self.assertEqual(t.pending, True)
def test_setting_up_from_modified_hook_input(self):
self.assertEqual(t.pending, True)
def test_setting_up_from_modified_hook_input(self):
- t = Task.from_input(input_file=self.input_modify_data, modify=True,
- backend=self.tw)
- self.assertEqual(t['description'], "Buy some milk finally")
+ t = Task.from_input(
+ input_file=self.input_modify_data,
+ modify=True,
+ backend=self.tw,
+ )
+ self.assertEqual(t['description'], 'Buy some milk finally')
self.assertEqual(t.pending, False)
self.assertEqual(t.completed, True)
self.assertEqual(t.pending, False)
self.assertEqual(t.completed, True)
- self.assertEqual(t._original_data['status'], "pending")
- self.assertEqual(t._original_data['description'], "Buy some milk")
- self.assertEqual(set(t._modified_fields),
- set(['status', 'description', 'start']))
+ self.assertEqual(t._original_data['status'], 'pending')
+ self.assertEqual(t._original_data['description'], 'Buy some milk')
+ self.assertEqual(
+ set(t._modified_fields),
+ set(['status', 'description', 'start']),
+ )
def test_export_data(self):
def test_export_data(self):
- t = Task(self.tw, description="test task",
- project="Home",
- due=pytz.utc.localize(datetime.datetime(2015, 1, 1,
- 23, 23, 23)))
+ t = Task(
+ self.tw,
+ description='test task',
+ project='Home',
+ due=pytz.utc.localize(
+ datetime.datetime(2015, 1, 1, 23, 23, 23)),
+ )
# Check that the output is a permutation of:
# {"project":"Home","description":"test task","due":"20150101232323Z"}
# Check that the output is a permutation of:
# {"project":"Home","description":"test task","due":"20150101232323Z"}
for segments in itertools.permutations(allowed_segments)
]
for segments in itertools.permutations(allowed_segments)
]
- self.assertTrue(any(t.export_data() == expected
- for expected in allowed_output))
+ self.assertTrue(
+ any(t.export_data() == expected
+ for expected in allowed_output),
+ )
class TimezoneAwareDatetimeTest(TasklibTest):
class TimezoneAwareDatetimeTest(TasklibTest):
self.utctime_aware = self.localtime_aware.astimezone(pytz.utc)
def test_timezone_naive_datetime_setitem(self):
self.utctime_aware = self.localtime_aware.astimezone(pytz.utc)
def test_timezone_naive_datetime_setitem(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t['due'] = self.localtime_naive
self.assertEqual(t['due'], self.localtime_aware)
def test_timezone_naive_datetime_using_init(self):
t['due'] = self.localtime_naive
self.assertEqual(t['due'], self.localtime_aware)
def test_timezone_naive_datetime_using_init(self):
- t = Task(self.tw, description="test task" , due=self.localtime_naive)
+ t = Task(self.tw, description='test task' , due=self.localtime_naive)
self.assertEqual(t['due'], self.localtime_aware)
def test_filter_by_naive_datetime(self):
self.assertEqual(t['due'], self.localtime_aware)
def test_filter_by_naive_datetime(self):
- t = Task(self.tw, description="task1" , due=self.localtime_naive)
+ t = Task(self.tw, description='task1' , due=self.localtime_naive)
t.save()
matching_tasks = self.tw.tasks.filter(due=self.localtime_naive)
self.assertEqual(len(matching_tasks), 1)
def test_serialize_naive_datetime(self):
t.save()
matching_tasks = self.tw.tasks.filter(due=self.localtime_naive)
self.assertEqual(len(matching_tasks), 1)
def test_serialize_naive_datetime(self):
- t = Task(self.tw, description="task1", due=self.localtime_naive)
- self.assertEqual(json.loads(t.export_data())['due'],
- self.utctime_aware.strftime(DATE_FORMAT))
+ t = Task(self.tw, description='task1', due=self.localtime_naive)
+ self.assertEqual(
+ json.loads(t.export_data())['due'],
+ self.utctime_aware.strftime(DATE_FORMAT),
+ )
def test_timezone_naive_date_setitem(self):
def test_timezone_naive_date_setitem(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t['due'] = self.localdate_naive
self.assertEqual(t['due'], self.localtime_aware)
def test_timezone_naive_date_using_init(self):
t['due'] = self.localdate_naive
self.assertEqual(t['due'], self.localtime_aware)
def test_timezone_naive_date_using_init(self):
- t = Task(self.tw, description="test task" , due=self.localdate_naive)
+ t = Task(self.tw, description='test task' , due=self.localdate_naive)
self.assertEqual(t['due'], self.localtime_aware)
def test_filter_by_naive_date(self):
self.assertEqual(t['due'], self.localtime_aware)
def test_filter_by_naive_date(self):
- t = Task(self.tw, description="task1" , due=self.localdate_naive)
+ t = Task(self.tw, description='task1' , due=self.localdate_naive)
t.save()
matching_tasks = self.tw.tasks.filter(due=self.localdate_naive)
self.assertEqual(len(matching_tasks), 1)
def test_serialize_naive_date(self):
t.save()
matching_tasks = self.tw.tasks.filter(due=self.localdate_naive)
self.assertEqual(len(matching_tasks), 1)
def test_serialize_naive_date(self):
- t = Task(self.tw, description="task1", due=self.localdate_naive)
- self.assertEqual(json.loads(t.export_data())['due'],
- self.utctime_aware.strftime(DATE_FORMAT))
+ t = Task(self.tw, description='task1', due=self.localdate_naive)
+ self.assertEqual(
+ json.loads(t.export_data())['due'],
+ self.utctime_aware.strftime(DATE_FORMAT),
+ )
def test_timezone_aware_datetime_setitem(self):
def test_timezone_aware_datetime_setitem(self):
- t = Task(self.tw, description="test task" )
+ t = Task(self.tw, description='test task' )
t['due'] = self.localtime_aware
self.assertEqual(t['due'], self.localtime_aware)
def test_timezone_aware_datetime_using_init(self):
t['due'] = self.localtime_aware
self.assertEqual(t['due'], self.localtime_aware)
def test_timezone_aware_datetime_using_init(self):
- t = Task(self.tw, description="test task" , due=self.localtime_aware)
+ t = Task(self.tw, description='test task' , due=self.localtime_aware)
self.assertEqual(t['due'], self.localtime_aware)
def test_filter_by_aware_datetime(self):
self.assertEqual(t['due'], self.localtime_aware)
def test_filter_by_aware_datetime(self):
- t = Task(self.tw, description="task1" , due=self.localtime_aware)
+ t = Task(self.tw, description='task1' , due=self.localtime_aware)
t.save()
matching_tasks = self.tw.tasks.filter(due=self.localtime_aware)
self.assertEqual(len(matching_tasks), 1)
def test_serialize_aware_datetime(self):
t.save()
matching_tasks = self.tw.tasks.filter(due=self.localtime_aware)
self.assertEqual(len(matching_tasks), 1)
def test_serialize_aware_datetime(self):
- t = Task(self.tw, description="task1", due=self.localtime_aware)
- self.assertEqual(json.loads(t.export_data())['due'],
- self.utctime_aware.strftime(DATE_FORMAT))
+ t = Task(self.tw, description='task1', due=self.localtime_aware)
+ self.assertEqual(
+ json.loads(t.export_data())['due'],
+ self.utctime_aware.strftime(DATE_FORMAT),
+ )
class DatetimeStringTest(TasklibTest):
class DatetimeStringTest(TasklibTest):
- t = Task(self.tw, description="test task", due="now" )
+ t = Task(self.tw, description='test task', due='now' )
now = local_zone.localize(datetime.datetime.now())
# Assert that both times are not more than 5 seconds apart
now = local_zone.localize(datetime.datetime.now())
# Assert that both times are not more than 5 seconds apart
- t = Task(self.tw, description="test task", due="eoy" )
+ t = Task(self.tw, description='test task', due='eoy' )
now = local_zone.localize(datetime.datetime.now())
eoy = local_zone.localize(datetime.datetime(
year=now.year,
now = local_zone.localize(datetime.datetime.now())
eoy = local_zone.localize(datetime.datetime(
year=now.year,
day=31,
hour=23,
minute=59,
day=31,
hour=23,
minute=59,
))
self.assertEqual(eoy, t['due'])
))
self.assertEqual(eoy, t['due'])
- t = Task(self.tw, description="test task", due="eoy - 4 months" )
+ t = Task(self.tw, description='test task', due='eoy - 4 months' )
now = local_zone.localize(datetime.datetime.now())
now = local_zone.localize(datetime.datetime.now())
- due_date = local_zone.localize(datetime.datetime(
- year=now.year,
- month=12,
- day=31,
- hour=23,
- minute=59,
- second=59
- )) - datetime.timedelta(0, 4 * 30 * 86400)
+ due_date = local_zone.localize(
+ datetime.datetime(
+ year=now.year,
+ month=12,
+ day=31,
+ hour=23,
+ minute=59,
+ second=59,
+ )
+ ) - datetime.timedelta(0, 4 * 30 * 86400)
self.assertEqual(due_date, t['due'])
def test_filtering_with_string_datetime(self):
self.assertEqual(due_date, t['due'])
def test_filtering_with_string_datetime(self):
- t = Task(self.tw, description="test task",
- due=datetime.datetime.now() - datetime.timedelta(0, 2))
+ t = Task(
+ self.tw,
+ description='test task',
+ due=datetime.datetime.now() - datetime.timedelta(0, 2),
+ )
- self.assertEqual(len(self.tw.tasks.filter(due__before="now" )), 1)
+ self.assertEqual(len(self.tw.tasks.filter(due__before='now' )), 1)
class AnnotationTest(TasklibTest):
def setUp(self):
super(AnnotationTest, self).setUp()
class AnnotationTest(TasklibTest):
def setUp(self):
super(AnnotationTest, self).setUp()
- Task(self.tw, description="test task" ).save()
+ Task(self.tw, description='test task' ).save()
def test_adding_annotation(self):
task = self.tw.tasks.get()
def test_adding_annotation(self):
task = self.tw.tasks.get()
def test_serialize_annotations(self):
# Test that serializing annotations is possible
def test_serialize_annotations(self):
# Test that serializing annotations is possible
- t = Task(self.tw, description="test" )
+ t = Task(self.tw, description='test' )
- t.add_annotation("annotation1" )
- t.add_annotation("annotation2" )
+ t.add_annotation('annotation1' )
+ t.add_annotation('annotation2' )
data = t._serialize('annotations', t._data['annotations'])
data = t._serialize('annotations', t._data['annotations'])
self.assertEqual(type(data[0]), dict)
self.assertEqual(type(data[1]), dict)
self.assertEqual(type(data[0]), dict)
self.assertEqual(type(data[1]), dict)
- self.assertEqual(data[0]['description'], "annotation1" )
- self.assertEqual(data[1]['description'], "annotation2" )
+ self.assertEqual(data[0]['description'], 'annotation1' )
+ self.assertEqual(data[1]['description'], 'annotation2' )
class UnicodeTest(TasklibTest):
def test_unicode_task(self):
class UnicodeTest(TasklibTest):
def test_unicode_task(self):
- Task(self.tw, description=six.u("†åßk" )).save()
+ Task(self.tw, description=six.u('†åßk' )).save()
self.tw.tasks.get()
def test_filter_by_unicode_task(self):
self.tw.tasks.get()
def test_filter_by_unicode_task(self):
- Task(self.tw, description=six.u("†åßk" )).save()
- tasks = self.tw.tasks.filter(description=six.u("†åßk" ))
+ Task(self.tw, description=six.u('†åßk' )).save()
+ tasks = self.tw.tasks.filter(description=six.u('†åßk' ))
self.assertEqual(len(tasks), 1)
def test_non_unicode_task(self):
self.assertEqual(len(tasks), 1)
def test_non_unicode_task(self):
- Task(self.tw, description="test task" ).save()
+ Task(self.tw, description='test task' ).save()
self.assertEqual(self.sample, self.original_sample)
def test_readonlydictview_iter(self):
self.assertEqual(self.sample, self.original_sample)
def test_readonlydictview_iter(self):
- self.assertEqual(list(key for key in self.view),
- list(key for key in self.sample))
+ self.assertEqual(
+ list(key for key in self.view),
+ list(key for key in self.sample),
+ )
# Assert the view is correct after modification
self.sample['new'] = 'value'
# Assert the view is correct after modification
self.sample['new'] = 'value'
- self.assertEqual(list(key for key in self.view),
- list(key for key in self.sample))
+ self.assertEqual(
+ list(key for key in self.view),
+ list(key for key in self.sample),
+ )
def test_readonlydictview_len(self):
self.assertEqual(len(self.view), len(self.sample))
def test_readonlydictview_len(self):
self.assertEqual(len(self.view), len(self.sample))
def setUp(self):
super(LazyUUIDTaskTest, self).setUp()
def setUp(self):
super(LazyUUIDTaskTest, self).setUp()
- self.stored = Task(self.tw, description="this is test task" )
+ self.stored = Task(self.tw, description='this is test task' )
self.stored.save()
self.lazy = LazyUUIDTask(self.tw, self.stored['uuid'])
self.stored.save()
self.lazy = LazyUUIDTask(self.tw, self.stored['uuid'])
def setUp(self):
super(LazyUUIDTaskSetTest, self).setUp()
def setUp(self):
super(LazyUUIDTaskSetTest, self).setUp()
- self.task1 = Task(self.tw, description="task 1" )
- self.task2 = Task(self.tw, description="task 2" )
- self.task3 = Task(self.tw, description="task 3" )
+ self.task1 = Task(self.tw, description='task 1' )
+ self.task2 = Task(self.tw, description='task 2' )
+ self.task3 = Task(self.tw, description='task 3' )
self.task1.save()
self.task2.save()
self.task1.save()
self.task2.save()
self.uuids = (
self.task1['uuid'],
self.task2['uuid'],
self.uuids = (
self.task1['uuid'],
self.task2['uuid'],
)
self.lazy = LazyUUIDTaskSet(self.tw, self.uuids)
)
self.lazy = LazyUUIDTaskSet(self.tw, self.uuids)
taskset = set([self.task1])
lazyset = LazyUUIDTaskSet(
self.tw,
taskset = set([self.task1])
lazyset = LazyUUIDTaskSet(
self.tw,
- (self.task2['uuid'], self.task3['uuid'])
+ (self.task2['uuid'], self.task3['uuid']),
)
assert taskset | lazyset == self.lazy
)
assert taskset | lazyset == self.lazy
taskset = set([self.task1, self.task2])
lazyset = LazyUUIDTaskSet(
self.tw,
taskset = set([self.task1, self.task2])
lazyset = LazyUUIDTaskSet(
self.tw,
- (self.task2['uuid'], self.task3['uuid'])
+ (self.task2['uuid'], self.task3['uuid']),
)
assert taskset - lazyset == set([self.task1])
)
assert taskset - lazyset == set([self.task1])
taskset = set([self.task1, self.task2])
lazyset = LazyUUIDTaskSet(
self.tw,
taskset = set([self.task1, self.task2])
lazyset = LazyUUIDTaskSet(
self.tw,
- (self.task2['uuid'], self.task3['uuid'])
+ (self.task2['uuid'], self.task3['uuid']),
)
assert taskset ^ lazyset == set([self.task1, self.task3])
assert lazyset ^ taskset == set([self.task1, self.task3])
)
assert taskset ^ lazyset == set([self.task1, self.task3])
assert lazyset ^ taskset == set([self.task1, self.task3])
- assert taskset.symmetric_difference(lazyset) == set([self.task1,
- self.task3])
- assert lazyset.symmetric_difference(taskset) == set([self.task1,
- self.task3])
+ self.assertEqual(
+ taskset.symmetric_difference(lazyset),
+ set([self.task1, self.task3]),
+ )
+ self.assertEqual(
+ lazyset.symmetric_difference(taskset),
+ set([self.task1, self.task3]),
+ )
lazyset ^= taskset
assert lazyset == set([self.task1, self.task3])
lazyset ^= taskset
assert lazyset == set([self.task1, self.task3])
taskset = set([self.task1, self.task2])
lazyset = LazyUUIDTaskSet(
self.tw,
taskset = set([self.task1, self.task2])
lazyset = LazyUUIDTaskSet(
self.tw,
- (self.task2['uuid'], self.task3['uuid'])
+ (self.task2['uuid'], self.task3['uuid']),
)
assert taskset & lazyset == set([self.task2])
)
assert taskset & lazyset == set([self.task2])
class TaskWarriorBackendTest(TasklibTest):
def test_config(self):
class TaskWarriorBackendTest(TasklibTest):
def test_config(self):
- assert self.tw.config['nag'] == "You have more urgent tasks."
- assert self.tw.config['default.command'] == "next"
- assert self.tw.config['dependency.indicator'] == "D"
+ assert self.tw.config['nag'] == 'You have more urgent tasks.'
+ assert self.tw.config['default.command'] == 'next'
+ assert self.tw.config['dependency.indicator'] == 'D'