Example #1
0
    def update_rule(self, statement):
        """
        Modifies an entry in the database.
        Creates an entry if one does not exist.
        """
        Statement = self.get_model('statementrules')

        if statement is not None:
            session = self.Session()
            record = None
            if hasattr(statement, 'id') and statement.id is not None:
                record = session.query(Statement).get(statement.id)
                if statement.text is not None:
                    record.text = statement.text
                if statement.in_response_to is not None:
                    record.in_response_to = statement.in_response_to
                if statement.search_text is not None:
                    record.search_text = statement.search_text
                else:
                    record.search_text = self.tagger.get_text_index_string(
                        statement.text)
                if statement.search_in_response_to is not None:
                    record.search_in_response_to = statement.search_in_response_to
                elif statement.in_response_to is not None:
                    record.search_in_response_to = self.tagger.get_text_index_string(
                        statement.in_response_to)
            else:
                if statement.text is not None:
                    record = session.query(Statement).filter(
                        Statement.text == statement.text,
                    ).first()
            # if statement.search_in_response_to is not None:
            #    record.search_in_response_to=statement.search_in_response_to
            if not record:
                record = Statement(
                    text=statement.text,
                )
            if statement.in_response_to is not None:
                record.in_response_to = statement.in_response_to
            if statement.search_text is not None:
                record.search_text = statement.search_text
            else:
                record.search_text = self.tagger.get_text_index_string(
                    statement.text)
            if statement.search_in_response_to is not None:
                record.search_in_response_to = statement.search_in_response_to
            elif statement.in_response_to is not None:
                record.search_in_response_to = self.tagger.get_text_index_string(
                    statement.in_response_to)

            session.add(record)

            self._session_finish(session)
Example #2
0
    def update_text(self, statement):
        """
        Modifies an entry in the database.
        Creates an entry if one does not exist.
        """
        Statement = self.get_model('statement')
        Tag = self.get_model('tag')

        if statement is not None:
            session = self.Session()
            record = None

            if hasattr(statement, 'id') and statement.id is not None:
                record = session.query(Statement).get(statement.id)
            else:
                record = session.query(Statement).filter(
                    Statement.text == statement.text,
                    Statement.conversation == statement.conversation,
                ).first()

                # Create a new statement entry if one does not already exist
                if not record:
                    record = Statement(
                        text=statement.text,
                        conversation=statement.conversation,
                        persona=statement.persona
                    )

            # Update the response value
            record.text = statement.text
            record.in_response_to = statement.in_response_to

            record.created_at = statement.created_at

            record.search_text = self.tagger.get_text_index_string(
                statement.text)

            if statement.in_response_to:
                record.search_in_response_to = self.tagger.get_text_index_string(
                    statement.in_response_to)

            for tag_name in statement.get_tags():
                tag = session.query(Tag).filter_by(name=tag_name).first()

                if not tag:
                    # Create the record
                    tag = Tag(name=tag_name)

                record.tags.append(tag)

            session.add(record)

            self._session_finish(session)
Example #3
0
    def create_many_texts(self, statements):
        """
        Creates multiple statement entries.
        """
        Statement = self.get_model('statement')
        Tag = self.get_model('tag')

        session = self.Session()

        create_statements = []
        create_tags = {}

        for statement in statements:

            statement_data = statement.serialize()
            tag_data = statement_data.pop('tags', [])

            statement_model_object = Statement(**statement_data)

            if not statement.search_text:
                statement_model_object.search_text = self.tagger.get_text_index_string(
                    statement.text)

            if not statement.search_in_response_to and statement.in_response_to:
                statement_model_object.search_in_response_to = self.tagger.get_text_index_string(
                    statement.in_response_to)

            new_tags = set(tag_data) - set(create_tags.keys())

            if new_tags:
                existing_tags = session.query(Tag).filter(
                    Tag.name.in_(new_tags)
                )

                for existing_tag in existing_tags:
                    create_tags[existing_tag.name] = existing_tag

            for tag_name in tag_data:
                if tag_name in create_tags:
                    tag = create_tags[tag_name]
                else:
                    # Create the tag if it does not exist
                    tag = Tag(name=tag_name)

                    create_tags[tag_name] = tag

                statement_model_object.tags.append(tag)
            create_statements.append(statement_model_object)

        session.add_all(create_statements)
        session.commit()