How to remove xmpp.process()#

Starting from slixmpp 1.8.0, running process() on an XMLStream/ClientXMPP/ComponentXMPP instance is deprecated, and starting from 1.9.0, it will be removed.

Why#

This has been the usual way of running an application using SleekXMPP/slixmpp for ages, but it has come at a price: people do not understand how they should run their application without it, or how to integrate their slixmpp code with the rest of their asyncio application.

In essence, process() is only a very thin wrapper around asyncio loop functions:

if timeout is None:
    if forever:
        self.loop.run_forever()
    else:
        self.loop.run_until_complete(self.disconnected)
else:
    tasks: List[Future] = [asyncio.sleep(timeout)]
    if not forever:
        tasks.append(self.disconnected)
    self.loop.run_until_complete(asyncio.wait(tasks))

How#

Hence it can be replaced according to what you want your application to do:

  • To run forever, loop.run_forever() will work just fine

  • To run until disconnected, loop.run_until_complete(xmpp.disconnected) will be enough (XMLStream.disconnected is an future which result is set when the stream gets disconnected.

  • To run for a scheduled time (and still abort when disconnected):

tasks = [asyncio.sleep(timeout)]
tasks.append(xmpp.disconnected)
loop.run_until_complete(asyncio.wait(tasks))

There is no magic at play here and anything is possible if a more flexible execution scheme is expected.