diff options
-rw-r--r-- | sleekxmpp/stanza/nick.py | 80 | ||||
-rw-r--r-- | tests/test_messagestanzas.py | 13 | ||||
-rw-r--r-- | tests/test_presencestanzas.py | 10 |
3 files changed, 85 insertions, 18 deletions
diff --git a/sleekxmpp/stanza/nick.py b/sleekxmpp/stanza/nick.py index 47d4620a..de54b307 100644 --- a/sleekxmpp/stanza/nick.py +++ b/sleekxmpp/stanza/nick.py @@ -5,22 +5,68 @@ See the file LICENSE for copying permission. """ -from .. xmlstream.stanzabase import registerStanzaPlugin, ElementBase, ET + +from sleekxmpp.stanza import Message, Presence +from sleekxmpp.xmlstream.stanzabase import registerStanzaPlugin +from sleekxmpp.xmlstream.stanzabase import ElementBase, ET + class Nick(ElementBase): - namespace = 'http://jabber.org/nick/nick' - name = 'nick' - plugin_attrib = 'nick' - interfaces = set(('nick')) - plugin_attrib_map = set() - plugin_xml_map = set() - - def setNick(self, nick): - self.xml.text = nick - - def getNick(self): - return self.xml.text - - def delNick(self): - if self.parent is not None: - self.parent().xml.remove(self.xml) + + """ + XEP-0172: User Nickname allows the addition of a <nick> element + in several stanza types, including <message> and <presence> stanzas. + + The nickname contained in a <nick> should be the global, friendly or + informal name chosen by the owner of a bare JID. The <nick> element + may be included when establishing communications with new entities, + such as normal XMPP users or MUC services. + + The nickname contained in a <nick> element will not necessarily be + the same as the nickname used in a MUC. + + Example stanzas: + <message to="user@example.com"> + <nick xmlns="http://jabber.org/nick/nick">The User</nick> + <body>...</body> + </message> + + <presence to="otheruser@example.com" type="subscribe"> + <nick xmlns="http://jabber.org/nick/nick">The User</nick> + </presence> + + Stanza Interface: + nick -- A global, friendly or informal name chosen by a user. + + Methods: + getNick -- Return the nickname in the <nick> element. + setNick -- Add a <nick> element with the given nickname. + delNick -- Remove the <nick> element. + """ + + namespace = 'http://jabber.org/nick/nick' + name = 'nick' + plugin_attrib = name + interfaces = set(('nick',)) + + def setNick(self, nick): + """ + Add a <nick> element with the given nickname. + + Arguments: + nick -- A human readable, informal name. + """ + self.xml.text = nick + + def getNick(self): + """Return the nickname in the <nick> element.""" + return self.xml.text + + def delNick(self): + """Remove the <nick> element.""" + if self.parent is not None: + self.parent().xml.remove(self.xml) + + +registerStanzaPlugin(Message, Nick) +registerStanzaPlugin(Presence, Nick) diff --git a/tests/test_messagestanzas.py b/tests/test_messagestanzas.py index 5e2a667a..9b7b0a3f 100644 --- a/tests/test_messagestanzas.py +++ b/tests/test_messagestanzas.py @@ -25,7 +25,7 @@ class TestMessageStanzas(SleekTest): self.failUnless(str(msg['to']) == 'usr@server.tld') def testHTMLPlugin(self): - "Test message/html/html stanza" + "Test message/html/body stanza" msg = self.Message() msg['to'] = "fritzy@netflint.net/sleekxmpp" msg['body'] = "this is the plaintext message" @@ -43,4 +43,15 @@ class TestMessageStanzas(SleekTest): </html> </message>""") + def testNickPlugin(self): + "Test message/nick/nick stanza." + msg = self.Message() + msg['nick']['nick'] = 'A nickname!' + self.checkMessage(msg, """ + <message> + <nick xmlns="http://jabber.org/nick/nick">A nickname!</nick> + </message> + """) + + suite = unittest.TestLoader().loadTestsFromTestCase(TestMessageStanzas) diff --git a/tests/test_presencestanzas.py b/tests/test_presencestanzas.py index 2cab3af7..6c11263f 100644 --- a/tests/test_presencestanzas.py +++ b/tests/test_presencestanzas.py @@ -53,5 +53,15 @@ class TestPresenceStanzas(SleekTest): self.failUnless(c.roster == {}, "Roster updated for superfulous unavailable presence") + def testNickPlugin(self): + """Test presence/nick/nick stanza.""" + p = self.Presence() + p['nick']['nick'] = 'A nickname!' + self.checkPresence(p, """ + <presence> + <nick xmlns="http://jabber.org/nick/nick">A nickname!</nick> + </presence> + """) + suite = unittest.TestLoader().loadTestsFromTestCase(TestPresenceStanzas) |