RPC Exceptions
Project description
Simple, transparent, name-spaced exceptions across JSON-RPC services.
Installing
The rpc_exceptions project lives on github, and is available via pip.
Installing v0.1 From Pip
sudo pip install rpc_exceptions==0.1
Installing v0.1 From Source
curl https://github.com/axialmarket/rpc_exceptions/achive/version_0.1.tar.gz | tar vzxf - cd rpc_exceptions sudo python setup.py install
Examples
Define a base exception with an api_name, exceptions for that API, and instantiate RPCExceptionHandler with those exceptions:
from rpc_exceptions import RPCExceptionHandler, WrappedRPCError
class TestError(WrappedRPCError):
api_name = 'test'
class PEBCAKError(TestError):
code = -1
_default_message = 'Problem exists between chair and keyboard'
class FUBARError(TestError):
code = -2
_default_message = 'FUBARed'
error_handler = RPCExceptionHandler([ PEBCAKError, FUBARError ])
Decorate exposed functions with the instantiated RPCExceptionHandler’s wrap_rpc_exception decorator:
from wrapped_rpc.exceptions import error_handler, PEBCAKError, FUBARError
@error_handler.wrap_rpc_exception
def fail1(arg):
raise PEBCAKError
@error_handler.wrap_rpc_exception
def fail2(arg):
raise FUBARError
Coerce error codes and messages to exceptions the instantiated RPCExceptionHandler’s get_exception_instance method:
#client using tinyrpc
from wrapped_rpc.exceptions import error_handler, PEBCAKError, FUBARError
from tinyrpc import RPCClient, RPCError
from tinyrpc.protocols.jsonrpc import JSONRPCProtocol
from tinyrpc.transports.http import HttpPostClientTransport
class WrappedRPCClient(RPCClient):
def __init__(self, protocol, transport, api_name):
self.protocol = protocol
self.transport = transport
self.api_name = api_name
def _send_and_handle_reply(self, req):
reply = self.transport.send_message(req.serialize())
response = self.protocol.parse_reply(reply)
if hasattr(response, 'error'):
try:
raise error_handler.get_exception_instance(
response._jsonrpc_error_code,
self.api_name, response.error)
except KeyError:
raise RPCError('Error calling remote procedure: %s' %\
response.error)
return response
rpc_client = WrappedRPCClient(
JSONRPCProtocol(),
HttpPostClientTransport('http://localhost:1234'),
'test'
)
server = rpc_client.get_proxy()
try:
server.fail1('foo')
except PEBCAKError as e:
print 'code: %s, message: %s' % (e.code, e.msg)
try:
server.fail2('bar')
except FUBARError as e:
print 'code: %s, message: %s' % (e.code, e.msg)
License
BSD, See LICENSE.txt
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
rpc_exceptions-0.1.tar.gz
(3.8 kB
view details)
File details
Details for the file rpc_exceptions-0.1.tar.gz.
File metadata
- Download URL: rpc_exceptions-0.1.tar.gz
- Upload date:
- Size: 3.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb40500c497014cccffc7fcbb1e274073eb10e8d79bf1cae62f65baed2114d63
|
|
| MD5 |
4b6a647b278cd97095ea505cb16159eb
|
|
| BLAKE2b-256 |
fa89cad1332eace9bf167cd13977aced8a4f7e486b9cd28fcc7a7ab711fb20e7
|