from pprint import pformat
[docs]class Model(object):
"""
Implements a generic object.
"""
def __init__(self, data, api):
self.temp_id = ''
self.data = data
self.api = api
def __setitem__(self, key, value):
self.data[key] = value
def __getitem__(self, key):
return self.data[key]
def __repr__(self):
formatted_dict = pformat(dict(self.data))
classname = self.__class__.__name__
return '%s(%s)' % (classname, formatted_dict)
[docs]class Collaborator(Model):
"""
Implements a collaborator.
"""
[docs] def delete(self, project_id):
"""
Deletes a collaborator from a shared project.
"""
self.api.collaborators.delete(project_id, self['email'])
[docs]class CollaboratorState(Model):
"""
Implements a collaborator state.
"""
pass
[docs]class Filter(Model):
"""
Implements a filter.
"""
[docs] def update(self, **kwargs):
"""
Updates filter.
"""
self.api.filters.update(self['id'], **kwargs)
self.data.update(kwargs)
[docs] def delete(self):
"""
Deletes filter.
"""
self.api.filters.delete(self['id'])
self.data['is_deleted'] = 1
[docs]class Item(Model):
"""
Implements an item.
"""
[docs] def update(self, **kwargs):
"""
Updates item.
"""
self.api.items.update(self['id'], **kwargs)
self.data.update(kwargs)
[docs] def delete(self):
"""
Deletes item.
"""
self.api.items.delete(self['id'])
self.data['is_deleted'] = 1
[docs] def move(self, **kwargs):
"""
Moves item to another parent or project.
"""
if 'parent_id' in kwargs:
self.api.items.move(self['id'], parent_id=kwargs.get('parent_id'))
self.data['parent_id'] = kwargs.get('parent_id')
elif 'project_id' in kwargs:
self.api.items.move(self['id'], project_id=kwargs.get('project_id'))
self.data['project_id'] = kwargs.get('project_id')
else:
raise TypeError('move() takes one of parent_id or project_id arguments')
[docs] def close(self):
"""
Marks item as closed
"""
self.api.items.close(self['id'])
[docs] def complete(self, date_completed=None):
"""
Marks item as completed.
"""
self.api.items.complete(self['id'], date_completed=date_completed)
self.data['checked'] = 1
[docs] def uncomplete(self):
"""
Marks item as uncompleted.
"""
self.api.items.uncomplete(self['id'])
self.data['checked'] = 0
[docs] def archive(self):
"""
Marks item as archived.
"""
self.api.items.archive(self['id'])
self.data['in_history'] = 1
[docs] def unarchive(self):
"""
Marks item as unarchived.
"""
self.api.items.unarchive(self['id'])
self.data['in_history'] = 0
[docs] def update_date_complete(self, new_date_utc=None, date_string=None,
is_forward=None):
"""
Completes a recurring task.
"""
self.api.items.update_date_complete(self['id'], new_date_utc,
date_string, is_forward)
if new_date_utc:
self.data['due_date_utc'] = new_date_utc
if date_string:
self.data['date_string'] = date_string
[docs]class Label(Model):
"""
Implements a label.
"""
[docs] def update(self, **kwargs):
"""
Updates label.
"""
self.api.labels.update(self['id'], **kwargs)
self.data.update(kwargs)
[docs] def delete(self):
"""
Deletes label.
"""
self.api.labels.delete(self['id'])
self.data['is_deleted'] = 1
[docs]class LiveNotification(Model):
"""
Implements a live notification.
"""
pass
[docs]class GenericNote(Model):
"""
Implements a note.
"""
#: has to be defined in subclasses
local_manager = None
[docs] def update(self, **kwargs):
"""
Updates note.
"""
self.local_manager.update(self['id'], **kwargs)
self.data.update(kwargs)
[docs] def delete(self):
"""
Deletes note.
"""
self.local_manager.delete(self['id'])
self.data['is_deleted'] = 1
[docs]class Note(GenericNote):
"""
Implement an item note.
"""
def __init__(self, data, api):
GenericNote.__init__(self, data, api)
self.local_manager = self.api.notes
[docs]class ProjectNote(GenericNote):
"""
Implement a project note.
"""
def __init__(self, data, api):
GenericNote.__init__(self, data, api)
self.local_manager = self.api.project_notes
[docs]class Project(Model):
"""
Implements a project.
"""
[docs] def update(self, **kwargs):
"""
Updates project.
"""
self.api.projects.update(self['id'], **kwargs)
self.data.update(kwargs)
[docs] def delete(self):
"""
Deletes project.
"""
self.api.projects.delete(self['id'])
self.data['is_deleted'] = 1
[docs] def archive(self):
"""
Marks project as archived.
"""
self.api.projects.archive(self['id'])
self.data['is_archived'] = 1
[docs] def unarchive(self):
"""
Marks project as unarchived.
"""
self.api.projects.unarchive(self['id'])
self.data['is_archived'] = 0
[docs] def move(self, parent_id):
"""
Moves item to another parent.
"""
self.api.projects.move(self['id'], parent_id)
[docs] def share(self, email):
"""
Shares projects with a user.
"""
self.api.projects.share(self['id'], email)
[docs] def take_ownership(self):
"""
Takes ownership of a shared project.
"""
self.api.projects.take_ownership(self['id'])
[docs]class Reminder(Model):
"""
Implements a reminder.
"""
[docs] def update(self, **kwargs):
"""
Updates reminder.
"""
self.api.reminders.update(self['id'], **kwargs)
self.data.update(kwargs)
[docs] def delete(self):
"""
Deletes reminder.
"""
self.api.reminders.delete(self['id'])
self.data['is_deleted'] = 1