[Neo-report] r2688 jm - in /trunk/neo: lib/ tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Mar 23 12:10:30 CET 2011


Author: jm
Date: Wed Mar 23 12:10:30 2011
New Revision: 2688

Log:
Simplify EventHandler by removing 'error_dispatch_table'

Modified:
    trunk/neo/lib/handler.py
    trunk/neo/lib/logger.py
    trunk/neo/lib/protocol.py
    trunk/neo/tests/testProtocol.py

Modified: trunk/neo/lib/handler.py
==============================================================================
--- trunk/neo/lib/handler.py [iso-8859-1] (original)
+++ trunk/neo/lib/handler.py [iso-8859-1] Wed Mar 23 12:10:30 2011
@@ -26,7 +26,6 @@ class EventHandler(object):
 
     def __init__(self, app):
         self.app = app
-        self.error_dispatch_table = self.__initErrorDispatchTable()
 
     def __repr__(self):
         return self.__class__.__name__
@@ -62,7 +61,7 @@ class EventHandler(object):
             conn.abort()
             self.peerBroken(conn)
         except BrokenNodeDisallowedError:
-            conn.answer(Errors.Broken('go away'))
+            conn.answer(Errors.BrokenNode('go away'))
             conn.abort()
             self.connectionClosed(conn)
         except NotReadyError, message:
@@ -142,23 +141,10 @@ class EventHandler(object):
 
     def error(self, conn, code, message):
         try:
-            method = self.error_dispatch_table[code]
-            method(conn, message)
-        except ValueError:
+            getattr(self, Errors[code])(conn, message)
+        except (AttributeError, ValueError):
             raise UnexpectedPacketError(message)
 
-    def notReady(self, conn, message):
-        raise UnexpectedPacketError
-
-    def oidNotFound(self, conn, message):
-        raise UnexpectedPacketError
-
-    def oidDoesNotExist(self, conn, message):
-        raise UnexpectedPacketError
-
-    def tidNotFound(self, conn, message):
-        raise UnexpectedPacketError
-
     def protocolError(self, conn, message):
         # the connection should have been closed by the remote peer
         neo.lib.logging.error('protocol error: %s' % (message,))
@@ -174,21 +160,3 @@ class EventHandler(object):
 
     def ack(self, conn, message):
         neo.lib.logging.debug("no error message : %s" % (message))
-
-
-    # Fetch tables initialization
-
-    def __initErrorDispatchTable(self):
-        d = {}
-
-        d[ErrorCodes.ACK] = self.ack
-        d[ErrorCodes.NOT_READY] = self.notReady
-        d[ErrorCodes.OID_NOT_FOUND] = self.oidNotFound
-        d[ErrorCodes.OID_DOES_NOT_EXIST] = self.oidDoesNotExist
-        d[ErrorCodes.TID_NOT_FOUND] = self.tidNotFound
-        d[ErrorCodes.PROTOCOL_ERROR] = self.protocolError
-        d[ErrorCodes.BROKEN_NODE] = self.brokenNodeDisallowedError
-        d[ErrorCodes.ALREADY_PENDING] = self.alreadyPendingError
-
-        return d
-

Modified: trunk/neo/lib/logger.py
==============================================================================
--- trunk/neo/lib/logger.py [iso-8859-1] (original)
+++ trunk/neo/lib/logger.py [iso-8859-1] Wed Mar 23 12:10:30 2011
@@ -27,8 +27,6 @@ class PacketLogger(object):
     """ Logger at packet level (for debugging purpose) """
 
     def __init__(self):
-        _temp = EventHandler(None)
-        self.error_dispatch_table = _temp.error_dispatch_table
         self.enable(LOGGER_ENABLED)
 
     def enable(self, enabled):

Modified: trunk/neo/lib/protocol.py
==============================================================================
--- trunk/neo/lib/protocol.py [iso-8859-1] (original)
+++ trunk/neo/lib/protocol.py [iso-8859-1] Wed Mar 23 12:10:30 2011
@@ -1535,26 +1535,16 @@ class Packets(dict):
     NotifyTransactionFinished = register(
             0x003E, NotifyTransactionFinished)
 
-def register_error(code):
-    def wrapper(registry, message=''):
-        return Error(code, message)
-    return wrapper
-
-class ErrorRegistry(dict):
-    """
-        Error packet packet registry
-    """
-    def __init__(self):
-        dict.__init__(self)
-
-    Ack = register_error(ErrorCodes.ACK)
-    ProtocolError = register_error(ErrorCodes.PROTOCOL_ERROR)
-    TidNotFound = register_error(ErrorCodes.TID_NOT_FOUND)
-    OidNotFound = register_error(ErrorCodes.OID_NOT_FOUND)
-    OidDoesNotExist = register_error(ErrorCodes.OID_DOES_NOT_EXIST)
-    NotReady = register_error(ErrorCodes.NOT_READY)
-    Broken = register_error(ErrorCodes.BROKEN_NODE)
-    AlreadyPending = register_error(ErrorCodes.ALREADY_PENDING)
-
-Errors = ErrorRegistry()
+def Errors():
+    registry_dict = {}
+    handler_method_name_dict = {}
+    def register_error(code):
+        return lambda self, message='': Error(code, message)
+    for code, error in ErrorCodes.iteritems():
+        name = ''.join(part.capitalize() for part in str(error).split('_'))
+        registry_dict[name] = register_error(error)
+        handler_method_name_dict[code] = name[0].lower() + name[1:]
+    return type('ErrorRegistry', (dict,),
+                registry_dict)(handler_method_name_dict)
 
+Errors = Errors()

Modified: trunk/neo/tests/testProtocol.py
==============================================================================
--- trunk/neo/tests/testProtocol.py [iso-8859-1] (original)
+++ trunk/neo/tests/testProtocol.py [iso-8859-1] Wed Mar 23 12:10:30 2011
@@ -44,7 +44,7 @@ class ProtocolTests(NeoUnitTestBase):
         self.assertEqual(error_msg, "wait")
 
     def test_06_brokenNodeDisallowedError(self):
-        p = Errors.Broken("broken")
+        p = Errors.BrokenNode("broken")
         error_code, error_msg = p.decode()
         self.assertEqual(error_code, ErrorCodes.BROKEN_NODE)
         self.assertEqual(error_msg, "broken")




More information about the Neo-report mailing list