Metadata-Version: 1.1
Name: aiohttp_jrpc
Version: 0.1.0
Summary: JSON RPC protocol for aiohttp.web (http server for asyncio)
Home-page: https://github.com/zloidemon/aiohttp_jrpc/
Author: Veniamin Gvozdikov
Author-email: g.veniamin@googlemail.com
License: BSD
Description: aiohttp_jrpc
        ============
        .. image:: https://travis-ci.org/zloidemon/aiohttp_jrpc.svg?branch=master
            :target: https://travis-ci.org/zloidemon/aiohttp_jrpc
        .. image:: https://coveralls.io/repos/zloidemon/aiohttp_jrpc/badge.svg
            :target: https://coveralls.io/r/zloidemon/aiohttp_jrpc
        .. image:: https://badge.fury.io/py/aiohttp_jrpc.svg
            :target: https://badge.fury.io/py/aiohttp_jrpc
        
        jsonrpc_ protocol implementation for `aiohttp.web`__.
        
        __ aiohttp_web_
        
        
        Example server
        --------------
        
        .. code:: python
        
            import asyncio
            from aiohttp import web
            from aiohttp_jrpc import Service, JError, jrpc_errorhandler_middleware
        
            SCH = {
                "type": "object",
                "properties": {
                    "data": {"type": "string"},
                },
            }
        
            @asyncio.coroutine
            def custom_errorhandler_middleware(app, handler):
                @asyncio.coroutine
                def middleware(request):
                    try:
                        return (yield from handler(request))
                    except Exception:
                        """ Custom errors: -32000 to -32099 """
                        return JError().custom(-32000, "Example error")
                return middleware
        
            class MyJRPC(Service):
                @Service.valid(SCH)
                def hello(self, ctx, data):
                    if data["data"] == "hello":
                        return {"status": "hi"}
                    return {"status": data}
        
                def error(self, ctx, data):
                    raise Exception("Error which will catch middleware")
        
                def no_valid(self, ctx, data):
                    """ Method without validation incommig data """
                    return {"status": "ok"}
        
            @asyncio.coroutine
            def init(loop):
                app = web.Application(loop=loop, middlewares=[jrpc_errorhandler_middleware])
                #app = web.Application(loop=loop, middlewares=[custom_errorhandler_middleware])
                app.router.add_route('POST', "/api", MyJRPC)
        
                srv = yield from loop.create_server(app.make_handler(),
                                                    "127.0.0.1", 8080)
                print("Server started at http://127.0.0.1:8080")
                return srv
        
            loop = asyncio.get_event_loop()
            loop.run_until_complete(init(loop))
            try:
                loop.run_forever()
            except KeyboardInterrupt:
                pass
        
        Example client
        --------------
        
        .. code:: python
        
            import asyncio
            import aiohttp
            from aiohttp_jrpc import Client,InvalidResponse
        
            Remote = Client('http://localhost:8080/api')
        
            @asyncio.coroutine
            def rpc_call():
                try:
                    rsp = yield from Remote.request('hello', {'data': 'hello'})
                    return rsp
                except InvalidResponse as err:
                    return err
                except Exception as err:
                    return err
                return False
        
            loop = asyncio.get_event_loop()
            content = loop.run_until_complete(rpc_call())
            print(content.result)
            loop.close()
        
        License
        -------
        
        ``aiohttp_jrpc`` BSD license.
        
        
        .. _jsonrpc: http://www.jsonrpc.org/specification
        .. _aiohttp_web: http://aiohttp.readthedocs.org/en/latest/web.html
        
        CHANGES
        =======
        
        0.1.0 (2016-02-20)
        
        * Added client and tests
        * Changed BSD v3 to BSD v2 license
        
        0.0.3 (2015-10-27)
        
        * Fix messages of protocol errors
        * Fix tests and add tests for custom errors
        * Fix example bugs
        * Added custom middleware to example for handle errors
        
        0.0.2 (2015-10-22)
        
        * Added middleware to catch exceptions
        * Testing internal error
        
        0.0.1 (2015-10-18)
        
        * Init release
        
        Credits
        =======
        
        ``aiohttp_jrpc`` is written by `Veniamin Gvozdikov <https://github.com/zloidemon>`_.
        
        Contributors
        ------------
        
        - `latyas(懒) <https://github.com/ly0>`_
        
        Please add yourself here alphabetically when you submit your first pull request.
Keywords: aiohttp jsonrpc rpc
Platform: any
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python
Classifier: Topic :: Internet :: WWW/HTTP
