예제 #1
0
    def complete_task_on_list_explain(self, task_name, list_name,
                                      list_best_match=None):
        task_best_match = self.find_task_on_list_explain(
            task_name,
            list_name,
            list_best_match=list_best_match,
            speak_level=1)

        if not task_best_match.name:
            return False

        if task_name != task_best_match.name:
            response = self.get_response('DoYouWantToCompleteIt', num_retries=0)

            if not response or response not in self.yes_keyword:
                self.speak_dialog('NoConfirm')
                return True

        if not self.get_timeline():
            return False

        c = {"dialog": "CompleteTaskOnListUndo",
             "dialogParam": {
                 TASK_PARAMETER: task_best_match.name,
                 LIST_PARAMETER: task_best_match.list_best_match.name},
             'transaction_id': []}

        for t in task_best_match.task_list:
            transaction_id, error_text, error_code = cow_rest.complete_task(
                t['task_id'],
                t['taskseries_id'],
                task_best_match.list_best_match.id)
            if error_text:
                self.speak_dialog('RestResponseError',
                                  {ERROR_TEXT_PARAMETER: error_text,
                                   ERROR_CODE_PARAMETER: error_code})
                # RECOVER
                return False

            c['transaction_id'].append(transaction_id)

        if len(task_best_match.task_list) == 1:
            self.speak_dialog("CompleteTaskOnList", {
                TASK_PARAMETER: task_best_match.name,
                LIST_PARAMETER: task_best_match.list_best_match.name})
        else:
            self.speak_dialog("CompleteManyTasksOnList", {
                NOF_TASK_PARAMETER: str(len(task_best_match.task_list)),
                TASK_PARAMETER: task_best_match.name,
                LIST_PARAMETER: task_best_match.list_best_match.name})

        self.set_context(UNDO_CONTEXT, json.dumps(c))

        return True
예제 #2
0
    def complete_list_explain(self, list_name, list_best_match=None):
        if not list_best_match:
            list_best_match = self.find_list_explain(list_name)
            if not list_best_match.id or list_best_match.error_text:
                return

        task_list, error_code, error_text = cow_rest.list_task(
            'status:incomplete', list_best_match.id)
        if error_text:
            self.speak_dialog('RestResponseError',
                              {ERROR_TEXT_PARAMETER: error_text,
                               ERROR_CODE_PARAMETER: error_code})
            return

        flat_task_list = cow_rest.flat_task_list(task_list)

        if len(flat_task_list) == 0:
            self.speak_dialog("NoTaskOnList",
                              {LIST_PARAMETER: list_best_match.name})
            return

        nof_tasks_to_complete = len(flat_task_list)

        if nof_tasks_to_complete > MAX_TASK_COMPLETE:
            nof_tasks_to_complete = MAX_TASK_COMPLETE
            self.speak_dialog('CompletePartOfListStart', {
                NOF_TASK_PARAMETER: str(len(flat_task_list))})

        if nof_tasks_to_complete > 10:
            self.speak_dialog('CompleteListStart',
                              {NOF_TASK_PARAMETER: nof_tasks_to_complete,
                               LIST_PARAMETER: list_best_match.name})

        if not self.get_timeline():
            return

        c = {
            "dialog": ("CompleteListOneTaskUndo" if nof_tasks_to_complete == 1
                       else "CompleteListUndo"),
            "dialogParam": {NOF_TASK_PARAMETER: nof_tasks_to_complete,
                            LIST_PARAMETER: list_best_match.name},
            'transaction_id': []}

        i = nof_tasks_to_complete
        for t in flat_task_list:
            transaction_id, error_text, error_code = cow_rest.complete_task(
                t['task_id'],
                t['taskseries_id'],
                list_best_match.id)
            if error_text:
                self.speak_dialog('RestResponseError',
                                  {ERROR_TEXT_PARAMETER: error_text,
                                   ERROR_CODE_PARAMETER: error_code})
                # RECOVER
                return

            c['transaction_id'].append(transaction_id)

            i = i - 1
            if i < 1:
                break

        self.speak_dialog(
            ("CompleteListOneTask" if nof_tasks_to_complete == 1
             else "CompleteList"),
            {LIST_PARAMETER: list_best_match.name,
             NOF_TASK_PARAMETER: nof_tasks_to_complete})

        self.set_context(UNDO_CONTEXT, json.dumps(c))
예제 #3
0
    def test_add_remove_item_to_list(self):
        task_name = "Cows Lists test item: " + str(uuid.uuid1())
        print "Working on item:" + task_name

        cow_rest.get_token(cow_rest)
        self.assertNotEqual(cow_rest.auth_token, None)

        error_text, error_code = cow_rest.verify_token_validity()
        self.assertEqual(error_text, None)

        error_text, error_code = cow_rest.get_timeline(cow_rest)
        self.assertEqual(error_text, None)
        self.assertNotEqual(cow_rest.timeline, None)

        # Get all lists
        list_result, error_text, error_code = cow_rest.get_list()
        self.assertEqual(error_text, None)

        list_id = filter(lambda x: str(x['name']).lower() == "inbox",
                         list_result)[0]['id']

        # add an item
        taskseries_id, task_id, error_text, error_code = cow_rest.add_task(
            task_name, list_id)
        self.assertEqual(error_text, None)
        self.assertNotEqual(task_id, None)

        # check item was added
        task_list, error_code, error_text = cow_rest.list_task(
            "status:incomplete", list_id)
        self.assertEqual(error_text, None)

        task_match = cow_rest.find_task_id(task_list, taskseries_id, task_id)

        self.assertNotEqual(task_match, None)  # assuming RTM make unique tasks

        # check flat list
        flat_task_list = cow_rest.flat_task_list(task_list)
        self.assertTrue(
            len(
                filter(
                    lambda x: x['task_name'] == task_name and x[
                        'taskseries_id'] == taskseries_id and x['task_id'] ==
                    task_id, flat_task_list)) > 0)

        # mark task as complete
        transaction_id, error_text, error_code = cow_rest.complete_task(
            task_id, taskseries_id, list_id)
        self.assertEqual(error_text, None)
        self.assertNotEqual(transaction_id, None)

        # check item is completed
        task_list, error_code, error_text = cow_rest.list_task(
            "status:completed", list_id)
        self.assertEqual(error_text, None)

        task_match = cow_rest.find_task_id(task_list, taskseries_id, task_id)
        self.assertNotEqual(task_match, None)  # assuming RTM make unique tasks

        # roll back
        error_text, error_code = cow_rest.roll_back(str(transaction_id))
        self.assertEqual(error_text, None)

        # check item was set back to incomplete
        task_list, error_code, error_text = cow_rest.list_task(
            "status:incomplete", list_id)
        self.assertEqual(error_text, None)

        task_match = cow_rest.find_task_id(task_list, taskseries_id, task_id)
        self.assertNotEqual(task_match, None)  # assuming RTM make unique tasks

        # delete the item
        transaction_id, error_text, error_code = cow_rest.delete_task(
            task_id, taskseries_id, list_id)
        self.assertEqual(error_text, None)
        self.assertNotEqual(transaction_id, None)

        # check item was deleted
        task_list, error_code, error_text = cow_rest.list_task(
            "status:incomplete", list_id)
        self.assertEqual(error_text, None)

        task_match = cow_rest.find_task_id(task_list, taskseries_id, task_id)
        self.assertEqual(task_match, None)  # assuming RTM make unique tasks