From cf64258fe81e54c5d452c2e6fac2eba98380ae47 Mon Sep 17 00:00:00 2001 From: Eric Warnke Date: Tue, 24 May 2016 15:36:28 -0400 Subject: [PATCH] The following changes properly implement page updates so that revision history is preserved. Parent ID is automatically grabbed from the page so it is no longer required and an optional comment can be added to the update. The code has support for marking it a major update but I have not enabled a way to pass it through from the command line. --- confluence.py | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/confluence.py b/confluence.py index e6d4f95..ed2d0a3 100755 --- a/confluence.py +++ b/confluence.py @@ -142,10 +142,29 @@ def add(self,parent_id=0,content=""): self.set_label() return {"url": self.page_url, "id": self.page_id} - def update(self,content,parent_id=0): - self.remove() - self.parent_id = parent_id - self.add(str(parent_id),content) + def update(self,content,parent_id=None, comment = None, minor = True): + self.logger.debug("Update page '{}'; label = [{}]".format(self.name, self.label)) + page_update = self.get() + for key in page_update.keys(): + if key not in ['title', 'id', 'version', 'space', 'parentId']: + del(page_update[key]) + + page_update['content'] = content + if parent_id is not None: + page_update['parentId'] = str(parent_id) + + page_update_options = {'versionComment' : 'api', 'minorEdit': minor} + if comment is not None: + page_update_options['versionComment'] = comment + + + self.post_to_wiki = self.server.confluence2.updatePage(self.token, page_update, page_update_options) + self.created_page = self.server.confluence2.getPage(self.token, self.spaceKey, self.name) + self.page_url = self.created_page["url"] + self.page_id = self.created_page["id"] + if self.label: + self.set_label() + return {"url": self.page_url, "id": self.page_id} def get(self): self.wanted_page = self.server.confluence2.getPage(self.token, self.spaceKey, self.name) @@ -224,8 +243,10 @@ def Parser(): parser_updatepage = subparsers.add_parser('updatepage', help='Update a page') parser_updatepage.add_argument("-n", "--name", help="Page name", required=True) parser_updatepage.add_argument("-s", "--spacekey", help="Space Key", required=True) - parser_updatepage.add_argument("-P", "--parentpage", help="Parent page ID", default="0") + parser_updatepage.add_argument("-P", "--parentpage", help="Parent page ID") parser_updatepage.add_argument("-l", "--label", help="Page label", default="created_via_api") + parser_updatepage.add_argument("-c", "--comment", help="Update comment", default="update_via_api") + files_updatepage = parser_updatepage.add_mutually_exclusive_group() files_updatepage.add_argument("-f", "--file", help="Read content from this file") files_updatepage.add_argument("-S", "--stdin", help="Read content from STDIN", action="store_true") @@ -342,7 +363,7 @@ def Actions(token,xml_server,args,content): print(copy_page.get()["url"]) elif args.action == "updatepage": update_page = ConfluencePage(token,xml_server,args.name,args.spacekey,content,args.parentpage,label=args.label) - update_page.update(content,args.parentpage) + update_page.update(content,parent_id=args.parentpage,comment=args.comment) update_page.set_label() print(update_page.get()['url'])