diff options
author | mathieui <mathieui@mathieui.net> | 2015-01-15 21:41:47 +0100 |
---|---|---|
committer | mathieui <mathieui@mathieui.net> | 2015-01-15 21:45:57 +0100 |
commit | 889eea463dfccf719350480de58430df430b06b4 (patch) | |
tree | cb70b5c4c7794d91cf7b5439d3e5154d9ede40aa | |
parent | 45f280f56c93fd3504029c4022f39b097b634622 (diff) | |
download | poezio-889eea463dfccf719350480de58430df430b06b4.tar.gz poezio-889eea463dfccf719350480de58430df430b06b4.tar.bz2 poezio-889eea463dfccf719350480de58430df430b06b4.tar.xz poezio-889eea463dfccf719350480de58430df430b06b4.zip |
Fix a fallback path in bookmarks.py and use a single-dispatch function
(if we gave parse_from_element an Element instead of a Conference object,
it would crash)
-rw-r--r-- | src/bookmark.py | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/src/bookmark.py b/src/bookmark.py index 7c519db2..afe38e5e 100644 --- a/src/bookmark.py +++ b/src/bookmark.py @@ -74,34 +74,38 @@ class Bookmark(object): config.set_and_save('password', self.password, section=self.jid) return local + @functools.singledispatch @staticmethod - def parse_from_stanza(el, method=None): - jid = el['jid'] - autojoin = el['autojoin'] - password = el['password'] - nick = el['nick'] - name = el['name'] - return Bookmark(jid, name, autojoin, nick, password, method) - - @staticmethod - def parse_from_element(el, method=None): + def parse(el, method=None): """ Generate a Bookmark object from a <conference/> element + (this is a fallback for raw XML Elements) """ - if isinstance(el, Conference): - return Bookmark.parse_from_stanza(el, method) jid = el.get('jid') name = el.get('name') autojoin = True if el.get('autojoin', 'false').lower() in ('true', '1') else False nick = None - for n in xml.iter(el, 'nick'): + for n in el.iter('nick'): nick = n.text password = None - for p in xml.iter(el, 'password'): + for p in el.iter('password'): password = p.text return Bookmark(jid, name, autojoin, nick, password, method) + @staticmethod + @parse.register(Conference) + def parse_from_stanza(el, method=None): + """ + Parse a Conference element into a Bookmark object + """ + jid = el['jid'] + autojoin = el['autojoin'] + password = el['password'] + nick = el['nick'] + name = el['name'] + return Bookmark(jid, name, autojoin, nick, password, method) + bookmarks = [] def get_by_jid(value): @@ -178,7 +182,7 @@ def get_pep(xmpp, available_methods, callback): for conf in iq['pubsub']['items']['item']['bookmarks']['conferences']: if isinstance(conf, URL): continue - b = Bookmark.parse_from_element(conf, method='pep') + b = Bookmark.parse(conf, method='pep') if not get_by_jid(b.jid): bookmarks.append(b) if callback: @@ -195,7 +199,7 @@ def get_privatexml(xmpp, available_methods, callback): else: available_methods["privatexml"] = True for conf in iq['private']['bookmarks']['conferences']: - b = Bookmark.parse_from_element(conf, method='privatexml') + b = Bookmark.parse(conf, method='privatexml') if not get_by_jid(b.jid): bookmarks.append(b) if callback: |