![]() |
index : Prosody XEP-0227 Importer | |
| Prosody XEP-0227 Importer | Remko Tronçon |
| summaryrefslogtreecommitdiffstats |
Unidiff
| -rwxr-xr-x | xep227-to-prosody.py | 28 |
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 | |||
| 4 | from xml.sax import make_parser | 4 | from xml.sax import make_parser |
| 5 | 5 | ||
| 6 | class Handler(xml.sax.handler.ContentHandler) : | 6 | class 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 | ||
| 69 | assert(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 | |||
| 82 | if len(sys.argv) != 3 : | ||
| 83 | print "Usage: " + sys.argv[0] + " <xep-227-input-file>.xml <prosody-data-dir>" | ||
| 84 | sys.exit(-1) | ||
| 70 | 85 | ||
| 71 | handler = Handler() | ||
| 72 | parser = make_parser() | 86 | parser = make_parser() |
| 73 | parser.setFeature(xml.sax.handler.feature_namespaces, 1) | 87 | parser.setFeature(xml.sax.handler.feature_namespaces, 1) |
| 74 | parser.setContentHandler(handler) | 88 | parser.setContentHandler(Handler(sys.argv[2])) |
| 75 | parser.parse(open(sys.argv[1])) | 89 | parser.parse(open(sys.argv[1])) |
