示例#1
0
文件: models.py 项目: noio/Cardbox
    def save(self):
        """ Modifies the content of page, creates rev if necessary. 
        """

        def txn(factsheet, new_content, patch):
            r = Revision(parent=factsheet, editor=factsheet.editor, content=patch, number=factsheet.revision_number)
            factsheet.content = new_content
            factsheet.revision_number += 1
            r.put()
            factsheet.put()

        if self._is_revision:
            raise Exception("Cannot save revision.")
        if self.content != "" and self.content != self.new_content:
            differ = dmp.diff_match_patch()
            patch = differ.patch_toText(differ.patch_make(self.new_content, self.content))
            db.run_in_transaction(txn, self, self.new_content, patch)
            logging.info("Created new revision (%d) for factsheet %s" % (self.revision_number, self.name))
        else:
            self.content = self.new_content
            self.put()
示例#2
0
文件: models.py 项目: noio/Cardbox
 def revision(self, number):
     """ Returns a given revision
     """
     if self._is_revision:
         raise Exception("Cannot get revision of revision.")
     differ = dmp.diff_match_patch()
     history = Revision.all().ancestor(self)
     history.filter("number >=", number).order("-number")
     revised_content = self.content
     for r in history:
         patch = differ.patch_fromText(unicode(r.content))
         revised_content = differ.patch_apply(patch, revised_content)[0]
         earliest = r
     revised_page = self.__class__(
         key_name=self.key().name(),
         content=revised_content,
         editor=earliest.editor,
         modified=earliest.created,
         number=earliest.number,
         is_revision=True,
     )
     return revised_page