Package: tinyrpc
NoteTinyrpc has been revised.The current version will support Python3 only.
Have a look at the 0.9.x version if you need Python2 support.
Python2 support will be dropped completely when Python2 retires,
somewhere in 2020.MotivationAs of this writing (in Jan 2013) there are a fewjsonrpclibraries already out
there onPyPI, most of them handling one specific use case (e.g. json via
WSGI, using Twisted, or TCP-sockets).None of the libraries, however, makes it easy to reuse thejsonrpc-parsing bits
and substitute a different transport (i.e. going fromjsonviaTCPto an
implementation usingWebSocketsor0mq).In the end, all these libraries have their own dispatching interfaces and a
custom implementation of handlingjsonrpc.  Today (march 2019) that hasn’t changed.tinyrpcaims to do better by dividing the problem into cleanly
interchangeable parts that allow easy addition of new transport methods, RPC
protocols or dispatchers.Example:To create a server process receiving and handling JSONRPC requests do:importgeventimportgevent.pywsgiimportgevent.queuefromtinyrpc.protocols.jsonrpcimportJSONRPCProtocolfromtinyrpc.transports.wsgiimportWsgiServerTransportfromtinyrpc.server.geventimportRPCServerGreenletsfromtinyrpc.dispatchimportRPCDispatcherdispatcher=RPCDispatcher()transport=WsgiServerTransport(queue_class=gevent.queue.Queue)# start wsgi server as a background-greenletwsgi_server=gevent.pywsgi.WSGIServer(('127.0.0.1',5000),transport.handle)gevent.spawn(wsgi_server.serve_forever)rpc_server=RPCServerGreenlets(transport,JSONRPCProtocol(),dispatcher)@dispatcher.publicdefreverse_string(s):returns[::-1]# in the main greenlet, run our rpc_serverrpc_server.serve_forever()The corresponding client code looks like:fromtinyrpc.protocols.jsonrpcimportJSONRPCProtocolfromtinyrpc.transports.httpimportHttpPostClientTransportfromtinyrpcimportRPCClientrpc_client=RPCClient(JSONRPCProtocol(),HttpPostClientTransport('http://127.0.0.1:5000/'))remote_server=rpc_client.get_proxy()# call a method called 'reverse_string' with a single string argumentresult=remote_server.reverse_string('Hello, World!')print("Server answered:",result)DocumentationYou’ll quickly find thattinyrpchas more documentation and tests than core
code, hence the name. See the documentation at
<https://tinyrpc.readthedocs.org> for more details, especially the
Structure-section to get a birds-eye view.Installationpipinstalltinyrpcwill installtinyrpcwith its default dependencies.Optional dependenciesDepending on the protocols and transports you want to use additional dependencies
are required. You can instruct pip to install these dependencies by specifying
extras to the basic install command.pipinstalltinyrpc[httpclient,wsgi]will installtinyrpcwith dependencies for the httpclient and wsgi transports.Available extras are:OptionNeeded to use objects of classgeventoptional in RPCClient, required by RPCServerGreenletshttpclientHttpPostClientTransport, HttpWebSocketClientTransportmsgpackimplements MSGPACKRPCProtocoljsonextoptional in JSONRPCProtocolrabbitmqRabbitMQServerTransport, RabbitMQClientTransportwebsocketWSServerTransportwsgiWsgiServerTransportzmqZmqServerTransport, ZmqClientTransportNew in version 1.1.0Tinyrpc supports RabbitMQ has transport medium.New in version 1.0.4Tinyrpc now supports the MSGPACK RPC protocol in addition to JSON-RPC.