summaryrefslogtreecommitdiffstats
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rwxr-xr-xxep227-to-prosody.py28
1 files changed, 21 insertions, 7 deletions
diff --git a/xep227-to-prosody.py b/xep227-to-prosody.py
index 2b3226d..cfa349f 100755
--- a/xep227-to-prosody.py
+++ b/xep227-to-prosody.py
@@ -4,13 +4,14 @@ import sys, os, os.path, xml.sax.handler
4from xml.sax import make_parser 4from xml.sax import make_parser
5 5
6class Handler(xml.sax.handler.ContentHandler) : 6class Handler(xml.sax.handler.ContentHandler) :
7 def __init__(self) : 7 def __init__(self, datadir) :
8 pass 8 self.datadir = datadir
9 self.text = ""
9 10
10 def startElementNS(self, name, qname, attrs): 11 def startElementNS(self, name, qname, attrs):
11 if name == ("http://www.xmpp.org/extensions/xep-0227.html#ns", "host") : 12 if name == ("http://www.xmpp.org/extensions/xep-0227.html#ns", "host") :
12 self.server = attrs.getValueByQName("jid") 13 self.server = attrs.getValueByQName("jid")
13 for dir in [os.path.join(self.server, d) for d in ["accounts", "roster", "private", "vcard"]] : 14 for dir in [self.getDataPath(d) for d in ["accounts", "roster", "private", "vcard"]] :
14 if not os.path.exists(dir) : 15 if not os.path.exists(dir) :
15 os.makedirs(dir) 16 os.makedirs(dir)
16 elif name == ("http://www.xmpp.org/extensions/xep-0227.html#ns", "user") : 17 elif name == ("http://www.xmpp.org/extensions/xep-0227.html#ns", "user") :
@@ -57,8 +58,11 @@ class Handler(xml.sax.handler.ContentHandler) :
57 def characters(self, text) : 58 def characters(self, text) :
58 self.text += text 59 self.text += text
59 60
61 def getDataPath(self, data) :
62 return os.path.join(self.datadir, self.encode(self.server), data)
63
60 def getDataFileName(self, data) : 64 def getDataFileName(self, data) :
61 return os.path.join(self.server, data, self.user + ".dat") 65 return os.path.join(self.datadir, self.encode(self.server), data, self.encode(self.user) + ".dat")
62 66
63 def getAttribute(self, attributes, attribute) : 67 def getAttribute(self, attributes, attribute) :
64 try : 68 try :
@@ -66,10 +70,20 @@ class Handler(xml.sax.handler.ContentHandler) :
66 except KeyError : 70 except KeyError :
67 return None 71 return None
68 72
69assert(len(sys.argv) == 2) 73 def encode(self, name) :
74 return ''.join(map(self.encode_char, name))
75
76 def encode_char(self, c) :
77 if c >= 'a' and c <= 'z' or c >= 'A' and c <= 'Z' :
78 return c
79 else :
80 return '%%%02x' % ord(c)
81
82if len(sys.argv) != 3 :
83 print "Usage: " + sys.argv[0] + " <xep-227-input-file>.xml <prosody-data-dir>"
84 sys.exit(-1)
70 85
71handler = Handler()
72parser = make_parser() 86parser = make_parser()
73parser.setFeature(xml.sax.handler.feature_namespaces, 1) 87parser.setFeature(xml.sax.handler.feature_namespaces, 1)
74parser.setContentHandler(handler) 88parser.setContentHandler(Handler(sys.argv[2]))
75parser.parse(open(sys.argv[1])) 89parser.parse(open(sys.argv[1]))