synchronisieren 2er wikis

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
naked_chef
User
Beiträge: 15
Registriert: Dienstag 3. Februar 2009, 10:02

Dienstag 3. Februar 2009, 10:53

moin moin,

ich sitze im moment an einem script um 2 wikis abzugleichen.
wir verwenden ein confluence wiki als intranet und eins als externe anlaufstelle für externe partner. das externe wiki soll seine inhalte aus dem internen erhalten.

da confluence keine direkte update funktion bereit hällt muss ich den gewünschten bereich aus dem internen wiki exportieren und in das externe einfügen.

mein script dazu macht soweit alles was es soll, nur der upload klappt nicht, leider ist dort auch die dokumentation lückenhaft, daher wende ich mich an euch, in der hoffnung, dass ihr noch ein paar ideen habt.

mein script:

Code: Alles auswählen

#!/usr/bin/env python

import sys, os, urllib2, xmlrpclib
from urllib2 import URLError, HTTPError

## Edit these next parameters
adminIntern = "admin-user"
passwordIntern = "password"
wikiUrlIntern = "http://intern.example.net"

exportDir = "/tmp/"
spaceKey = "SPACENAME"

adminExtern = "import-admin"
passwordExtern = "anderespassword"
wikiUrlExtern = "http://extern.example.net"

## Don't edit the next content
# init XMLRPC Session
sIntern = xmlrpclib.ServerProxy(wikiUrlIntern + "/rpc/xmlrpc")
# Login
tokenIntern = sIntern.confluence1.login(adminIntern, passwordIntern)
# perform the export and get a download url
downloadURLIntern = sIntern.confluence1.exportSpace(tokenIntern, spaceKey, "all")
# authenticate to download the archiv
downloadURLIntern = downloadURLIntern + "?os_username=" + adminIntern + "&os_password=" + passwordIntern

filePath = exportDir + spaceKey + ".zip"

if os.path.exists(filePath):
	os.remove(filePath)

req = urllib2.Request(downloadURLIntern)
try:
	f = urllib2.urlopen(req)
	localFile = open(filePath, "w")
	localFile.write(f.read())
	localFile.close()
except HTTPError, e:
	print "Error downloading file - HTTP response: ", e.code
	sys.exit(1)
except URLError, e:
	print "URL Error: ", e.reason, url
	sys.exit(1)


sExtern = xmlrpclib.ServerProxy(wikiUrlExtern + "/rpc/xmlrpc")
tokenExtern = sExtern.confluence1.login(adminExtern, passwordExtern)

# delete old space
#spaceRemove = sExtern.confluence1.removeSpace(tokenExtern, spaceKey)

sizeArchiv = os.path.getsize(filePath)
print sizeArchiv

#bytes = open(filePath, "r")
#print bytes

spaceUpload = sExtern.confluence1.importSpace(tokenExtern,filePath)
in der doku http://confluence.atlassian.com/display ... cification

die für mich interessante stelle:
boolean importSpace(String token, byte[] zippedImportData) - import a space into Confluence. Note that this uses a lot of memory - about 4 times the size of the upload. The data provided should be a zipped XML backup, the same as exported by Confluence.
ideen?

lg naked
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Montag 9. Februar 2009, 12:54

Als zweiten Paramter würde ich die Datei im Binärmodus öffnen und ausgeben.

Code: Alles auswählen

f = open(filePath, "rb")
sExtern.confluence1.importSpace(tokenExtern, f.read())
Das FileHandle oder den Pfad zu übertragen gibt auf jeden Fall keinen Sinn und wird auch nicht funktionieren.
Ansonsten kannst es auch mal ohne das binär versuchen.
Antworten