Source code for todoist.models

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