%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