2014-07-17 12:19:04 +00:00
|
|
|
Slixmpp
|
2011-08-18 08:04:59 +00:00
|
|
|
#########
|
|
|
|
|
2014-07-17 12:19:04 +00:00
|
|
|
Slixmpp is an MIT licensed XMPP library for Python 3.4+. It is a fork of
|
|
|
|
SleekXMPP.
|
2011-08-18 08:04:59 +00:00
|
|
|
|
2014-07-17 12:19:04 +00:00
|
|
|
Slixmpp's goals is to only rewrite the core of the library (the low level
|
|
|
|
socket handling, the timers, the events dispatching) in order to remove all
|
|
|
|
threads.
|
2011-08-18 08:04:59 +00:00
|
|
|
|
2012-07-20 07:17:53 +00:00
|
|
|
|
2011-08-18 23:32:06 +00:00
|
|
|
Documentation and Testing
|
|
|
|
-------------------------
|
|
|
|
Documentation can be found both inline in the code, and as a Sphinx project in ``/docs``.
|
|
|
|
To generate the Sphinx documentation, follow the commands below. The HTML output will
|
|
|
|
be in ``docs/_build/html``::
|
|
|
|
|
|
|
|
cd docs
|
|
|
|
make html
|
|
|
|
open _build/html/index.html
|
|
|
|
|
2014-07-17 12:19:04 +00:00
|
|
|
To run the test suite for Slixmpp::
|
2011-08-18 23:32:06 +00:00
|
|
|
|
2015-07-31 18:00:53 +00:00
|
|
|
python run_tests.py
|
2011-08-18 23:32:06 +00:00
|
|
|
|
|
|
|
|
2014-07-17 12:19:04 +00:00
|
|
|
The Slixmpp Boilerplate
|
2011-08-18 23:32:06 +00:00
|
|
|
-------------------------
|
2014-07-17 12:19:04 +00:00
|
|
|
Projects using Slixmpp tend to follow a basic pattern for setting up client/component
|
|
|
|
connections and configuration. Here is the gist of the boilerplate needed for a Slixmpp
|
2011-08-18 23:32:06 +00:00
|
|
|
based project. See the documetation or examples directory for more detailed archetypes for
|
2014-07-17 12:19:04 +00:00
|
|
|
Slixmpp projects::
|
2011-08-18 23:32:06 +00:00
|
|
|
|
|
|
|
import logging
|
|
|
|
|
2014-07-17 12:19:04 +00:00
|
|
|
from slixmpp import ClientXMPP
|
|
|
|
from slixmpp.exceptions import IqError, IqTimeout
|
2011-08-18 23:32:06 +00:00
|
|
|
|
|
|
|
|
|
|
|
class EchoBot(ClientXMPP):
|
|
|
|
|
|
|
|
def __init__(self, jid, password):
|
|
|
|
ClientXMPP.__init__(self, jid, password)
|
|
|
|
|
2011-11-14 20:00:21 +00:00
|
|
|
self.add_event_handler("session_start", self.session_start)
|
2011-08-18 23:32:06 +00:00
|
|
|
self.add_event_handler("message", self.message)
|
|
|
|
|
2012-01-18 23:22:19 +00:00
|
|
|
# If you wanted more functionality, here's how to register plugins:
|
|
|
|
# self.register_plugin('xep_0030') # Service Discovery
|
|
|
|
# self.register_plugin('xep_0199') # XMPP Ping
|
|
|
|
|
|
|
|
# Here's how to access plugins once you've registered them:
|
|
|
|
# self['xep_0030'].add_feature('echo_demo')
|
2011-11-14 20:00:21 +00:00
|
|
|
|
|
|
|
# If you are working with an OpenFire server, you will
|
|
|
|
# need to use a different SSL version:
|
|
|
|
# import ssl
|
|
|
|
# self.ssl_version = ssl.PROTOCOL_SSLv3
|
|
|
|
|
|
|
|
def session_start(self, event):
|
2011-08-18 23:32:06 +00:00
|
|
|
self.send_presence()
|
2012-01-18 23:22:19 +00:00
|
|
|
self.get_roster()
|
2011-08-18 23:32:06 +00:00
|
|
|
|
2011-11-14 20:00:21 +00:00
|
|
|
# Most get_*/set_* methods from plugins use Iq stanzas, which
|
2011-08-18 23:32:06 +00:00
|
|
|
# can generate IqError and IqTimeout exceptions
|
2012-01-18 23:22:19 +00:00
|
|
|
#
|
|
|
|
# try:
|
|
|
|
# self.get_roster()
|
|
|
|
# except IqError as err:
|
|
|
|
# logging.error('There was an error getting the roster')
|
|
|
|
# logging.error(err.iq['error']['condition'])
|
|
|
|
# self.disconnect()
|
|
|
|
# except IqTimeout:
|
|
|
|
# logging.error('Server is taking too long to respond')
|
|
|
|
# self.disconnect()
|
2011-08-18 23:32:06 +00:00
|
|
|
|
|
|
|
def message(self, msg):
|
|
|
|
if msg['type'] in ('chat', 'normal'):
|
|
|
|
msg.reply("Thanks for sending\n%(body)s" % msg).send()
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
2014-08-17 19:53:34 +00:00
|
|
|
# Ideally use optparse or argparse to get JID,
|
2011-08-18 23:32:06 +00:00
|
|
|
# password, and log level.
|
|
|
|
|
|
|
|
logging.basicConfig(level=logging.DEBUG,
|
|
|
|
format='%(levelname)-8s %(message)s')
|
|
|
|
|
|
|
|
xmpp = EchoBot('somejid@example.com', 'use_getpass')
|
2011-12-05 16:57:57 +00:00
|
|
|
xmpp.connect()
|
2015-07-31 18:00:53 +00:00
|
|
|
xmpp.process(forever=True)
|
2011-08-18 23:32:06 +00:00
|
|
|
|
2011-08-18 08:04:59 +00:00
|
|
|
|
2014-07-17 12:19:04 +00:00
|
|
|
Slixmpp Credits
|
|
|
|
---------------
|
|
|
|
|
|
|
|
**Maintainer of the slixmpp fork:** Florent Le Coz
|
|
|
|
`louiz@louiz.org <xmpp:louiz@louiz.org?message>`_,
|
|
|
|
|
2015-07-31 18:00:53 +00:00
|
|
|
Credits (SleekXMPP)
|
|
|
|
-------------------
|
2014-07-17 12:19:04 +00:00
|
|
|
|
2011-08-18 08:04:59 +00:00
|
|
|
**Main Author:** Nathan Fritz
|
2014-08-17 19:53:34 +00:00
|
|
|
`fritzy@netflint.net <xmpp:fritzy@netflint.net?message>`_,
|
2011-08-18 08:04:59 +00:00
|
|
|
`@fritzy <http://twitter.com/fritzy>`_
|
|
|
|
|
|
|
|
Nathan is also the author of XMPPHP and `Seesmic-AS3-XMPP
|
2014-08-17 19:53:34 +00:00
|
|
|
<http://code.google.com/p/seesmic-as3-xmpp/>`_, and a former member of
|
2012-01-03 22:04:15 +00:00
|
|
|
the XMPP Council.
|
2011-08-18 08:04:59 +00:00
|
|
|
|
|
|
|
**Co-Author:** Lance Stout
|
2014-08-17 19:53:34 +00:00
|
|
|
`lancestout@gmail.com <xmpp:lancestout@gmail.com?message>`_,
|
2011-08-18 08:04:59 +00:00
|
|
|
`@lancestout <http://twitter.com/lancestout>`_
|
|
|
|
|
|
|
|
**Contributors:**
|
|
|
|
- Brian Beggs (`macdiesel <http://github.com/macdiesel>`_)
|
|
|
|
- Dann Martens (`dannmartens <http://github.com/dannmartens>`_)
|
|
|
|
- Florent Le Coz (`louiz <http://github.com/louiz>`_)
|
|
|
|
- Kevin Smith (`Kev <http://github.com/Kev>`_, http://kismith.co.uk)
|
|
|
|
- Remko Tronçon (`remko <http://github.com/remko>`_, http://el-tramo.be)
|
|
|
|
- Te-jé Rogers (`te-je <http://github.com/te-je>`_)
|
|
|
|
- Thom Nichols (`tomstrummer <http://github.com/tomstrummer>`_)
|