diff options
Diffstat (limited to 'python-wsrpc-aiohttp.spec')
-rw-r--r-- | python-wsrpc-aiohttp.spec | 546 |
1 files changed, 546 insertions, 0 deletions
diff --git a/python-wsrpc-aiohttp.spec b/python-wsrpc-aiohttp.spec new file mode 100644 index 0000000..9c1b101 --- /dev/null +++ b/python-wsrpc-aiohttp.spec @@ -0,0 +1,546 @@ +%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 + +[](https://github.com/wsrpc/wsrpc-aiohttp/actions?query=branch%3Amaster) + +[](https://coveralls.io/github/wsrpc/wsrpc-aiohttp?branch=master) + +[](https://pypi.python.org/pypi/wsrpc-aiohttp/) + +[](https://pypi.python.org/pypi/wsrpc-aiohttp/) + +[](https://pypi.python.org/pypi/wsrpc-aiohttp/) + +[](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 +<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> +``` + +## 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 + +[](https://github.com/wsrpc/wsrpc-aiohttp/actions?query=branch%3Amaster) + +[](https://coveralls.io/github/wsrpc/wsrpc-aiohttp?branch=master) + +[](https://pypi.python.org/pypi/wsrpc-aiohttp/) + +[](https://pypi.python.org/pypi/wsrpc-aiohttp/) + +[](https://pypi.python.org/pypi/wsrpc-aiohttp/) + +[](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 +<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> +``` + +## 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 + +[](https://github.com/wsrpc/wsrpc-aiohttp/actions?query=branch%3Amaster) + +[](https://coveralls.io/github/wsrpc/wsrpc-aiohttp?branch=master) + +[](https://pypi.python.org/pypi/wsrpc-aiohttp/) + +[](https://pypi.python.org/pypi/wsrpc-aiohttp/) + +[](https://pypi.python.org/pypi/wsrpc-aiohttp/) + +[](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 +<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> +``` + +## 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 <Python_Bot@openeuler.org> - 4.0.1-1 +- Package Spec generated |