├── README.md
└── confluence.py
/README.md:
--------------------------------------------------------------------------------
1 | # Confluence.py
2 |
3 | Simple python script to use a Atlassian Confluence Wiki via the CLI.
4 |
5 | ## Usage
6 |
7 | $ python confluence.py --help
8 | usage: confluence.py [-h] -w WIKIURL -u USERNAME -p PASSWORD
9 | {addpage,updatepage,listpages,removepage,getpagecontent,getpagesummary,listspaces,addspace,removespace,adduser,removeuser,deactivateuser,reactivateuser,changeuserpassword,addgroup,removegroup,listgroups,listusers,getallpages,addusertogroup,removeusergromgroup,listusergroups}
10 | ...
11 |
12 | Confluence wiki API
13 |
14 | positional arguments:
15 | {addpage,updatepage,listpages,removepage,getpagecontent,getpagesummary,listspaces,addspace,removespace,adduser,removeuser,deactivateuser,reactivateuser,changeuserpassword,addgroup,removegroup,listgroups,listusers,getallpages,addusertogroup,removeusergromgroup,listusergroups}
16 | addpage Add a page
17 | updatepage Update a page
18 | listpages List pages in one or all spaces
19 | removepage Remove a page
20 | getpagecontent Get page content
21 | getpagesummary Get page summary
22 | listspaces List all spaces
23 | addspace Add a space
24 | removespace Remove a space
25 | adduser Add a user
26 | removeuser Remove a user
27 | deactivateuser Deactivate a user
28 | reactivateuser Reactivate a user
29 | changeuserpassword Change user password
30 | addgroup Add a goup
31 | removegroup Remove a goup
32 | listgroups List all goup
33 | listusers List all users
34 | getallpages Save all pages to local files.
35 | addusertogroup Add user to a group
36 | removeusergromgroup
37 | Remove user from a group
38 | listusergroups List groups user is in
39 |
40 | optional arguments:
41 | -h, --help show this help message and exit
42 | -w WIKIURL, --wikiurl WIKIURL
43 | Wiki URL (only FQDN, no / and such)
44 | -u USERNAME, --username USERNAME
45 | Login Username
46 | -p PASSWORD, --password PASSWORD
47 | Login Password
48 |
49 |
50 |
51 | ## Examples
52 |
53 | Add page:
54 |
55 | $ ./confluence.py --wikiurl="http://wiki.raymii.org" -u "api" -p "" addpage -f ./content.txt -n "CLI New Page" -s "RAY"
56 | http://wiki.raymii.org/display/RAY/CLI+New+Page
57 |
58 |
59 | Remove Page:
60 |
61 | $ ./confluence.py --wikiurl="http://wiki.raymii.org" -u "api" -p "" removepage -n "CLI New Page" -s "RAY"
62 |
63 |
64 | Update Page:
65 |
66 | $ ./confluence.py --wikiurl="http://wiki.raymii.org" -u "api" -p "" updatepage -f ./content.txt -n "CLI New Page" -s "RAY"
67 | http://wiki.raymii.org/display/RAY/CLI+New+Page
68 |
69 | Get page content (HTML):
70 |
71 | $ ./confluence.py --wikiurl="http://wiki.raymii.org" -u "api" -p "" getpagecontent -n "CLI New Page" -s "RAY"
72 |
Table of Contents
73 |
74 | Information
75 |
76 | Add Space:
77 |
78 | ./confluence.py --wikiurl="http://wiki.raymii.org" -u "api" -p "" addspace -n "New Space" -s "NS"
79 |
80 | Remove Space:
81 |
82 | ./confluence.py --wikiurl="http://wiki.raymii.org" -u "api" -p "" removespace -s "NS"
83 |
84 | List all spaces:
85 |
86 | $ ./confluence.py --wikiurl="http://wiki.raymii.org" -u "api" -p "" listspaces
87 | NS, New Space, http://wiki.raymii.org/display/NS
88 | ITS, IT Staff, http://wiki.raymii.org/display/ITS
89 |
90 |
91 | Add user:
92 |
93 | $ ./confluence.py --wikiurl="http://wiki.raymii.org" -u "api" -p "" adduser -U "newuser" -N "New user" -E "newuser@raymii.org" -X "password"
94 |
95 | Remove user:
96 |
97 | $ ./confluence.py --wikiurl="http://wiki.raymii.org" -u "api" -p "" removeuser -U newuser
98 |
99 | Deactivate user:
100 |
101 | $ ./confluence.py --wikiurl="http://wiki.raymii.org" -u "api" -p "" deactivateuser -U newuser
102 |
103 | Reactivate user:
104 |
105 | $ ./confluence.py --wikiurl="http://wiki.raymii.org" -u "api" -p "" reactivateuser -U newuser
106 |
107 |
108 | For more actions, run `./confluence.py -h` or see the usage section above.
109 |
110 | ## More info
111 |
112 | [Raymii.org](https://raymii.org)
113 |
--------------------------------------------------------------------------------
/confluence.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # Copyright (C) 2013 Remy van Elst
3 |
4 | # This program is free software: you can redistribute it and/or modify
5 | # it under the terms of the GNU General Public License as published by
6 | # the Free Software Foundation, either version 3 of the License, or
7 | # (at your option) any later version.
8 |
9 | # This program is distributed in the hope that it will be useful,
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | # GNU General Public License for more details.
13 |
14 | # You should have received a copy of the GNU General Public License
15 | # along with this program. If not, see .
16 |
17 | import sys, xmlrpclib, argparse, string, logging
18 |
19 | #
20 | # Logging
21 | #
22 |
23 | logger = logging.getLogger(__name__.rpartition('.')[0])
24 | logger.setLevel(logging.DEBUG)
25 | console_handler = logging.StreamHandler()
26 | console_handler.setLevel(logging.INFO)
27 | formatter = logging.Formatter('%(levelname)s: [%(name)s] %(message)s')
28 | console_handler.setFormatter(formatter)
29 | logger.addHandler(console_handler)
30 |
31 | class ConfluenceSpace(object):
32 | def __init__(self, token, server):
33 | self.server = server
34 | self.token = token
35 |
36 | def get_all(self):
37 | self.spaces = self.server.confluence2.getSpaces(self.token)
38 | return self.spaces
39 |
40 | def get_by_key(self,space_key):
41 | self.space_key = space_key
42 | self.space = self.server.confluence2.getSpace(self.token,self.space_key)
43 | return self.space
44 |
45 | def create(self,space_key,space_name):
46 | self.space_key = space_key
47 | self.space_name = space_name
48 | self.space_to_create = {"key":self.space_key,"name":self.space_name}
49 | self.server.confluence2.addSpace(self.token,self.space_to_create)
50 | return self.get_by_key(space_key)
51 |
52 | def remove(self,space_key):
53 | self.space_key = space_key
54 | self.server.confluence2.removeSpace(self.token,self.space_key)
55 |
56 | def get_all_pages(self,spaceKey):
57 | self.spacekey = spaceKey
58 | return self.server.confluence2.getPages(self.token, self.spacekey)
59 |
60 | class ConfluenceGroup(object):
61 | def __init__(self,token,server,groupname):
62 | self.server = server
63 | self.token = token
64 | self.groupname = groupname
65 |
66 | def get_all(self):
67 | return self.server.confluence2.getGroups(self.token)
68 |
69 | def add(self):
70 | self.server.confluence2.addGroup(self.token,self.groupname)
71 |
72 | def remove(self):
73 | self.server.confluence2.removeGroup(self.token,self.groupname,"confluence-users")
74 |
75 | class ConfluenceUser(object):
76 | def __init__(self,token,server,username):
77 | self.server = server
78 | self.token = token
79 | self.username = username
80 |
81 | def create(self,full_name,email,password):
82 | self.password = password
83 | self.email = email
84 | self.full_name = full_name
85 | self.user_to_create = {"name":self.username,"fullname":self.full_name,"email":self.email}
86 | self.server.confluence2.addUser(self.token,self.user_to_create,self.password)
87 |
88 | def get_info(self):
89 | return self.server.confluence2.getUser(self.token,self.username)
90 |
91 | def get_groups(self):
92 | return self.server.confluence2.getUserGroups(self.token,self.username)
93 |
94 | def remove(self):
95 | self.server.confluence2.removeUser(self.token,self.username)
96 |
97 | def deactivate(self):
98 | self.server.confluence2.deactivateUser(self.token,self.username)
99 |
100 | def reactivate(self):
101 | self.server.confluence2.reactivateUser(self.token,self.username)
102 |
103 | def add_to_group(self,group):
104 | self.group = group
105 | self.server.confluence2.addUserToGroup(self.token,self.username,self.group)
106 |
107 | def remove_from_group(self,group):
108 | self.group = group
109 | self.server.confluence2.removeUserFromGroup(self.token,self.username,self.group)
110 |
111 | def change_password(self,password):
112 | self.password = password
113 | self.server.confluence2.changeUserPassword(self.token,self.username,self.password)
114 |
115 | def get_all(self):
116 | return self.server.confluence2.getActiveUsers(self.token, True)
117 |
118 | class ConfluencePage(object):
119 | def __init__(self,token,server,name,spaceKey,content,page_id="",label=""):
120 | self.server = server
121 | self.token = token
122 | self.name = name
123 | self.spaceKey = spaceKey
124 | self.content = content
125 | self.label = label
126 | self.logger = logging.getLogger(
127 | __name__ + '.'+ self.__class__.__name__
128 | )
129 | self.logger.debug('Creating a new instance (name="{}", label="{}")'.format(name, label))
130 |
131 | def add(self,parent_id=0,content=""):
132 | self.logger.debug("Add page '{}'; label = [{}]".format(self.name, self.label))
133 | if content:
134 | self.content = content
135 | self.parent_id = parent_id
136 | self.newPost = {"title":self.name,"content":self.content,"space":self.spaceKey,"parentId":str(self.parent_id)}
137 | self.post_to_wiki = self.server.confluence2.storePage(self.token,self.newPost)
138 | self.created_page = self.server.confluence2.getPage(self.token, self.spaceKey, self.name)
139 | self.page_url = self.created_page["url"]
140 | self.page_id = self.created_page["id"]
141 | if self.label:
142 | self.set_label()
143 | return {"url": self.page_url, "id": self.page_id}
144 |
145 | def update(self,content,parent_id=0):
146 | self.remove()
147 | self.parent_id = parent_id
148 | self.add(str(parent_id),content)
149 |
150 | def get(self):
151 | self.wanted_page = self.server.confluence2.getPage(self.token, self.spaceKey, self.name)
152 | return self.wanted_page
153 |
154 | def get_content(self):
155 | self.wanted_page_id = self.get_page_id
156 | self.content_values = {"style": "clean"}
157 | self.page_content = self.wanted_page = self.server.confluence2.renderContet(self.token, self.wanted_page_id,self.content_values)
158 | return self.page_content
159 |
160 |
161 | def get_id(self):
162 | return self.get()['id']
163 |
164 | def get_content(self):
165 | return self.get()['content']
166 |
167 | def remove(self):
168 | self.page = self.server.confluence2.getPage(self.token, self.spaceKey, self.name)
169 | self.server.confluence2.removePage(self.token, self.page["id"])
170 |
171 | def set_label(self):
172 | self.page_id = self.get_id()
173 | self.logger.debug("Set label '{}' on page {}".format(
174 | self.label, self.page_id))
175 | if not self.server.confluence2.addLabelByName(self.token, self.label, self.page_id):
176 | self.logger.debug("Unable to set label '{}' on page ID {}".format(
177 | self.label, self.page_id))
178 |
179 | def get_content(self):
180 | return self.get()['content']
181 |
182 | def get_version(self):
183 | return self.get()['version']
184 |
185 | class ConfluenceAuth(object):
186 | def __init__(self,server,username,password):
187 | self.server = server
188 | self.username = username
189 | self.password = password
190 |
191 | def login(self):
192 | self.token = self.server.confluence2.login(self.username, self.password)
193 | return self.token
194 |
195 | def error_out(error_message):
196 | print("Error: ")
197 | print(error_message)
198 | exit()
199 |
200 | def Parser():
201 | parser = argparse.ArgumentParser(description="Confluence wiki API")
202 | parser.add_argument("-w", "--wikiurl", help="Wiki URL (only FQDN, no / and such)", required=True)
203 | parser.add_argument("-u", "--username", help="Login Username", required=True)
204 | parser.add_argument("-p", "--password", help="Login Password", required=True)
205 | parser.add_argument("-v", "--verbose", help="Enable debug logging", action="store_true")
206 | subparsers = parser.add_subparsers(dest="action")
207 |
208 | parser_addpage = subparsers.add_parser('addpage', help='Add a page')
209 | parser_addpage.add_argument("-n", "--name", help="(New) page name", required=True)
210 | parser_addpage.add_argument("-P", "--parentpage", help="Parent page ID", default="0")
211 | parser_addpage.add_argument("-l", "--label", help="Page label", default="created_via_api")
212 | parser_addpage.add_argument("-s", "--spacekey", help="Space Key", required=True)
213 | files_addpage = parser_addpage.add_mutually_exclusive_group()
214 | files_addpage.add_argument("-f", "--file", help="Read content from this file")
215 | files_addpage.add_argument("-S", "--stdin", help="Read content from STDIN", action="store_true")
216 |
217 | parser_addpage = subparsers.add_parser('copypage', help='Copy a page')
218 | parser_addpage.add_argument("-n", "--name", help="(New) page name", required=True)
219 | parser_addpage.add_argument("-P", "--parentpage", help="Parent page ID", default="0")
220 | parser_addpage.add_argument("-l", "--label", help="Page label", default="created_via_api")
221 | parser_addpage.add_argument("-s", "--spacekey", help="Space Key", required=True)
222 | parser_addpage.add_argument("-o", "--origin", help="Origin page name", required=True)
223 |
224 | parser_updatepage = subparsers.add_parser('updatepage', help='Update a page')
225 | parser_updatepage.add_argument("-n", "--name", help="Page name", required=True)
226 | parser_updatepage.add_argument("-s", "--spacekey", help="Space Key", required=True)
227 | parser_updatepage.add_argument("-P", "--parentpage", help="Parent page ID", default="0")
228 | parser_updatepage.add_argument("-l", "--label", help="Page label", default="created_via_api")
229 | files_updatepage = parser_updatepage.add_mutually_exclusive_group()
230 | files_updatepage.add_argument("-f", "--file", help="Read content from this file")
231 | files_updatepage.add_argument("-S", "--stdin", help="Read content from STDIN", action="store_true")
232 |
233 | parser_listpages = subparsers.add_parser('listpages', help='List pages in one or all spaces')
234 | parser_listpages.add_argument("-s", "--spacekey", help="Space Key", default="")
235 | parser_listpages.add_argument("-d", "--delimiter", help="Field delimiter", default=", ")
236 |
237 | parser_removepage = subparsers.add_parser('removepage', help='Remove a page')
238 | parser_removepage.add_argument("-n", "--name", help="Page name", required=True)
239 | parser_removepage.add_argument("-s", "--spacekey", help="Space Key", required=True)
240 |
241 | parser_getpage = subparsers.add_parser('getpagecontent', help='Get page content')
242 | parser_getpage.add_argument("-n", "--name", help="Page name", required=True)
243 | parser_getpage.add_argument("-s", "--spacekey", help="Space Key", required=True)
244 |
245 | parser_getpagesummary = subparsers.add_parser('getpagesummary', help='Get page summary')
246 | parser_getpagesummary.add_argument("-s", "--spacekey", help="Space Key", required=True)
247 | parser_getpagesummary.add_argument("-n", "--name", help="Page name", required=True)
248 | parser_getpagesummary.add_argument("-d", "--delimiter", help="Field delimiter", default=", ")
249 |
250 | parser_listspaces = subparsers.add_parser('listspaces', help='List all spaces')
251 |
252 | parser_addspace = subparsers.add_parser('addspace', help='Add a space')
253 | parser_addspace.add_argument("-s", "--spacekey", help="Space Key", required=True)
254 | parser_addspace.add_argument("-D", "--description", help="Space description", required=True)
255 |
256 | parser_removespace = subparsers.add_parser('removespace', help='Remove a space')
257 | parser_removespace.add_argument("-s", "--spacekey", help="Space Key", required=True)
258 |
259 | parser_adduser = subparsers.add_parser('adduser', help='Add a user')
260 | parser_adduser.add_argument("-U", "--newusername", help="Username to perform action on.", required=True)
261 | parser_adduser.add_argument("-N", "--fullname", help="Full name for new user", required=True)
262 | parser_adduser.add_argument("-E", "--email", help="Email address for new user", required=True)
263 | parser_adduser.add_argument("-X", "--userpassword", help="Password for new user", required=True)
264 |
265 | parser_removeuser = subparsers.add_parser('removeuser', help='Remove a user')
266 | parser_removeuser.add_argument("-U", "--newusername", help="Username to perform action on.", required=True)
267 |
268 | parser_deactuser = subparsers.add_parser('deactivateuser', help='Deactivate a user')
269 | parser_deactuser.add_argument("-U", "--newusername", help="Username to perform action on.", required=True)
270 |
271 | parser_reactuser = subparsers.add_parser('reactivateuser', help='Reactivate a user')
272 | parser_reactuser.add_argument("-U", "--newusername", help="Username to perform action on.", required=True)
273 |
274 | parser_changepass = subparsers.add_parser('changeuserpassword', help='Change user password')
275 | parser_changepass.add_argument("-U", "--newusername", help="Username to perform action on.", required=True)
276 | parser_changepass.add_argument("-X", "--userpassword", help="Password for user", required=True)
277 |
278 | parser_addgroup = subparsers.add_parser('addgroup', help='Add a goup')
279 | parser_addgroup.add_argument("-G", "--groupname", help="Group name to perform action on.", required=True)
280 |
281 | parser_removegroup = subparsers.add_parser('removegroup', help='Remove a goup')
282 | parser_removegroup.add_argument("-G", "--groupname", help="Group name to perform action on.", required=True)
283 |
284 | parser_listgroups = subparsers.add_parser('listgroups', help='List all goup')
285 |
286 | parser_usersgroups = subparsers.add_parser('listusers', help='List all users')
287 |
288 | parser_allpages = subparsers.add_parser('getallpages', help='Save all pages to local files.')
289 |
290 | parser_addutog = subparsers.add_parser('addusertogroup', help='Add user to a group')
291 | parser_addutog.add_argument("-G", "--groupname", help="Group name to perform action on.", required=True)
292 | parser_addutog.add_argument("-U", "--newusername", help="Username to perform action on.", required=True)
293 |
294 | parser_removeufromg = subparsers.add_parser('removeusergromgroup', help='Remove user from a group')
295 | parser_removeufromg.add_argument("-G", "--groupname", help="Group name to perform action on.", required=True)
296 | parser_removeufromg.add_argument("-U", "--newusername", help="Username to perform action on.", required=True)
297 |
298 | parser_listusergroups = subparsers.add_parser('listusergroups', help='List groups user is in')
299 | parser_listusergroups.add_argument("-U", "--newusername", help="Username to perform action on.", required=True)
300 |
301 | args = parser.parse_args()
302 | return args
303 |
304 | def Content(args):
305 | if not hasattr(args, 'file') or not hasattr(args, 'stdin'):
306 | content = ""
307 | elif args.file:
308 | try:
309 | content = open(args.file, 'rb').read()
310 | except:
311 | error = "Cannot open file: ", args.file
312 | raise
313 | elif args.stdin:
314 | content = sys.stdin.read()
315 | else:
316 | content = ""
317 | return content
318 |
319 | def Connect(args):
320 | wiki_url = args.wikiurl + "/rpc/xmlrpc"
321 | xml_server = xmlrpclib.Server(wiki_url)
322 | try:
323 | token = ConfluenceAuth(xml_server,args.username,args.password).login()
324 | except xmlrpclib.Fault as err:
325 | error_out("%d: %s" % ( err.faultCode, err.faultString))
326 | return {"token":token,"xml_server":xml_server}
327 |
328 | def Actions(token,xml_server,args,content):
329 | try:
330 | if args.action == "addpage":
331 | logger.debug('Command: "addpage", args.name = "{}", args.label = "{}"'.format(
332 | args.name, args.label))
333 | new_page = ConfluencePage(
334 | token,xml_server,args.name,args.spacekey,content,label=args.label)
335 | new_page.add(args.parentpage)
336 | print(new_page.get()["url"])
337 | elif args.action == "copypage":
338 | content = ConfluencePage(token,xml_server,args.origin,args.spacekey,content).get_content()
339 | copy_page = ConfluencePage(
340 | token,xml_server,args.name,args.spacekey,content,label=args.label)
341 | copy_page.add(args.parentpage)
342 | print(copy_page.get()["url"])
343 | elif args.action == "updatepage":
344 | update_page = ConfluencePage(token,xml_server,args.name,args.spacekey,content,args.parentpage,label=args.label)
345 | update_page.update(content,args.parentpage)
346 | update_page.set_label()
347 | print(update_page.get()['url'])
348 |
349 | elif args.action == "getpagecontent":
350 | get_page = ConfluencePage(token,xml_server,args.name,args.spacekey,content).get_content()
351 | print(get_page)
352 |
353 | elif args.action == "getpagesummary":
354 | page = ConfluencePage(token,xml_server,args.name,args.spacekey,content).get()
355 | print args.delimiter.join((
356 | page['id'], page['space'], page['parentId'], page['title'], page['url']))
357 |
358 | elif args.action == "listpages":
359 | if args.spacekey == "":
360 | spaces = ConfluenceSpace(token,xml_server).get_all()
361 | else:
362 | spaces = [ConfluenceSpace(token,xml_server).get_by_key(args.spacekey)]
363 | for space in spaces:
364 | all_pages = ConfluenceSpace(token,xml_server).get_all_pages(space['key'])
365 | for page in all_pages:
366 | print args.delimiter.join((
367 | page['id'], page['space'], page['parentId'], page['title'], page['url']))
368 |
369 | elif args.action == "removepage":
370 | removed_page = ConfluencePage(token,xml_server,args.name,args.spacekey,"").remove()
371 |
372 | elif args.action == "addspace":
373 | add_space = ConfluenceSpace(token,xml_server).create(args.spacekey,args.name)
374 |
375 | elif args.action == "removespace":
376 | remove_space = ConfluenceSpace(token,xml_server).remove(args.spacekey)
377 |
378 | elif args.action == "listspaces":
379 | all_spaces = ConfluenceSpace(token,xml_server).get_all()
380 | for space in all_spaces:
381 | print(("%s, %s, %s") % (
382 | space['key'], space['name'], space['url']))
383 |
384 | elif args.action == "getallpages":
385 | all_spaces = ConfluenceSpace(token,xml_server).get_all()
386 | for space in all_spaces:
387 | all_pages = ConfluenceSpace(token,xml_server).get_all_pages(space['key'])
388 | print("Saving space: %s" % space['name'])
389 | print("------------")
390 | for page in all_pages:
391 | page_content = ConfluencePage(token,xml_server,page['title'],space['key'],"").get_content()
392 | valid_chars = "-_.() %s%s" % (string.ascii_letters, string.digits)
393 | page_filename = space['key'] + "_" + page['title'] + ".html"
394 | page_filename = ''.join(c for c in page_filename if c in valid_chars)
395 | with open(page_filename, "w") as page_file:
396 | try:
397 | page_file.write(page_content)
398 | page_file.close()
399 | print("Saved page: %s" % page_filename)
400 | except IOError:
401 | error_out('Could not write file: %s' % page['title'])
402 |
403 | elif args.action == "adduser":
404 | add_user = ConfluenceUser(token,xml_server,args.newusername).create(args.fullname,args.email,args.userpassword)
405 |
406 | elif args.action == "removeuser":
407 | remove_user = ConfluenceUser(token,xml_server,args.newusername).remove()
408 |
409 | elif args.action == "deactivateuser":
410 | deactivate_user = ConfluenceUser(token,xml_server,args.newusername).deactivate()
411 |
412 | elif args.action == "reactivateuser":
413 | reactivate_user = ConfluenceUser(token,xml_server,args.newusername).reactivate()
414 |
415 | elif args.action == "changeuserpassword":
416 | change_pass = ConfluenceUser(token,xml_server,args.newusername).change_password(args.userpassword)
417 |
418 | elif args.action == "listuserinfo":
419 | user_info = ConfluenceUser(token,xml_server,args.newusername).get_info()
420 | for key,value in user_info.items():
421 | print(("%s: %s") % (key,value))
422 |
423 | elif args.action == "addgroup":
424 | add_group = ConfluenceGroup(token,xml_server,args.groupname).add()
425 |
426 | elif args.action == "removegroup":
427 | remove_group = ConfluenceGroup(token,xml_server,args.groupname).remove()
428 |
429 | elif args.action == "addusertogroup":
430 | add_user_to_group = ConfluenceUser(token,xml_server,args.newusername).add_to_group(args.groupname)
431 |
432 | elif args.action == "removeuserfromgroup":
433 | remove_user_from_group = ConfluenceUser(token,xml_server,args.newusername).remove_from_group(args.groupname)
434 |
435 | elif args.action == "listgroups":
436 | allgroups = ConfluenceGroup(token,xml_server,"users").get_all()
437 | for group in allgroups:
438 | print(group)
439 |
440 | elif args.action == "listusers":
441 | allusers = ConfluenceUser(token,xml_server,"users").get_all()
442 | for user in allusers:
443 | print(user)
444 |
445 | elif args.action == "listusergroups":
446 | user_groups = ConfluenceUser(token,xml_server,args.newusername).get_groups()
447 | for group in user_groups:
448 | print(group)
449 |
450 | except xmlrpclib.Fault as err:
451 | print(("Error: %d: %s") % (err.faultCode, err.faultString))
452 |
453 | def main():
454 | args = Parser()
455 |
456 | if args.verbose:
457 | console_handler.setLevel(logging.DEBUG)
458 |
459 | content = Content(args)
460 | server = Connect(args)
461 | Actions(server["token"],server["xml_server"],args,content)
462 |
463 | if __name__ == '__main__':
464 | main()
465 |
--------------------------------------------------------------------------------