def insert_passage(self, passage, index): """Inserts the given passage into the list of passages. index: The index to insert the passage before. If this is None, then the passage will be appended to the list. """ # XXX: This is needed to undo copy and paste. #assert (index is None or self._order_passages_by == "NATURAL_ORDER") if index is None: index = len(self._natural_order_passages) if self._natural_order_passages: if index < len(self._natural_order_passages): passage.order_number = self._natural_order_passages[ index].order_number for later_passage in self._natural_order_passages[index:]: later_passage.order_number += 1 sqlite.connection.execute( "UPDATE passage SET order_number = order_number + 1 WHERE parent = ? AND order_number >= ?", (self.id, passage.order_number)) else: passage.order_number = self._natural_order_passages[ -1].order_number + 1 self._natural_order_passages.insert(index, passage) if self._order_passages_by == "PASSAGE_ORDER": index = bisect.bisect(self._passage_order_passages, passage) self._passage_order_passages.insert(index, passage) passage.parent = self sqlite.save_or_update_item(passage) singleton_verse_to_passage_entry_map.add_passage_entry(passage) self.add_passage_observers(passage)
def insert_passage(self, passage, index): """Inserts the given passage into the list of passages. index: The index to insert the passage before. If this is None, then the passage will be appended to the list. """ # XXX: This is needed to undo copy and paste. #assert (index is None or self._order_passages_by == "NATURAL_ORDER") if index is None: index = len(self._natural_order_passages) if self._natural_order_passages: if index < len(self._natural_order_passages): passage.order_number = self._natural_order_passages[index].order_number for later_passage in self._natural_order_passages[index:]: later_passage.order_number += 1 sqlite.connection.execute("UPDATE passage SET order_number = order_number + 1 WHERE parent = ? AND order_number >= ?", (self.id, passage.order_number)) else: passage.order_number = self._natural_order_passages[-1].order_number + 1 self._natural_order_passages.insert(index, passage) if self._order_passages_by == "PASSAGE_ORDER": index = bisect.bisect(self._passage_order_passages, passage) self._passage_order_passages.insert(index, passage) passage.parent = self sqlite.save_or_update_item(passage) singleton_verse_to_passage_entry_map.add_passage_entry(passage) self.add_passage_observers(passage)
def clone(self): """Makes a clean copy of this passage list (including its passages and subtopics) and returns it. """ new_topic = PassageList(name=self.name, description=self.description) sqlite.save_or_update_item(new_topic) for topic in self.subtopics: new_topic.add_subtopic(topic.clone()) for passage in self._natural_order_passages: new_topic.add_passage(passage.clone()) new_topic.order_passages_by = self.order_passages_by return new_topic
def save_item(self, item): """Saves changes to the given item.""" if isinstance(item, BasePassageList): sqlite.store_topic(item) else: sqlite.save_or_update_item(item)