From f4b653ffbed09fb4669ace7563f76af8604ae6ec Mon Sep 17 00:00:00 2001 From: Antoine Millet Date: Mon, 3 Oct 2011 18:39:09 +0200 Subject: [PATCH] Now raise an exception when protocols are used in fallback mode --- sjrpc/core/exceptions.py | 8 ++++++++ sjrpc/core/rpcconnection.py | 12 +++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/sjrpc/core/exceptions.py b/sjrpc/core/exceptions.py index 5b2aa53..97e25fb 100644 --- a/sjrpc/core/exceptions.py +++ b/sjrpc/core/exceptions.py @@ -31,3 +31,11 @@ class NoFreeLabelError(Exception): Exception raised when no more free labels are available for protocol allocation. ''' + + +class FallbackModeEnabledError(Exception): + + ''' + Exception raised when a feature which is not compatible with fallback mode + is used. + ''' diff --git a/sjrpc/core/rpcconnection.py b/sjrpc/core/rpcconnection.py index 17f2a11..2ea587e 100644 --- a/sjrpc/core/rpcconnection.py +++ b/sjrpc/core/rpcconnection.py @@ -12,7 +12,8 @@ import socket import logging from sjrpc.core.protocols import Protocol, RpcProtocol, TunnelProtocol -from sjrpc.core.exceptions import RpcError, NoFreeLabelError +from sjrpc.core.exceptions import (RpcError, NoFreeLabelError, + FallbackModeEnabledError) import pyev @@ -62,6 +63,9 @@ class RpcConnection(object): self._sock = sock sock.setblocking(False) + # Initialization requires fallback mode disabled: + self.fallback = False + # Get the pyev loop: if loop is None: self.loop = pyev.default_loop() @@ -294,6 +298,9 @@ class RpcConnection(object): ''' Register a new protocol for the specified label. ''' + if self.fallback: + raise FallbackModeEnabledError('Fallback mode is not compatible ' + 'with protocols') if label is None: for label in xrange(0, RpcConnection.MAX_LABEL): if label not in self._protocols: @@ -312,6 +319,9 @@ class RpcConnection(object): Unregister the specified protocol label for this connection. ''' + if self.fallback: + raise FallbackModeEnabledError('Fallback mode is not compatible ' + 'with protocols') if label in self._protocols and label != 0: del self._protocols[label] else: -- GitLab