diff --git a/confluence.py b/confluence.py index 9825e16..934f874 100755 --- a/confluence.py +++ b/confluence.py @@ -28,6 +28,7 @@ console_handler.setFormatter(formatter) logger.addHandler(console_handler) + class ConfluenceSpace(object): def __init__(self, token, server): self.server = server @@ -72,6 +73,7 @@ def add(self): def remove(self): self.server.confluence2.removeGroup(self.token,self.groupname,"confluence-users") + class ConfluenceUser(object): def __init__(self,token,server,username): self.server = server @@ -106,15 +108,17 @@ def add_to_group(self,group): def remove_from_group(self,group): self.group = group - self.server.confluence2.removeUserFromGroup(self.token,self.username,self.group) + self.server.confluence2.removeUserFromGroup(self.token,self.username,self.group) def change_password(self,password): self.password = password - self.server.confluence2.changeUserPassword(self.token,self.username,self.password) + self.server.confluence2.changeUserPassword(self.token,self.username,self.password) def get_all(self): return self.server.confluence2.getActiveUsers(self.token, True) + + class ConfluencePage(object): def __init__(self,token,server,name,spaceKey,content,page_id="",label=""): self.server = server @@ -131,7 +135,7 @@ def __init__(self,token,server,name,spaceKey,content,page_id="",label=""): def add(self,parent_id=0,content=""): self.logger.debug("Add page '{}'; label = [{}]".format(self.name, self.label)) if content: - self.content = content + self.content = content self.parent_id = parent_id self.newPost = {"title":self.name,"content":self.content,"space":self.spaceKey,"parentId":str(self.parent_id)} self.post_to_wiki = self.server.confluence2.storePage(self.token,self.newPost) @@ -143,9 +147,17 @@ def add(self,parent_id=0,content=""): return {"url": self.page_url, "id": self.page_id} def update(self,content,parent_id=0): - self.remove() + if content: + self.content = content self.parent_id = parent_id - self.add(str(parent_id),content) + self.created_page = self.server.confluence2.getPage(self.token, self.spaceKey, self.name) + self.created_page["content"] = self.content + self.post_to_wiki = self.server.confluence2.storePage(self.token,self.created_page) + 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) @@ -197,6 +209,7 @@ def error_out(error_message): print(error_message) exit() + def Parser(): parser = argparse.ArgumentParser(description="Confluence wiki API") parser.add_argument("-w", "--wikiurl", help="Wiki URL (only FQDN, no / and such)", required=True) @@ -204,7 +217,7 @@ def Parser(): parser.add_argument("-p", "--password", help="Login Password", required=True) parser.add_argument("-v", "--verbose", help="Enable debug logging", action="store_true") subparsers = parser.add_subparsers(dest="action") - + parser_addpage = subparsers.add_parser('addpage', help='Add a page') parser_addpage.add_argument("-n", "--name", help="(New) page name", required=True) parser_addpage.add_argument("-P", "--parentpage", help="Parent page ID", default="0") @@ -290,7 +303,7 @@ def Parser(): parser_listusergroups = subparsers.add_parser('listusergroups', help='List groups user is in') parser_listusergroups.add_argument("-U", "--newusername", help="Username to perform action on.", required=True) - + args = parser.parse_args() return args @@ -318,7 +331,9 @@ def Connect(args): error_out("%d: %s" % ( err.faultCode, err.faultString)) return {"token":token,"xml_server":xml_server} + def Actions(token,xml_server,args,content): + try: if args.action == "addpage": logger.debug('Command: "addpage", args.name = "{}", args.label = "{}"'.format( @@ -327,13 +342,13 @@ def Actions(token,xml_server,args,content): token,xml_server,args.name,args.spacekey,content,label=args.label) new_page.add(args.parentpage) print(new_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.set_label() print(update_page.get()['url']) - + elif args.action == "getpagecontent": get_page = ConfluencePage(token,xml_server,args.name,args.spacekey,content).get_content() print(get_page) @@ -353,22 +368,22 @@ def Actions(token,xml_server,args,content): for page in all_pages: print args.delimiter.join(( page['id'], page['space'], page['parentId'], page['title'], page['url'])) - + elif args.action == "removepage": removed_page = ConfluencePage(token,xml_server,args.name,args.spacekey,"").remove() - + elif args.action == "addspace": add_space = ConfluenceSpace(token,xml_server).create(args.spacekey,args.name) - + elif args.action == "removespace": remove_space = ConfluenceSpace(token,xml_server).remove(args.spacekey) - + elif args.action == "listspaces": all_spaces = ConfluenceSpace(token,xml_server).get_all() for space in all_spaces: print(("%s, %s, %s") % ( space['key'], space['name'], space['url'])) - + elif args.action == "getallpages": all_spaces = ConfluenceSpace(token,xml_server).get_all() for space in all_spaces: @@ -390,19 +405,19 @@ def Actions(token,xml_server,args,content): elif args.action == "adduser": add_user = ConfluenceUser(token,xml_server,args.newusername).create(args.fullname,args.email,args.userpassword) - + elif args.action == "removeuser": remove_user = ConfluenceUser(token,xml_server,args.newusername).remove() - + elif args.action == "deactivateuser": deactivate_user = ConfluenceUser(token,xml_server,args.newusername).deactivate() - + elif args.action == "reactivateuser": reactivate_user = ConfluenceUser(token,xml_server,args.newusername).reactivate() - + elif args.action == "changeuserpassword": change_pass = ConfluenceUser(token,xml_server,args.newusername).change_password(args.userpassword) - + elif args.action == "listuserinfo": user_info = ConfluenceUser(token,xml_server,args.newusername).get_info() for key,value in user_info.items(): @@ -438,6 +453,7 @@ def Actions(token,xml_server,args,content): except xmlrpclib.Fault as err: print(("Error: %d: %s") % (err.faultCode, err.faultString)) + def main(): args = Parser() @@ -448,5 +464,4 @@ def main(): server = Connect(args) Actions(server["token"],server["xml_server"],args,content) -if __name__ == '__main__': - main() +main()