Skip to content

DinoThor/PyJabber

Repository files navigation

PyJabber

Python 3.8 to 3.12

Build Status Coverage Status

Code lines counter

Documentation Status Monthly downloads Total downloads

PyJabber is a server for Jabber/XMPP entirely written in Python, with minimal reliance on external libraries.
It strives to provide a simple, lightweight, and comprehensible codebase, featuring a modular structure that facilitates extension through the implementation of necessary XEPs for specific use cases.
While initially designed to fulfill the requirements of the multi-agent system SPADE, it can be easily customized to suit any other purpose.

Installation

pip install pyjabber

Quick start

Python program

The process of starting the server returns a coroutine, leaving it to the user to set up the required environment. The simplest approach is to use the asyncio.run function.

from pyjabber import Server

my_server = Server()
asyncio.run(my_server.start())

This allows PyJabber to be treated as a regular task and integrated seamlessly into an asynchronous application.

import asyncio
from pyjabber.server import Server

async def counter():
  while True:
    await asyncio.sleep(1)
    print(f"Hello World")

async def launch():
  my_server = Server()
  await asyncio.gather(my_server.start(), counter())

asyncio.run(launch())

CLI

The CLI launcher provides access to all the configuration options available in the programmatic version (when launched from a Python script).

$ pyjabber --help
Usage: python -m pyjabber [OPTIONS]

 Options:
   --host TEXT                Host name  [default: localhost]
   --client_port INTEGER      Server-to-client port  [default: 5222]
   --server_port INTEGER      Server-to-server port  [default: 5269]
   --server_out_port INTEGER  Server-to-server port (Out coming connection)
                              [default: 5269]
   --family [ipv4|ipv6]       (ipv4 / ipv6)  [default: ipv4]
   --timeout INTEGER          Timeout for connection  [default: 60]
   --database_path TEXT       Path for database file  [default: */pyjabber.db]
   --database_purge           Restore database file to default state (empty)
   --database_in_memory       Database in memory. The data will be erased after
                              server shutdown
   --message_persistence      Keep the unsent messages in memory waiting for
                              the receiver client to connect
   -v, --verbose              Show verbose debug level: -v INFO -vv DEBUG, -vvv
                              level TRACE,
   --log_path TEXT            Path to log dumpfile
   -D, --debug                Enables debug mode in Asyncio
   --help                     Show this message and exit.

And to launch a default profile

$ pyjabber
2024-12-18 09:03:22.880 - INFO: Starting server...
2024-12-18 09:03:22.881 - INFO: Client domain => localhost
2024-12-18 09:03:22.881 - INFO: Server is listening clients on [('127.0.0.1', 5222), ('158.42.155.44', 5222)]
2024-12-18 09:03:22.881 - INFO: Serving admin webpage on http://localhost:9090
2024-12-18 09:03:22.881 - INFO: Server is listening servers on [('0.0.0.0', 5269)]
2024-12-18 09:03:22.881 - INFO: Server started...

Features

  Status Description
TLS Implemented v1.3. Localhost certificate included
SASL Implemented PLAIN, EXTERNAL (s2s)
Roster Implemented CRUD avaliable
Presence Implemented (local bound) Subscribe, Unsubscribed, Initial presence and Unavailable

Plugins

  Status Description
XEP-0004 IMPLEMENTED Dataforms
XEP-0030 IMPLEMENTED Service Discovery
XEP-0060 IMPLEMENTED Pubsub
XEP-0077 IMPLEMENTED In Band Registration
XEP-0199 IMPLEMENTED Ping

Packages

No packages published

Contributors 2

  •  
  •