Mercurial > libervia-backend
annotate src/plugins/plugin_xep_0092.py @ 921:8dd168c7741c
plugin text commands: refactoring:
- commands can now return a deferred
- if commands return True, message is sent, else it is cancelled
- the escape sequence is now '//' instead of '\/'
- added software version to /whois command
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 22 Mar 2014 13:47:33 +0100 |
parents | 45dffd67a18a |
children | d609581bf74a |
rev | line source |
---|---|
920
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/usr/bin/python |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 # SàT plugin for Software Version (XEP-0092) |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jérôme Poisson (goffi@goffi.org) |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 # (at your option) any later version. |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 # GNU Affero General Public License for more details. |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 from sat.core.i18n import _ |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
21 from sat.core.constants import Const as C |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
22 from wokkel import disco, iwokkel, data_form, compat |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
23 from sat.core import exceptions |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
24 from logging import debug, info, warning, error |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
25 |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 NS_VERSION = "jabber:iq:version" |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
28 PLUGIN_INFO = { |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 "name": "Software Version Plugin", |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 "import_name": "XEP-0092", |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 "type": "XEP", |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 "protocols": ["XEP-0092"], |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
33 "dependencies": [], |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 "main": "XEP_0092", |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 "handler": "no", # version is already handler in core.xmpp module |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 "description": _("""Implementation of Software Version""") |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 } |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 class XEP_0092(object): |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 def __init__(self, host): |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 info(_("Plugin XEP_0092 initialization")) |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 self.host = host |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
45 |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
46 def getVersion(self, jid_, profile_key=C.PROF_KEY_NONE): |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 """ Ask version of the client that jid_ is running |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 @param jid_: jid from who we want to know client's version |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 @param profile_key: %(doc_profile_key)s |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 @return: a defered which fire tuple with the following data (None if not available): |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 - name: Natural language name of the software |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
52 - version: specific version of the software |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 - os: operating system of the queried entity |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 """ |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 client = self.host.getClient(profile_key) |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 if not client: |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 raise exceptions.ProfileUnknownError |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 iq_elt = compat.IQ(client.xmlstream, 'get') |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 iq_elt['to'] = jid_.full() |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
60 query_elt = iq_elt.addElement("query", NS_VERSION) |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
61 d = iq_elt.send() |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 d.addCallback(self._gotVersion) |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
63 return d |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
64 |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
65 def _gotVersion(self, iq_elt): |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
66 try: |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
67 query_elt = iq_elt.elements(NS_VERSION, 'query').next() |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
68 except StopIteration: |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
69 raise exceptions.DataError |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
70 ret = [] |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 for name in ('name', 'version', 'os'): |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
72 try: |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
73 data_elt = query_elt.elements(NS_VERSION, name).next() |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
74 ret.append(unicode(data_elt)) |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
75 except StopIteration: |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
76 ret.append(None) |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
77 |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
78 return tuple(ret) |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
79 |
45dffd67a18a
plugin XEP-0092: new plugin (software version)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
80 |