def test_close(self):
     # CLOSING CONVERSATIONS
     conversation = Conversation.find(id=self.admin_conv.id)
     self.assertTrue(conversation.open)
     conversation.close_conversation(admin_id=self.admin.id, body='Closing message')
     conversation = Conversation.find(id=self.admin_conv.id)
     self.assertFalse(conversation.open)
 def test_assignment(self):
     # ASSIGNING CONVERSATIONS
     conversation = Conversation.find(id=self.admin_conv.id)
     num_parts = len(conversation.conversation_parts)
     conversation.assign(assignee_id=self.admin.id, admin_id=self.admin.id)
     conversation = Conversation.find(id=self.admin_conv.id)
     self.assertEqual(num_parts + 1, len(conversation.conversation_parts))
     self.assertEqual("assignment", conversation.conversation_parts[-1].part_type)
Exemple #3
0
 def test_close(self):
     # CLOSING CONVERSATIONS
     conversation = Conversation.find(id=self.admin_conv.id)
     self.assertTrue(conversation.open)
     conversation.close_conversation(admin_id=self.admin.id,
                                     body='Closing message')
     conversation = Conversation.find(id=self.admin_conv.id)
     self.assertFalse(conversation.open)
Exemple #4
0
 def test_assignment(self):
     # ASSIGNING CONVERSATIONS
     conversation = Conversation.find(id=self.admin_conv.id)
     num_parts = len(conversation.conversation_parts)
     conversation.assign(assignee_id=self.admin.id, admin_id=self.admin.id)
     conversation = Conversation.find(id=self.admin_conv.id)
     self.assertEqual(num_parts + 1, len(conversation.conversation_parts))
     self.assertEqual("assignment",
                      conversation.conversation_parts[-1].part_type)
 def test_mark_read(self):
     # MARKING A CONVERSATION AS READ
     conversation = Conversation.find(id=self.admin_conv.id)
     conversation.read = False
     conversation.save()
     conversation = Conversation.find(id=self.admin_conv.id)
     self.assertFalse(conversation.read)
     conversation.read = True
     conversation.save()
     conversation = Conversation.find(id=self.admin_conv.id)
     self.assertTrue(conversation.read)
 def test_mark_read(self):
     # MARKING A CONVERSATION AS READ
     conversation = Conversation.find(id=self.admin_conv.id)
     conversation.read = False
     conversation.save()
     conversation = Conversation.find(id=self.admin_conv.id)
     self.assertFalse(conversation.read)
     conversation.read = True
     conversation.save()
     conversation = Conversation.find(id=self.admin_conv.id)
     self.assertTrue(conversation.read)
 def test_reply(self):
     # REPLYING TO CONVERSATIONS
     conversation = Conversation.find(id=self.admin_conv.id)
     num_parts = len(conversation.conversation_parts)
     # User (identified by email) replies with a comment
     conversation.reply(
         type='user', email=self.email,
         message_type='comment', body='foo')
     # Admin (identified by admin_id) replies with a comment
     conversation.reply(
         type='admin', admin_id=self.admin.id,
         message_type='comment', body='bar')
     conversation = Conversation.find(id=self.admin_conv.id)
     self.assertEqual(num_parts + 2, len(conversation.conversation_parts))
 def test_reply(self):
     # REPLYING TO CONVERSATIONS
     conversation = Conversation.find(id=self.admin_conv.id)
     num_parts = len(conversation.conversation_parts)
     # User (identified by email) replies with a comment
     conversation.reply(type='user',
                        email=self.email,
                        message_type='comment',
                        body='foo')
     # Admin (identified by admin_id) replies with a comment
     conversation.reply(type='admin',
                        admin_id=self.admin.id,
                        message_type='comment',
                        body='bar')
     conversation = Conversation.find(id=self.admin_conv.id)
     self.assertEqual(num_parts + 2, len(conversation.conversation_parts))
Exemple #9
0
    def _predict(self, conversation_id, assignee_id=None):
        """
        Predict the assignee
        """
        conversation = Conversation.find(id=conversation_id)
        messages = [conversation.conversation_message
                    ] + conversation.conversation_parts

        for message in messages:
            if SECRET_MENTION_ID in (message.body or ""):
                # we've already suggested an Admin, don't suggest again
                return

        collection = Collection(COLLECTION_NAME, domain='topics')
        text = extract_messages_text(messages)
        results = collection.predict(text)

        best_prediction = sorted(results.items(), key=itemgetter(1))[-1]
        if best_prediction[1] > ASSIGNMENT_THRESHOLD:
            if assignee_id is not None:
                self._suggest_assignee(conversation, best_prediction[0])
            else:
                self._assign_assignee(conversation, best_prediction[0])

        elif best_prediction[1] > SUGGESTION_THRESHOLD:
            self._suggest_assignee(conversation, best_prediction[0])
        else:
            LOGGER.debug(
                "Prediction did not produce high enough results for conversation {id} with {results}"
                .format(id=conversation_id, results=results))
Exemple #10
0
    def _add_data_to_collection(self, conversation_id, assignee_id):
        """
        Add data to the collection when a conversation gets assigned
        """

        conversation = Conversation.find(id=conversation_id)
        messages = [conversation.conversation_message
                    ] + conversation.conversation_parts

        for message in messages:
            if SECRET_MENTION_ID in (message.body or ""):
                # we've already suggested an Admin, don't suggest again
                return

        LOGGER.info("Adding data to collections for assignee {id}".format(
            id=assignee_id))

        messages = filter(lambda msg: not isinstance(msg.author, Admin),
                          messages)

        message_text = extract_messages_text(messages)

        collection = Collection(COLLECTION_NAME, domain='topics')
        collection.add_data([message_text, assignee_id])

        try:
            collection.train()
        except IndicoError as e:
            pass
    def test_conversation_parts(self):
        # INTERACTING WITH THE PARTS OF A CONVERSATION
        convo_id = Conversation.find_all(type='admin', id=self.admin.id)[0].id
        conversation = Conversation.find(id=convo_id)

        # Getting the subject of a part (only applies to email-based
        # conversations)
        self.assertEqual(conversation.conversation_message.subject, "")
        for part in conversation.conversation_parts:
            # There is a part_type
            self.assertIsNotNone(part.part_type)
            # There is a body
            self.assertIsNotNone(part.body)
    def test_conversation_parts(self):
        # INTERACTING WITH THE PARTS OF A CONVERSATION
        convo_id = Conversation.find_all(type='admin', id=self.admin.id)[0].id
        conversation = Conversation.find(id=convo_id)

        # Getting the subject of a part (only applies to email-based
        # conversations)
        self.assertEqual(conversation.conversation_message.subject, "")
        for part in conversation.conversation_parts:
            # There is a part_type
            self.assertIsNotNone(part.part_type)
            # There is a body
            self.assertIsNotNone(part.body)
 def test_find_single_conversation(self):
     # FINDING A SINGLE CONVERSATION
     convo_id = Conversation.find_all(type='admin', id=self.admin.id)[0].id
     conversation = Conversation.find(id=convo_id)
     self.assertEqual(conversation.id, convo_id)
 def test_find_single_conversation(self):
     # FINDING A SINGLE CONVERSATION
     convo_id = Conversation.find_all(type='admin', id=self.admin.id)[0].id
     conversation = Conversation.find(id=convo_id)
     self.assertEqual(conversation.id, convo_id)
Exemple #15
0
def reply_to_user(conversation_id, reply_msg):
    conversation = Conversation.find(id=conversation_id)
    conversation.reply(
        type='admin', id=str(ADMIN_BOT_ID),
        message_type='comment', body=reply_msg)
Exemple #16
0
def tokenize_conversation_body(cid):
    conversation = Conversation.find(id=cid)
    conversation_body = strip_tags(conversation.conversation_message.body)
    print conversation_body
    words = word_tokenize(conversation_body)
    return words