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()
def create_rule(self, **kwargs): """ Creates a new statement matching the keyword arguments specified. Returns the created statement. """ Statement = self.get_model('statementrules') session = self.Session() if 'search_text' not in kwargs: kwargs['search_text'] = self.tagger.get_text_index_string( kwargs['text']) if 'search_in_response_to' not in kwargs: kwargs['search_in_response_to'] = self.tagger.get_text_index_string( kwargs['in_response_to']) statement = Statement(**kwargs) session.add(statement) session.flush() session.refresh(statement) statement_object = self.statementrules_model_to_object(statement) self._session_finish(session) return statement_object
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)
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)
def create(self, **kwargs): """ Creates a new statement matching the keyword arguments specified. Returns the created statement. """ Statement = self.get_model('statement') Tag = self.get_model('tag') session = self.Session() tags = set(kwargs.pop('tags', [])) if 'search_text' not in kwargs: kwargs['search_text'] = self.tagger.get_text_index_string( kwargs['text']) if 'search_in_response_to' not in kwargs: in_response_to = kwargs.get('in_response_to') if in_response_to: kwargs[ 'search_in_response_to'] = self.tagger.get_text_index_string( in_response_to) statement = Statement(**kwargs) for tag_name in tags: tag = session.query(Tag).filter_by(name=tag_name).first() if not tag: # Create the tag tag = Tag(name=tag_name) statement.tags.append(tag) session.add(statement) session.flush() session.refresh(statement) statement_object = self.model_to_object(statement) self._session_finish(session) return statement_object
def create_many_rules(self, statements): """ Creates multiple statement entries. """ Statement = self.get_model('statementrules') session = self.Session() create_statements = [] for statement in statements: statement_data = statement.serialize() statement_model_object = Statement(**statement_data) create_statements.append(statement_model_object) session.add_all(create_statements) session.commit()