Source code for todoist.managers.items

# -*- coding: utf-8 -*-
from .. import models
from .generic import AllMixin, GetByIdMixin, Manager, SyncMixin


[docs]class ItemsManager(Manager, AllMixin, GetByIdMixin, SyncMixin): state_name = 'items' object_type = 'item'
[docs] def add(self, content, **kwargs): """ Creates a local item object. """ project_id = kwargs.get('project_id') if not project_id: project_id = self.state['user']['inbox_project'] obj = models.Item({ 'content': content, 'project_id': project_id, }, self.api) obj.temp_id = obj['id'] = self.api.generate_uuid() obj.data.update(kwargs) self.state[self.state_name].append(obj) cmd = { 'type': 'item_add', 'temp_id': obj.temp_id, 'uuid': self.api.generate_uuid(), 'args': {key: obj.data[key] for key in obj.data if key != 'id'} } self.queue.append(cmd) return obj
[docs] def update(self, item_id, **kwargs): """ Updates an item remotely. """ args = {'id': item_id} args.update(kwargs) cmd = { 'type': 'item_update', 'uuid': self.api.generate_uuid(), 'args': args, } self.queue.append(cmd)
[docs] def delete(self, item_id): """ Delete items remotely. """ cmd = { 'type': 'item_delete', 'uuid': self.api.generate_uuid(), 'args': { 'id': item_id } } self.queue.append(cmd)
[docs] def move(self, item_id, **kwargs): """ Moves item to another parent or project remotely. """ args = { 'id': item_id, } if 'parent_id' in kwargs: args['parent_id'] = kwargs.get('parent_id') elif 'project_id' in kwargs: args['project_id'] = kwargs.get('project_id') else: raise TypeError('move() takes one of parent_id or project_id arguments') cmd = { 'type': 'item_move', 'uuid': self.api.generate_uuid(), 'args': args } self.queue.append(cmd)
[docs] def close(self, item_id): """ Marks item as done """ cmd = { 'type': 'item_close', 'uuid': self.api.generate_uuid(), 'args': { 'id': item_id, }, } self.queue.append(cmd)
[docs] def complete(self, item_id, date_completed=None, force_history=None): """ Marks item as completed remotely. """ args = { 'id': item_id, } if date_completed is not None: args['date_completed'] = date_completed if force_history is not None: args['force_history'] = force_history cmd = { 'type': 'item_complete', 'uuid': self.api.generate_uuid(), 'args': args, } self.queue.append(cmd)
[docs] def uncomplete(self, item_id): """ Marks item as uncompleted remotely. """ cmd = { 'type': 'item_uncomplete', 'uuid': self.api.generate_uuid(), 'args': { 'id': item_id, }, } self.queue.append(cmd)
[docs] def archive(self, item_id): """ Marks item as archived remotely. """ cmd = { 'type': 'item_archive', 'uuid': self.api.generate_uuid(), 'args': { 'id': item_id, }, } self.queue.append(cmd)
[docs] def unarchive(self, item_id): """ Marks item as unarchived remotely. """ cmd = { 'type': 'item_unarchive', 'uuid': self.api.generate_uuid(), 'args': { 'id': item_id, }, } self.queue.append(cmd)
[docs] def update_date_complete(self, item_id, due=None): """ Completes a recurring task remotely. """ args = { 'id': item_id, } if due: args['due'] = due cmd = { 'type': 'item_update_date_complete', 'uuid': self.api.generate_uuid(), 'args': args, } self.queue.append(cmd)
[docs] def reorder(self, items): """ Updates the child_order of the specified items. """ cmd = { 'type': 'item_reorder', 'uuid': self.api.generate_uuid(), 'args': { 'items': items, }, } self.queue.append(cmd)
[docs] def update_day_orders(self, ids_to_orders): """ Updates in the local state the day orders of multiple items remotely. """ cmd = { 'type': 'item_update_day_orders', 'uuid': self.api.generate_uuid(), 'args': { 'ids_to_orders': ids_to_orders, }, } self.queue.append(cmd)
[docs] def get_completed(self, project_id, **kwargs): """ Returns a project's completed items. """ params = {'token': self.token, 'project_id': project_id} params.update(kwargs) return self.api._get('items/get_completed', params=params)
[docs] def get(self, item_id): """ Gets an existing item. """ params = {'token': self.token, 'item_id': item_id} obj = self.api._get('items/get', params=params) if obj and 'error' in obj: return None data = {'projects': [], 'items': [], 'notes': []} if obj.get('project'): data['projects'].append(obj.get('project')) if obj.get('item'): data['items'].append(obj.get('item')) if obj.get('notes'): data['notes'] += obj.get('notes') self.api._update_state(data) return obj