summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelie <elie>2011-02-11 20:40:36 +0000
committerelie <elie>2011-02-11 20:40:36 +0000
commit273c1f5fa733dd53fa1f85a2564bcf6f2c1192e4 (patch)
tree78d814d90d4c49024b1aa6c4e371cc5829b9c9c0
parentdf87291af134ac51b7cee8cba499f3c14d52d045 (diff)
downloadpysnmp-273c1f5fa733dd53fa1f85a2564bcf6f2c1192e4.tar.gz
sync versions of oneliner apps split off async implementation for clarity
-rw-r--r--CHANGES3
-rw-r--r--examples/v3arch/oneliner/manager/async/nextgen.py4
-rw-r--r--pysnmp/entity/rfc3413/oneliner/cmdgen.py62
-rw-r--r--pysnmp/entity/rfc3413/oneliner/ntforg.py18
4 files changed, 61 insertions, 26 deletions
diff --git a/CHANGES b/CHANGES
index 2c3636b..11c6d70 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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']