%global _empty_manifest_terminate_build 0
Name: python-wsrpc-aiohttp
Version: 4.0.1
Release: 1
Summary: WSRPC is the RPC over WebSocket for aiohttp
License: Apache Software License
URL: https://github.com/wsrpc/wsrpc-aiohttp
Source0: https://mirrors.nju.edu.cn/pypi/web/packages/37/b2/f0b31889e065a4fccb21aca7dd514a65dfba053c07c9bf4677301fdc83ea/wsrpc-aiohttp-4.0.1.tar.gz
BuildArch: noarch
Requires: python3-aiohttp
Requires: python3-yarl
Requires: python3-typing-extensions
Requires: python3-async-timeout
Requires: python3-coverage
Requires: python3-coveralls
Requires: python3-orjson
Requires: python3-nox
Requires: python3-pytest
Requires: python3-pytest-aiohttp
Requires: python3-pytest-cov
Requires: python3-requests
Requires: python3-sphinx
Requires: python3-tox
Requires: python3-async-timeout
Requires: python3-coverage
Requires: python3-coveralls
Requires: python3-orjson
Requires: python3-pytest
Requires: python3-pytest-aiohttp
Requires: python3-pytest-cov
%description
# WSRPC aiohttp
[![Github Actions](https://github.com/wsrpc/wsrpc-aiohttp/workflows/tests/badge.svg)](https://github.com/wsrpc/wsrpc-aiohttp/actions?query=branch%3Amaster)
[![Coveralls](https://coveralls.io/repos/github/wsrpc/wsrpc-aiohttp/badge.svg?branch=master)](https://coveralls.io/github/wsrpc/wsrpc-aiohttp?branch=master)
[![Latest Version](https://img.shields.io/pypi/v/wsrpc-aiohttp.svg)](https://pypi.python.org/pypi/wsrpc-aiohttp/)
[![python wheel](https://img.shields.io/pypi/wheel/wsrpc-aiohttp.svg)](https://pypi.python.org/pypi/wsrpc-aiohttp/)
[![Python Versions](https://img.shields.io/pypi/pyversions/wsrpc-aiohttp.svg)](https://pypi.python.org/pypi/wsrpc-aiohttp/)
[![license](https://img.shields.io/pypi/l/wsrpc-aiohttp.svg)](https://pypi.python.org/pypi/wsrpc-aiohttp/)
Easy to use minimal WebSocket Remote Procedure Call library for aiohttp
servers.
See [online demo](https://demo.wsrpc.info/) and
[documentation](https://docs.wsrpc.info/) 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](https://pypi.python.org/pypi/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](https://www.npmjs.com/package/@wsrpc/client) using npm:
npm install @wsrpc/client
## Usage
Backend code:
``` python
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:
``` HTML
```
## Versioning
This software follows [Semantic Versioning](http://semver.org/)
%package -n python3-wsrpc-aiohttp
Summary: WSRPC is the RPC over WebSocket for aiohttp
Provides: python-wsrpc-aiohttp
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-pip
%description -n python3-wsrpc-aiohttp
# WSRPC aiohttp
[![Github Actions](https://github.com/wsrpc/wsrpc-aiohttp/workflows/tests/badge.svg)](https://github.com/wsrpc/wsrpc-aiohttp/actions?query=branch%3Amaster)
[![Coveralls](https://coveralls.io/repos/github/wsrpc/wsrpc-aiohttp/badge.svg?branch=master)](https://coveralls.io/github/wsrpc/wsrpc-aiohttp?branch=master)
[![Latest Version](https://img.shields.io/pypi/v/wsrpc-aiohttp.svg)](https://pypi.python.org/pypi/wsrpc-aiohttp/)
[![python wheel](https://img.shields.io/pypi/wheel/wsrpc-aiohttp.svg)](https://pypi.python.org/pypi/wsrpc-aiohttp/)
[![Python Versions](https://img.shields.io/pypi/pyversions/wsrpc-aiohttp.svg)](https://pypi.python.org/pypi/wsrpc-aiohttp/)
[![license](https://img.shields.io/pypi/l/wsrpc-aiohttp.svg)](https://pypi.python.org/pypi/wsrpc-aiohttp/)
Easy to use minimal WebSocket Remote Procedure Call library for aiohttp
servers.
See [online demo](https://demo.wsrpc.info/) and
[documentation](https://docs.wsrpc.info/) 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](https://pypi.python.org/pypi/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](https://www.npmjs.com/package/@wsrpc/client) using npm:
npm install @wsrpc/client
## Usage
Backend code:
``` python
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:
``` HTML
```
## Versioning
This software follows [Semantic Versioning](http://semver.org/)
%package help
Summary: Development documents and examples for wsrpc-aiohttp
Provides: python3-wsrpc-aiohttp-doc
%description help
# WSRPC aiohttp
[![Github Actions](https://github.com/wsrpc/wsrpc-aiohttp/workflows/tests/badge.svg)](https://github.com/wsrpc/wsrpc-aiohttp/actions?query=branch%3Amaster)
[![Coveralls](https://coveralls.io/repos/github/wsrpc/wsrpc-aiohttp/badge.svg?branch=master)](https://coveralls.io/github/wsrpc/wsrpc-aiohttp?branch=master)
[![Latest Version](https://img.shields.io/pypi/v/wsrpc-aiohttp.svg)](https://pypi.python.org/pypi/wsrpc-aiohttp/)
[![python wheel](https://img.shields.io/pypi/wheel/wsrpc-aiohttp.svg)](https://pypi.python.org/pypi/wsrpc-aiohttp/)
[![Python Versions](https://img.shields.io/pypi/pyversions/wsrpc-aiohttp.svg)](https://pypi.python.org/pypi/wsrpc-aiohttp/)
[![license](https://img.shields.io/pypi/l/wsrpc-aiohttp.svg)](https://pypi.python.org/pypi/wsrpc-aiohttp/)
Easy to use minimal WebSocket Remote Procedure Call library for aiohttp
servers.
See [online demo](https://demo.wsrpc.info/) and
[documentation](https://docs.wsrpc.info/) 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](https://pypi.python.org/pypi/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](https://www.npmjs.com/package/@wsrpc/client) using npm:
npm install @wsrpc/client
## Usage
Backend code:
``` python
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:
``` HTML
```
## Versioning
This software follows [Semantic Versioning](http://semver.org/)
%prep
%autosetup -n wsrpc-aiohttp-4.0.1
%build
%py3_build
%install
%py3_install
install -d -m755 %{buildroot}/%{_pkgdocdir}
if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
pushd %{buildroot}
if [ -d usr/lib ]; then
find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/lib64 ]; then
find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/bin ]; then
find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/sbin ]; then
find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
fi
touch doclist.lst
if [ -d usr/share/man ]; then
find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
fi
popd
mv %{buildroot}/filelist.lst .
mv %{buildroot}/doclist.lst .
%files -n python3-wsrpc-aiohttp -f filelist.lst
%dir %{python3_sitelib}/*
%files help -f doclist.lst
%{_docdir}/*
%changelog
* Wed May 31 2023 Python_Bot - 4.0.1-1
- Package Spec generated