2
0
Fork 0
forked from poezio/slixmpp
Modern python XMPP library using asyncio.
  • Python 99.9%
  • Cython 0.1%
Find a file
2024-06-20 19:00:20 +00:00
.github Add a github pull request template 2020-04-04 20:04:23 +02:00
.woodpecker ci: build cython module for itests 2024-02-09 23:28:15 +01:00
docs Add BukuBot 2024-06-04 10:22:24 +00:00
examples setup.py: add cryptography in extras_require; update example 2022-03-20 01:02:14 +01:00
itests itests: fix default server call 2024-02-09 23:11:29 +01:00
slixmpp Correct an MUC-related error message which indicates the requirement of a JID 2024-06-20 19:00:20 +00:00
tests Update plugin: XEP-0317 (hats) 2024-02-09 21:06:14 +01:00
.gitignore Privileged entities (XEP-0356) 2021-02-18 20:03:22 +01:00
.gitlab-ci.yml ci: update python images 2023-04-18 19:41:02 +02:00
.readthedocs.yaml [docs] add readthedocs.yaml 2023-11-13 19:38:48 +01:00
.travis.yml Update Python version minimum requirement to 3.7 2020-05-01 15:13:19 +02:00
CONTRIBUTING.rst Move references from lab.louiz.org to codeberg 2023-07-06 15:26:57 +02:00
doap.xml Release 1.8.5 2024-02-02 01:59:31 +01:00
INSTALL Update Python version minimum requirement to 3.7 2020-05-01 15:13:19 +02:00
LICENSE Remove OrderedDict usage 2020-12-06 17:00:47 +01:00
MANIFEST.in Add missing files to the MANIFEST 2015-08-08 17:34:06 +02:00
mypy.ini add a mypy.ini file 2021-07-05 22:42:28 +02:00
README.rst README: document integration tests 2020-12-06 20:59:00 +01:00
run_integration_tests.py itests: add a command-line parameter to enable debug logs 2021-02-04 19:14:23 +01:00
run_tests.py run_tests: add a command-line option to enable debug logs 2021-02-20 11:53:30 +01:00
setup.py Move references from lab.louiz.org to codeberg 2023-07-06 15:26:57 +02:00
tox.ini Merge branch 'develop' of https://github.com/fritzy/SleekXMPP into sleek-merge 2015-10-02 19:00:19 +02:00

Slixmpp

Slixmpp is an MIT licensed XMPP library for Python 3.7+. It is a fork of SleekXMPP.

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.

Building

Slixmpp can make use of cython to improve performance on critical modules. To do that, cython3 is necessary along with libidn headers. Otherwise, no compilation is needed. Building is done by running setup.py:

python3 setup.py build_ext --inplace

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

To run the test suite for Slixmpp:

python run_tests.py

Integration tests require the following environment variables to be set::

$CI_ACCOUNT1
$CI_ACCOUNT1_PASSWORD
$CI_ACCOUNT2
$CI_ACCOUNT2_PASSWORD
$CI_MUC_SERVER

where the account variables are JIDs of valid, existing accounts, and the passwords are the account passwords. The MUC server must allow room creation from those JIDs.

To run the integration test suite for Slixmpp:

python run_integration_tests.py

The Slixmpp Boilerplate

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 based project. See the documentation or examples directory for more detailed archetypes for Slixmpp projects:

import logging

from slixmpp import ClientXMPP
from slixmpp.exceptions import IqError, IqTimeout


class EchoBot(ClientXMPP):

    def __init__(self, jid, password):
        ClientXMPP.__init__(self, jid, password)

        self.add_event_handler("session_start", self.session_start)
        self.add_event_handler("message", self.message)

        # 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')

        # 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):
        self.send_presence()
        self.get_roster()

        # Most get_*/set_* methods from plugins use Iq stanzas, which
        # can generate IqError and IqTimeout exceptions
        #
        # 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()

    def message(self, msg):
        if msg['type'] in ('chat', 'normal'):
            msg.reply("Thanks for sending\n%(body)s" % msg).send()


if __name__ == '__main__':
    # Ideally use optparse or argparse to get JID,
    # password, and log level.

    logging.basicConfig(level=logging.DEBUG,
                        format='%(levelname)-8s %(message)s')

    xmpp = EchoBot('somejid@example.com', 'use_getpass')
    xmpp.connect()
    xmpp.process(forever=True)

Slixmpp Credits

Maintainers:
Contributors:

Credits (SleekXMPP)

Main Author: Nathan Fritz

fritzy@netflint.net, @fritzy

Nathan is also the author of XMPPHP and Seesmic-AS3-XMPP, and a former member of the XMPP Council.

Co-Author: Lance Stout

lancestout@gmail.com, @lancestout

Contributors: