• This repository has been archived on 19/Feb/2020
  • Stars
    star
    1,104
  • Rank 42,038 (Top 0.9 %)
  • Language
    Python
  • License
    Other
  • Created almost 15 years ago
  • Updated almost 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Python 2.6+/3.1+ XMPP Library

SleekXMPP

⚠️ Deprecated

SleekXMPP is deprecated in favor of Slixmpp, a fork which takes full advantage of Python 3 and asyncio.

Slixmpp Repo: https://lab.louiz.org/poezio/slixmpp

Github Mirror: https://github.com/poezio/slixmpp

About

SleekXMPP is an MIT licensed XMPP library for Python 2.7/3.4+, and is featured in examples in XMPP: The Definitive Guide by Kevin Smith, Remko Tronçon, and Peter Saint-Andre. If you've arrived here from reading the Definitive Guide, please see the notes on updating the examples to the latest version of SleekXMPP.

SleekXMPP's design goals and philosphy are:

Low number of dependencies

Installing and using SleekXMPP should be as simple as possible, without having to deal with long dependency chains.

As part of reducing the number of dependencies, some third party modules are included with SleekXMPP in the thirdparty directory. Imports from this module first try to import an existing installed version before loading the packaged version, when possible.

Every XEP as a plugin
Following Python's "batteries included" approach, the goal is to provide support for all currently active XEPs (final and draft). Since adding XEP support is done through easy to create plugins, the hope is to also provide a solid base for implementing and creating experimental XEPs.
Rewarding to work with
As much as possible, SleekXMPP should allow things to "just work" using sensible defaults and appropriate abstractions. XML can be ugly to work with, but it doesn't have to be that way.

Get the Code

Get the latest stable version from PyPI:

pip install sleekxmpp

The latest source code for SleekXMPP may be found on Github. Releases can be found in the master branch, while the latest development version is in the develop branch.

Latest Release
Develop Releases

Installing DNSPython

If you are using Python3 and wish to use dnspython, you will have to checkout and install the python3 branch:

git clone http://github.com/rthalley/dnspython
cd dnspython
git checkout python3
python3 setup.py install

Discussion

A mailing list and XMPP chat room are available for discussing and getting help with SleekXMPP.

Mailing List
SleekXMPP Discussion on Google Groups
Chat
[email protected]

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 SleekXMPP:

python testall.py

The SleekXMPP Boilerplate

Projects using SleekXMPP tend to follow a basic pattern for setting up client/component connections and configuration. Here is the gist of the boilerplate needed for a SleekXMPP based project. See the documetation or examples directory for more detailed archetypes for SleekXMPP projects:

import logging

from sleekxmpp import ClientXMPP
from sleekxmpp.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('[email protected]', 'use_getpass')
    xmpp.connect()
    xmpp.process(block=True)

Credits

Main Author: Nathan Fritz

[email protected], @fritzy

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

Maintainer: Mike "Bear" Taylor

https://bear.im/

A special thanks to Bear for stewarding the project for the last few years of its life.

Co-Author: Lance Stout
[email protected], @lancestout
Contributors:

More Repositories

1

ape-ecs

Entity-Component-System library for JavaScript.
TypeScript
250
star
2

Dulcimer

Dulcimer is a Node.js ORM for keystores.
JavaScript
79
star
3

VeryModel

A JavaScript model system for validation, creation, and editing of models.
JavaScript
55
star
4

SleekPubsub

Publish-Subscribe Component w/ XMPP, REST, and Ad-hoc interfaces
Python
27
star
5

node-neovim

NeoVIM RPC lib for Node.js
JavaScript
26
star
6

staydown

Keeps a DOM element scrolled down, based on user intention.
JavaScript
24
star
7

node-redisscan

Recursively scan through Redis keys.
JavaScript
22
star
8

node-azure-media

JavaScript
15
star
9

thoonk.js

Thoonk.js: Persistent (and fast!) push feeds, queues, and jobs leveraging Redis for node.js.
JavaScript
13
star
10

pgdown

postgres backend for levelup
JavaScript
12
star
11

thoonk.py

Thoonk.py!
Python
12
star
12

thoonk-jobs.js

JavaScript
11
star
13

spacewar.pro

JavaScript
9
star
14

pie

JavaScript
9
star
15

REST-MUC

An HTTP interface for creating, configuring, destroying rooms as well as inviting and kicking users.
Python
9
star
16

jsrogue-entity-component

Roguelike Component System in JavaScript ES6
JavaScript
9
star
17

gatepost

Node.js module for binding postgres queries to models.
JavaScript
8
star
18

SleekComponent

XMPP Component Framework for Sleek that includes presence and rosters.
Python
5
star
19

ecs-js-example

A classic roguelike example for the usage of fritzy/ecs-js
JavaScript
5
star
20

jsdice

JavaScript
5
star
21

paddle

You are up a creek; here is your Paddle. Paddle provides a way of ensuring that JS asynchronous callbacks are actually ran, or calls a provided error function upon timeout.
JavaScript
5
star
22

gh-watchmyself

Summarize which github repos you're watching and not.
JavaScript
4
star
23

github-cli-auth

Node github cli interface for authenticating, getting 2factor auth, and storing and retrieving the token.
JavaScript
4
star
24

tcgdevclub-oct2019jam

C#
3
star
25

padlock

An execution locking mechanism for Node.js
JavaScript
3
star
26

verymodel-level

JavaScript
3
star
27

Jorb

XMPP Pubsub Job Blather Extension
Ruby
2
star
28

level-dulcimer

Dulcimer's requirements for a level backend, all wrapped into one.
JavaScript
2
star
29

MissileOrders

JavaScript
2
star
30

level-atomichooks

Extensions hooks for levelup.
JavaScript
2
star
31

pgboom

A postgres error caster for Hapi
JavaScript
2
star
32

fritzy.github.com

Nathan Fritz's projects
JavaScript
2
star
33

level-foreignkeys

Add foreign key indexing to levelup.
JavaScript
1
star
34

posthole

Postgres Object Store ORM for Node.js
JavaScript
1
star
35

riakdown-indextotal

Get the index totals when using a riakdown backend with levelup.
JavaScript
1
star
36

level-bucket

Buckets for leveldb.
JavaScript
1
star
37

level-2i

Secondary indexes for leveldb.
JavaScript
1
star
38

level-bucketarray

JavaScript
1
star
39

dotfiles

Vim Script
1
star
40

level-streams

Useful read, transform, and write streams for working with levelup.
JavaScript
1
star
41

fritzy

1
star
42

goalpost

JavaScript
1
star
43

deputy

Local Key-Bucket and Directory Database
JavaScript
1
star
44

level-increment

Incrementer for level.
JavaScript
1
star
45

drboom-pg

DrBoom plugin for Postgresql errors.
JavaScript
1
star
46

level-continuation

JavaScript
1
star
47

xmastruck

xmas truck
JavaScript
1
star
48

riak-dulcimer

JavaScript
1
star
49

base60fill

Node.js left-fill base60 for lexicographically sorting numbers
JavaScript
1
star
50

riakdown-increment

increment access to riakdown
JavaScript
1
star
51

sqlmoses-oracle

JavaScript
1
star
52

gists.fritzy.io

gists blog posts
Makefile
1
star
53

verymodel-hapi

JavaScript
1
star