-
Notifications
You must be signed in to change notification settings - Fork 5.6k
/
confluence_export.py
82 lines (65 loc) · 2.04 KB
/
confluence_export.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#! /usr/bin/env python
# Export the contents on confluence
#
# Dependencies:
# - suds
#
# User: soap, Password: soap
from __future__ import with_statement
import cookielib
import datetime
import os
import shutil
import subprocess
import sys
import urllib2
from suds.client import Client
SOAP_URI = "http://mongodb.onconfluence.com/rpc/soap-axis/confluenceservice-v1?wsdl"
USERNAME = "soap"
PASSWORD = "soap"
AUTH_URI = "http://www.mongodb.org/login.action?os_authType=basic"
TMP_DIR = "confluence-tmp"
TMP_FILE = "confluence-tmp.zip"
def export_and_get_uri():
client = Client(SOAP_URI)
auth = client.service.login(USERNAME, PASSWORD)
return client.service.exportSpace(auth, "DOCS", "TYPE_HTML")
def login_and_download(docs):
cookie_jar = cookielib.CookieJar()
cookie_handler = urllib2.HTTPCookieProcessor(cookie_jar)
password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, AUTH_URI, USERNAME, PASSWORD)
auth_handler = urllib2.HTTPBasicAuthHandler(password_manager)
urllib2.build_opener(cookie_handler, auth_handler).open(AUTH_URI)
return urllib2.build_opener(cookie_handler).open(docs)
def extract_to_dir(data, dir):
with open(TMP_FILE, "w") as f:
f.write(data.read())
data.close()
# This is all really annoying but zipfile doesn't do extraction on 2.5
subprocess.call(["unzip", "-d", dir, TMP_FILE])
os.unlink(TMP_FILE)
def rmdir(dir):
try:
shutil.rmtree(dir)
except:
pass
def overwrite(src, dest):
target = "%s/DOCS-%s/" % (dest, datetime.date.today())
current = "%s/current" % dest
rmdir(target)
shutil.copytree(src, target)
try:
os.unlink(current)
except:
pass
os.symlink(os.path.abspath(target), os.path.abspath(current))
def main(dir):
rmdir(TMP_DIR)
extract_to_dir(login_and_download(export_and_get_uri()), TMP_DIR)
overwrite("%s/DOCS/" % TMP_DIR, dir)
if __name__ == "__main__":
try:
main(sys.argv[1])
except IndexError:
print "pass outdir as first arg"