diff options
author | elie <elie> | 2011-02-11 20:40:36 +0000 |
---|---|---|
committer | elie <elie> | 2011-02-11 20:40:36 +0000 |
commit | 273c1f5fa733dd53fa1f85a2564bcf6f2c1192e4 (patch) | |
tree | 78d814d90d4c49024b1aa6c4e371cc5829b9c9c0 | |
parent | df87291af134ac51b7cee8cba499f3c14d52d045 (diff) | |
download | pysnmp-273c1f5fa733dd53fa1f85a2564bcf6f2c1192e4.tar.gz |
sync versions of oneliner apps split off async implementation for clarity
-rw-r--r-- | CHANGES | 3 | ||||
-rw-r--r-- | examples/v3arch/oneliner/manager/async/nextgen.py | 4 | ||||
-rw-r--r-- | pysnmp/entity/rfc3413/oneliner/cmdgen.py | 62 | ||||
-rw-r--r-- | pysnmp/entity/rfc3413/oneliner/ntforg.py | 18 |
4 files changed, 61 insertions, 26 deletions
@@ -8,7 +8,8 @@ Revision 4.1.16a - Fix to v1.TrapPDUAPI.getVarBinds() to address PDU component at the right position. - Internal caches structure improved. -- changes towards performance improvement: +- Sync versions of oneliner apps split off async implementation for clarity. +- Changes towards performance improvement: + all dict.has_key() & dict.get() invocations replaced with modern syntax (this breaks compatibility with Python 2.1 and older). + introduce the MibInstrumControlle.readVarsFast() method (which skips diff --git a/examples/v3arch/oneliner/manager/async/nextgen.py b/examples/v3arch/oneliner/manager/async/nextgen.py index 5e2e86b..940ae5b 100644 --- a/examples/v3arch/oneliner/manager/async/nextgen.py +++ b/examples/v3arch/oneliner/manager/async/nextgen.py @@ -50,10 +50,10 @@ def cbFun( return 1 # continue table retrieval -cmdGen = cmdgen.CommandGenerator() +cmdGen = cmdgen.AsynCommandGenerator() for authData, transportTarget, varNames in targets: - cmdGen.asyncNextCmd( + cmdGen.nextCmd( authData, transportTarget, varNames, # User-space callback function and its context (cbFun, (varNames, authData, transportTarget)) diff --git a/pysnmp/entity/rfc3413/oneliner/cmdgen.py b/pysnmp/entity/rfc3413/oneliner/cmdgen.py index 9fb70b4..e4d2007 100644 --- a/pysnmp/entity/rfc3413/oneliner/cmdgen.py +++ b/pysnmp/entity/rfc3413/oneliner/cmdgen.py @@ -255,7 +255,7 @@ class AsynCommandGenerator: # Async SNMP apps - def asyncGetCmd( + def getCmd( self, authData, transportTarget, varNames, (cbFun, cbCtx) ): addrName, paramsName = self.cfgCmdGen( @@ -266,8 +266,10 @@ class AsynCommandGenerator: self.snmpEngine, addrName, varBinds, cbFun, cbCtx, authData.contextEngineId, authData.contextName ) - - def asyncSetCmd( + + asyncGetCmd = getCmd + + def setCmd( self, authData, transportTarget, varBinds, (cbFun, cbCtx) ): addrName, paramsName = self.cfgCmdGen( @@ -295,8 +297,10 @@ class AsynCommandGenerator: self.snmpEngine, addrName, __varBinds, cbFun, cbCtx, authData.contextEngineId, authData.contextName ) - - def asyncNextCmd( + + asyncSetCmd = setCmd + + def nextCmd( self, authData, transportTarget, varNames, (cbFun, cbCtx) ): addrName, paramsName = self.cfgCmdGen( @@ -308,7 +312,9 @@ class AsynCommandGenerator: authData.contextEngineId, authData.contextName ) - def asyncBulkCmd( + asyncNextCmd = nextCmd + + def bulkCmd( self, authData, transportTarget, nonRepeaters, maxRepetitions, varNames, (cbFun, cbCtx) ): @@ -322,8 +328,16 @@ class AsynCommandGenerator: authData.contextEngineId, authData.contextName ) -class CommandGenerator(AsynCommandGenerator): + asyncBulkCmd = bulkCmd + +class CommandGenerator: lexicographicMode = None + def __init__(self, snmpEngine=None, asynCmdGen=None): + if asynCmdGen is None: + self.__asynCmdGen = AsynCommandGenerator(snmpEngine) + else: + self.__asynCmdGen = asynCmdGen + def getCmd(self, authData, transportTarget, *varNames): def __cbFun( sendRequestHandle, errorIndication, errorStatus, errorIndex, @@ -335,10 +349,10 @@ class CommandGenerator(AsynCommandGenerator): appReturn['varBinds'] = varBinds appReturn = {} - self.asyncGetCmd( + self.__asynCmdGen.getCmd( authData, transportTarget, varNames, (__cbFun, appReturn) ) - self.snmpEngine.transportDispatcher.runDispatcher() + self.__asynCmdGen.snmpEngine.transportDispatcher.runDispatcher() return ( appReturn['errorIndication'], appReturn['errorStatus'], @@ -357,10 +371,10 @@ class CommandGenerator(AsynCommandGenerator): appReturn['varBinds'] = varBinds appReturn = {} - self.asyncSetCmd( + self.__asynCmdGen.setCmd( authData, transportTarget, varBinds, (__cbFun, appReturn) ) - self.snmpEngine.transportDispatcher.runDispatcher() + self.__asynCmdGen.snmpEngine.transportDispatcher.runDispatcher() return ( appReturn['errorIndication'], appReturn['errorStatus'], @@ -406,16 +420,21 @@ class CommandGenerator(AsynCommandGenerator): varBindTotalTable.extend(varBindTable) return 1 # continue table retrieval - - varBindHead = map(lambda (x,y),self=self: univ.ObjectIdentifier(x+y), map(lambda x,self=self: mibvar.mibNameToOid(self.mibViewController, x), varNames)) + + varBindHead = [] + for varName in varNames: + name, suffix = mibvar.mibNameToOid( + self.__asynCmdGen.mibViewController, varName + ) + varBindHead.append(univ.ObjectIdentifier(name + suffix)) appReturn = {} - self.asyncNextCmd( + self.__asynCmdGen.nextCmd( authData, transportTarget, varNames, (__cbFun, (self, varBindHead,[],appReturn)) ) - self.snmpEngine.transportDispatcher.runDispatcher() + self.__asynCmdGen.snmpEngine.transportDispatcher.runDispatcher() return ( appReturn['errorIndication'], @@ -464,17 +483,22 @@ class CommandGenerator(AsynCommandGenerator): return return 1 # continue table retrieval - - varBindHead = map(lambda (x,y),self=self: univ.ObjectIdentifier(x+y), map(lambda x,self=self: mibvar.mibNameToOid(self.mibViewController, x), varNames)) + + varBindHead = [] + for varName in varNames: + name, suffix = mibvar.mibNameToOid( + self.__asynCmdGen.mibViewController, varName + ) + varBindHead.append(univ.ObjectIdentifier(name + suffix)) appReturn = {} - self.asyncBulkCmd( + self.__asynCmdGen.bulkCmd( authData, transportTarget, nonRepeaters, maxRepetitions, varNames, (__cbFun, (self, varBindHead, [], appReturn)) ) - self.snmpEngine.transportDispatcher.runDispatcher() + self.__asynCmdGen.snmpEngine.transportDispatcher.runDispatcher() return ( appReturn['errorIndication'], diff --git a/pysnmp/entity/rfc3413/oneliner/ntforg.py b/pysnmp/entity/rfc3413/oneliner/ntforg.py index 834c7c9..76c8c71 100644 --- a/pysnmp/entity/rfc3413/oneliner/ntforg.py +++ b/pysnmp/entity/rfc3413/oneliner/ntforg.py @@ -81,7 +81,7 @@ class AsynNotificationOriginator(cmdgen.AsynCommandGenerator): ) self.uncfgCmdGen() - def asyncSendNotification( + def sendNotification( self, authData, transportTarget, notifyType, notificationType, varBinds=None, (cbFun, cbCtx)=(None, None) ): @@ -117,7 +117,17 @@ class AsynNotificationOriginator(cmdgen.AsynCommandGenerator): return ntforg.NotificationOriginator(self.snmpContext).sendNotification(self.snmpEngine, notifyName, notificationType, __varBinds, cbFun, cbCtx) -class NotificationOriginator(AsynNotificationOriginator): + asyncSendNotification = sendNotification + +class NotificationOriginator: + def __init__(self, snmpEngine=None, snmpContext=None, asynNtfOrg=None): + if asynNtfOrg is None: + self.__asynNtfOrg = AsynNotificationOriginator( + snmpEngine, snmpContext + ) + else: + self.__asynNtfOrg = asynNtfOrg + def sendNotification( self, authData, transportTarget, notifyType, notificationType, *varBinds @@ -126,10 +136,10 @@ class NotificationOriginator(AsynNotificationOriginator): appReturn['errorIndication'] = errorIndication appReturn = {} - self.asyncSendNotification( + self.__asynNtfOrg.sendNotification( authData, transportTarget, notifyType, notificationType, varBinds, (__cbFun, appReturn) ) - self.snmpEngine.transportDispatcher.runDispatcher() + self.__asynNtfOrg.snmpEngine.transportDispatcher.runDispatcher() if 'errorIndication' in appReturn: return appReturn['errorIndication'] |