Skip to main content

WSRPC aiohttp

Github Actions

Coveralls

Latest Version

python wheel

Python Versions

license

Easy to use minimal WebSocket Remote Procedure Call library for aiohttp servers.

See online demo and documentation with examples.

Features

  • Call server functions from the client side;
  • Call client functions from the server (for example to notify clients about events);
  • Async connection protocol: both server or client are able to call several functions and get responses as soon as each response would be ready in any order.
  • Fully async server-side functions;
  • Transfer any exceptions from a client side to the server side and vise versa;
  • Ready-to-use frontend-library without dependencies;
  • Thread-based websocket handler for writing fully-synchronous backend code (for synchronous database drivers etc.)
  • Protected server-side methods (cliens are not able to call methods, starting with underline directly);
  • Signals for introspection

Installation

Install via pip:

pip install wsrpc-aiohttp

You may want to install optional ujson library to speedup message serialization/deserialization:

pip install ujson

Python module provides client js library out of the box. But for pure javascript applications you can install standalone js client library using npm:

npm install @wsrpc/client

Usage

Backend code:

import logging
from time import time

import aiohttp.web
from wsrpc_aiohttp import Route, STATIC_DIR, WebSocketRoute, decorators


log = logging.getLogger(__name__)


# This class can be called by client.
# Connection object will have this class instance after calling route-alias.
class TestRoute(Route):
    # This method will be executed when client calls route-alias
    # for the first time.
    def init(self, **kwargs):
        # Python __init__ must be return "self".
        # This method might return anything.
        return kwargs

    # This method named by camelCase because the client can call it.
    @decorators.proxy
    async def getEpoch(self):

        # You can execute functions on the client side
        await self.do_notify()

        return time()

    # This method calls function on the client side
    @decorators.proxy
    async def do_notify(self):
        awesome = 'Somebody executed test1.getEpoch method!'
        await self.socket.call('notify', result=awesome)


app = aiohttp.web.Application()
app.router.add_route("*", "/ws/", WebSocketAsync)  # Websocket route
app.router.add_static('/js', STATIC_DIR)  # WSRPC js library
app.router.add_static('/', ".")  # Your static files

# Stateful request
# This is the route alias TestRoute as "test1"
WebSocketAsync.add_route('test1', TestRoute)

# Stateless request
WebSocketAsync.add_route('test2', lambda *a, **kw: True)


if __name__ == '__main__':
    logging.basicConfig(level=logging.DEBUG)
    aiohttp.web.run_app(app, port=8000)

Frontend code:

<script type="text/javascript" src="/js/wsrpc.min.js"></script>
<script>
    var url = (window.location.protocol==="https):"?"wss://":"ws://") + window.location.host + '/ws/';
    RPC = new WSRPC(url, 8000);

    // Configure client API, that can be called from server
    RPC.addRoute('notify', function (data) {
        console.log('Server called client route "notify":', data);
        return data.result;
    });
    RPC.connect();

    // Call stateful route
    // After you call that route, server would execute 'notify' route on the
    // client, that is registered above.
    RPC.call('test1.getEpoch').then(function (data) {
        console.log('Result for calling server route "test1.getEpoch": ', data);
    }, function (error) {
        alert(error);
    });

    // Call stateless method
    RPC.call('test2').then(function (data) {
        console.log('Result for calling server route "test2"', data);
    });
</script>

Build

Just run

```bash
poetry run nox
```

Versioning

This software follows Semantic Versioning

Metadata

Release files for wsrpc-aiohttp 4.0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for wsrpc-aiohttp 4.0.4
File Size Uploaded
wsrpc_aiohttp-4.0.4.tar.gz 19.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for wsrpc-aiohttp 4.0.4
File Interpreter ABI Platform
wsrpc_aiohttp-4.0.4-py3-none-any.whl Python 3 none any Details

Total release size: 41.8 kB

Release files / wsrpc_aiohttp-4.0.4.tar.gz

Download URL wsrpc_aiohttp-4.0.4.tar.gz
Size 19.3 kB
Tags Source
SHA-256 checksum
How to use checksums
10c1364d254bd48b8206b63bb4b40ed285c99a2679664b7ed034526592e11437
BLAKE2b-256 checksum
How to use checksums
1ea8514ee243a5c206fc5da8a702d64a6cc7c749342df6ce8da9c078796b06d4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.2 CPython/3.11.7 Darwin/24.4.0

Release files / wsrpc_aiohttp-4.0.4-py3-none-any.whl

Download URL wsrpc_aiohttp-4.0.4-py3-none-any.whl
Size 22.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
816a667e592a57d26879ac81d6b1d748c5058592b14f5a60c6a9bb9eaf8ad0a3
BLAKE2b-256 checksum
How to use checksums
ff9a27f6d918aec00eb77af95eb627f5d988403d55893883f6a28babdb989320
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.2 CPython/3.11.7 Darwin/24.4.0

Release history Release notifications | RSS feed

This release

4.0.4 This release

2 release files

4.0.3

2 release files

4.0.2

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.2.0

2 release files

3.1.2

2 release files

3.1.1

2 release files

3.1.0

2 release files

3.0.1

1 release file

3.0.0

2 release files

2.6.0

2 release files

2.5.0

2 release files

2.4.4

2 release files

2.4.3

2 release files

2.4.2

2 release files

2.4.1

2 release files

2.4.0

2 release files

2.3.1

2 release files

2.2.2

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.2

2 release files

2.1.0

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.0.2

2 release files

1.0.1

1 release file

1.0.0

1 release file

0.9.0

1 release file

0.8.0

2 release files

0.7.2

1 release file

0.7.1

1 release file

0.7.0

2 release files

0.6.6

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

1 release file

0.6.2

1 release file

0.6.1

2 release files

0.6.0

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.4

2 release files

0.3.0

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.1

2 release files

0.0.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page