XMPP and Python
Don't seem to be any solid, reliable, full-featured Python XMPP servers.
Even the clients don't seem all that solid, except for SleekXMPP.
Google Cloud
https://cloud.google.com/appengine/docs/python/xmpp/ - Google Cloud
https://www.google.com/#q=python+messaging
See GoogleCloud
Clients
SleekXMPP
From examples on pypi
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('somejid@example.com', 'use_getpass') xmpp.connect() xmpp.process(block=True)
Python Qpid
https://qpid.apache.org/releases/qpid-0.20/messaging-api/python/examples/index.html - Python and Qpid
Code segment from https://qpid.apache.org/releases/qpid-0.20/messaging-api/python/examples/drain.html:
... def __getitem__(self, st): return eval(st, self.environ) ...
Hoo boy ...
See JavaServers#Qpid
See
PythonTwistdServer#TwistdXMPPRouter