No description
Find a file
Maxime Buquet 4fa068da54 Merge branch 'xep-0030-component' into 'master'
xep_0030: small fixes for components

See merge request poezio/slixmpp!236
2023-02-25 10:47:29 +00:00
.github Add a github pull request template 2020-04-04 20:04:23 +02:00
docs implements XEP-0292 (vCard4 over XMPP) 2022-11-04 09:36:25 +01:00
examples setup.py: add cryptography in extras_require; update example 2022-03-20 01:02:14 +01:00
itests fix: integration tests 2021-12-13 22:35:53 +01:00
slixmpp xep_0030: get_items(): fix ifrom for local calls 2023-02-25 10:29:21 +01:00
tests Merge branch 'xep0447' into 'master' 2023-02-24 14:12:45 +00:00
.gitignore Privileged entities (XEP-0356) 2021-02-18 20:03:22 +01:00
.gitlab-ci.yml setup.py: add cryptography in extras_require; update example 2022-03-20 01:02:14 +01:00
.travis.yml Update Python version minimum requirement to 3.7 2020-05-01 15:13:19 +02:00
CONTRIBUTING.rst Change more URLs to lab.louiz.org 2019-02-12 10:34:57 +00:00
doap.xml doap: fix 454 note entry 2023-01-04 21:24:17 +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
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 setup.py: add cryptography in extras_require; update example 2022-03-20 01:02:14 +01:00
tox.ini

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:**
    - Florent Le Coz (`louiz@louiz.org <xmpp:louiz@louiz.org?message>`_),
    - Mathieu Pasquet (`mathieui@mathieui.net <xmpp:mathieui@mathieui.net?message>`_),

**Contributors:**
    - Emmanuel Gil Peyrot (`Link mauve <xmpp:linkmauve@linkmauve.fr?message>`_)
    - Sam Whited (`Sam Whited <mailto:sam@samwhited.com>`_)
    - Dan Sully (`Dan Sully <mailto:daniel@electricalrain.com>`_)
    - Gasper Zejn (`Gasper Zejn <mailto:zejn@kiberpipa.org>`_)
    - Krzysztof Kotlenga (`Krzysztof Kotlenga <mailto:pocek@users.sf.net>`_)
    - Tsukasa Hiiragi (`Tsukasa Hiiragi <mailto:bakalolka@gmail.com>`_)
    - Maxime Buquet (`pep <xmpp:pep@bouah.net?message>`_)

Credits (SleekXMPP)
-------------------

**Main Author:** Nathan Fritz
    `fritzy@netflint.net <xmpp:fritzy@netflint.net?message>`_,
    `@fritzy <http://twitter.com/fritzy>`_

    Nathan is also the author of XMPPHP and `Seesmic-AS3-XMPP
    <http://code.google.com/p/seesmic-as3-xmpp/>`_, and a former member of
    the XMPP Council.

**Co-Author:** Lance Stout
    `lancestout@gmail.com <xmpp:lancestout@gmail.com?message>`_,
    `@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>`_)