XConn
Real-time application development framework for Python. XConn enables backend APIs that are FAST, support PubSub and are secure.
Getting started
Install xconn from pypi
om26er@Home-PC:~$ uv venv
om26er@Home-PC:~$ uv pip install git+ssh://git@github.com/xconnio/xconn-python.git
om26er@Home-PC:~$ source .venv/bin/activate
(xconn-python) om26er@Home-PC:~$
Save the below code in sample.py
from xconn import App
app = App()
@app.register("io.xconn.hello")
async def my_procedure(first_name: str, last_name: str, age: int):
print(first_name + " " + last_name + " " + str(age))
return first_name, last_name, age
@app.subscribe("io.xconn.publish")
async def my_topic():
print("received event...")
run the app with xcorn command (note: this automatically starts the debug router)
(xconn-python) om26er@Home-PC:~$ xcorn sample:app --start-router
starting server on 127.0.0.1:8080
connected realm1
Registered procedure io.xconn.hello
Subscribed topic io.xconn.publish
Client
This library provides two types of clients:
Clientfor synchronous operations.AsyncClientfor asynchronous operations.
Sync Client
from xconn.session import Session
from xconn.client import connect_anonymous
session: Session = connect_anonymous("ws://localhost:8080/ws", "realm1")
Once the session is established, you can perform WAMP actions. Below are examples of all four WAMP operations:
Subscribe to a topic
from xconn.types import Event
from xconn.session import Session
def example_subscribe(session: Session):
session.subscribe("io.xconn.example", event_handler)
print("Subscribed to topic 'io.xconn.example'")
def event_handler(event: Event):
print(f"Event Received: args={event.args}, kwargs={event.kwargs}, details={event.details}")
Publish to a topic
from xconn.session import Session
def example_publish(session: Session):
session.publish("io.xconn.example", ["test"])
print("Published to topic io.xconn.example")
Register a procedure
from xconn.session import Session
from xconn.types import Invocation
def example_register(session: Session):
session.register("io.xconn.example", invocation_handler)
def invocation_handler(invocation: Invocation):
print(f"Received args={invocation.args}, kwargs={invocation.kwargs}, details={invocation.details}")
Call a procedure
from xconn.session import Session
def example_call(session: Session):
result = session.call("io.xconn.example", ["1", "2"], {"key": "value"})
print(f"Received args={result.args}, kwargs={result.kwargs}, details={result.details}")
Authentication
Authentication is straightforward.
Ticket Auth
from xconn.session import Session
from xconn.client import connect_ticket
session: Session = connect_ticket("ws://localhost:8080/ws", "realm1", "authid", "ticket")
Challenge Response Auth
from xconn.session import Session
from xconn.client import connect_wampcra
session: Session = connect_wampcra("ws://localhost:8080/ws", "realm1", "authid", "secret")
Cryptosign Auth
from xconn.session import Session
from xconn.client import connect_cryptosign
session: Session = connect_cryptosign("ws://localhost:8080/ws", "realm1", "authid", "d850fff4ff199875c01d3e652e7205309dba2f053ae813c3d277609150adff13")
Async Client
from xconn import run
from xconn.async_session import AsyncSession
from xconn.async_client import connect_anonymous
async def main():
session: AsyncSession = await connect_anonymous("ws://localhost:8080/ws", "realm1")
if __name__ == "__main__":
run(main())
Once the session is established, you can perform WAMP actions. Below are examples of all 4 WAMP operations:
Subscribe to a topic
from xconn.types import Event
from xconn.async_session import AsyncSession
async def example_subscribe(session: AsyncSession):
await session.subscribe("io.xconn.example", event_handler)
print("Subscribed to topic 'io.xconn.example'")
async def event_handler(event: Event):
print(f"Event Received: args={event.args}, kwargs={event.kwargs}, details={event.details}")
Publish to a topic
from xconn.async_session import AsyncSession
async def example_publish(session: AsyncSession):
await session.publish("io.xconn.example", ["test"])
print("Published to topic io.xconn.example")
Register a procedure
from xconn.types import Invocation
from xconn.async_session import AsyncSession
async def example_register(session: AsyncSession):
await session.register("io.xconn.example", invocation_handler)
async def invocation_handler(invocation: Invocation):
print(f"Received args={invocation.args}, kwargs={invocation.kwargs}, details={invocation.details}")
Call a procedure
from xconn.async_session import AsyncSession
async def example_call(session: AsyncSession):
result = await session.call("io.xconn.example", ["1", "2"], {"key": "value"})
print(f"Received args={result.args}, kwargs={result.kwargs}, details={result.details}")
Authentication
Authentication is straightforward.
Ticket Auth
from xconn import run
from xconn.async_session import AsyncSession
from xconn.async_client import connect_ticket
async def connect():
session: AsyncSession = await connect_ticket("ws://localhost:8080/ws", "realm1", "authid", "ticket")
if __name__ == "__main__":
run(connect())
Challenge Response Auth
from xconn import run
from xconn.async_session import AsyncSession
from xconn.async_client import connect_wampcra
async def connect():
session: AsyncSession = await connect_wampcra("ws://localhost:8080/ws", "realm1", "authid", "secret")
if __name__ == "__main__":
run(connect())
Cryptosign Auth
from xconn import run
from xconn.async_session import AsyncSession
from xconn.async_client import connect_cryptosign
async def connect():
session: AsyncSession = await connect_cryptosign("ws://localhost:8080/ws", "realm1", "authid", "d850fff4ff199875c01d3e652e7205309dba2f053ae813c3d277609150adff13")
if __name__ == "__main__":
run(connect())
look at examples directory for more examples
Metadata
Release files for xconn 0.5.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| xconn-0.5.1.tar.gz | 32.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| xconn-0.5.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 70.0 kB
Release files / xconn-0.5.1.tar.gz
| Download URL | xconn-0.5.1.tar.gz |
|---|---|
| Size | 32.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
583ba348f87b8970343f497397f0d86a22c9d4b2feadad522659b9aee17be4ec
|
|
BLAKE2b-256 checksum How to use checksums |
7f0bc1efea25cab539f86f9f304111ebad0c1fb5954639350270210f00296b1e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.10
|
Release files / xconn-0.5.1-py3-none-any.whl
| Download URL | xconn-0.5.1-py3-none-any.whl |
|---|---|
| Size | 37.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
87413dd5a0637248989fd89d7bc2cb2de16909e47959b8c973acb837800f5b10
|
|
BLAKE2b-256 checksum How to use checksums |
613b86475fb1b0980213684bfe75eff853ae86538a61db64c1ac26b66826eab1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.10
|
Security for xconn 0.5.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.