summaryrefslogtreecommitdiff
path: root/pysnmp/hlapi
diff options
context:
space:
mode:
Diffstat (limited to 'pysnmp/hlapi')
-rw-r--r--pysnmp/hlapi/transport.py11
-rw-r--r--pysnmp/hlapi/v1arch/asyncio/cmdgen.py12
-rw-r--r--pysnmp/hlapi/v1arch/asyncore/cmdgen.py1
-rw-r--r--pysnmp/hlapi/v1arch/asyncore/sync/cmdgen.py3
-rw-r--r--pysnmp/hlapi/v3arch/asyncio/cmdgen.py65
-rw-r--r--pysnmp/hlapi/v3arch/asyncio/transport.py20
-rw-r--r--pysnmp/hlapi/v3arch/asyncore/cmdgen.py76
-rw-r--r--pysnmp/hlapi/v3arch/asyncore/ntforg.py19
-rw-r--r--pysnmp/hlapi/v3arch/asyncore/sync/cmdgen.py15
-rw-r--r--pysnmp/hlapi/v3arch/asyncore/sync/ntforg.py1
-rw-r--r--pysnmp/hlapi/v3arch/asyncore/transport.py18
-rw-r--r--pysnmp/hlapi/v3arch/auth.py68
-rw-r--r--pysnmp/hlapi/v3arch/lcd.py110
-rw-r--r--pysnmp/hlapi/v3arch/twisted/cmdgen.py99
-rw-r--r--pysnmp/hlapi/v3arch/twisted/ntforg.py22
-rw-r--r--pysnmp/hlapi/v3arch/twisted/transport.py16
-rw-r--r--pysnmp/hlapi/varbinds.py15
17 files changed, 360 insertions, 211 deletions
diff --git a/pysnmp/hlapi/transport.py b/pysnmp/hlapi/transport.py
index 20471633..d75951c6 100644
--- a/pysnmp/hlapi/transport.py
+++ b/pysnmp/hlapi/transport.py
@@ -27,8 +27,7 @@ class AbstractTransportTarget(object):
def __repr__(self):
return '%s(%r, timeout=%r, retries=%r, tagList=%r)' % (
self.__class__.__name__, self.transportAddr,
- self.timeout, self.retries, self.tagList
- )
+ self.timeout, self.retries, self.tagList)
def getTransportInfo(self):
return self.TRANSPORT_DOMAIN, self.transportAddr
@@ -55,9 +54,11 @@ class AbstractTransportTarget(object):
return self.transport
def verifyDispatcherCompatibility(self, snmpEngine):
- if not self.PROTO_TRANSPORT.isCompatibleWithDispatcher(snmpEngine.transportDispatcher):
- raise error.PySnmpError('Transport %r is not compatible with dispatcher %r' % (
- self.PROTO_TRANSPORT, snmpEngine.transportDispatcher))
+ if not self.PROTO_TRANSPORT.isCompatibleWithDispatcher(
+ snmpEngine.transportDispatcher):
+ raise error.PySnmpError(
+ 'Transport %r is not compatible with dispatcher '
+ '%r' % (self.PROTO_TRANSPORT, snmpEngine.transportDispatcher))
def _resolveAddr(self, transportAddr):
raise NotImplementedError()
diff --git a/pysnmp/hlapi/v1arch/asyncio/cmdgen.py b/pysnmp/hlapi/v1arch/asyncio/cmdgen.py
index 346b7c76..3e53c05b 100644
--- a/pysnmp/hlapi/v1arch/asyncio/cmdgen.py
+++ b/pysnmp/hlapi/v1arch/asyncio/cmdgen.py
@@ -4,18 +4,18 @@
# Copyright (c) 2005-2019, Ilya Etingof <etingof@gmail.com>
# License: http://snmplabs.com/pysnmp/license.html
#
-from pysnmp.hlapi.v1arch.auth import *
-from pysnmp.hlapi.varbinds import *
-from pysnmp.hlapi.v1arch.asyncio.transport import *
-from pysnmp.smi.rfc1902 import *
-from pysnmp.proto import api
-
try:
import asyncio
except ImportError:
import trollius as asyncio
+from pysnmp.hlapi.v1arch.auth import *
+from pysnmp.hlapi.varbinds import *
+from pysnmp.hlapi.v1arch.asyncio.transport import *
+from pysnmp.smi.rfc1902 import *
+from pysnmp.proto import api
+
__all__ = ['getCmd', 'nextCmd', 'setCmd', 'bulkCmd', 'isEndOfMib']
VB_PROCESSOR = CommandGeneratorVarBinds()
diff --git a/pysnmp/hlapi/v1arch/asyncore/cmdgen.py b/pysnmp/hlapi/v1arch/asyncore/cmdgen.py
index e7ddadb2..3a1de67f 100644
--- a/pysnmp/hlapi/v1arch/asyncore/cmdgen.py
+++ b/pysnmp/hlapi/v1arch/asyncore/cmdgen.py
@@ -4,7 +4,6 @@
# Copyright (c) 2005-2019, Ilya Etingof <etingof@gmail.com>
# License: http://snmplabs.com/pysnmp/license.html
#
-
from pysnmp.hlapi.v1arch.auth import *
from pysnmp.hlapi.v1arch.asyncore import *
from pysnmp.hlapi.varbinds import *
diff --git a/pysnmp/hlapi/v1arch/asyncore/sync/cmdgen.py b/pysnmp/hlapi/v1arch/asyncore/sync/cmdgen.py
index a1c3366d..2961a63a 100644
--- a/pysnmp/hlapi/v1arch/asyncore/sync/cmdgen.py
+++ b/pysnmp/hlapi/v1arch/asyncore/sync/cmdgen.py
@@ -4,11 +4,10 @@
# Copyright (c) 2005-2019, Ilya Etingof <etingof@gmail.com>
# License: http://snmplabs.com/pysnmp/license.html
#
-from pyasn1.type.univ import Null
-
from pysnmp.hlapi.v1arch.asyncore import cmdgen
from pysnmp.hlapi.varbinds import *
from pysnmp.proto.rfc1905 import endOfMibView
+from pysnmp.proto.rfc1902 import Null
__all__ = ['getCmd', 'nextCmd', 'setCmd', 'bulkCmd']
diff --git a/pysnmp/hlapi/v3arch/asyncio/cmdgen.py b/pysnmp/hlapi/v3arch/asyncio/cmdgen.py
index 89420cb2..29d2ca63 100644
--- a/pysnmp/hlapi/v3arch/asyncio/cmdgen.py
+++ b/pysnmp/hlapi/v3arch/asyncio/cmdgen.py
@@ -31,6 +31,12 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
# THE POSSIBILITY OF SUCH DAMAGE.
#
+try:
+ import asyncio
+
+except ImportError:
+ import trollius as asyncio
+
from pysnmp.hlapi.v3arch.auth import *
from pysnmp.hlapi.v3arch.context import *
from pysnmp.hlapi.v3arch.lcd import *
@@ -40,12 +46,6 @@ from pysnmp.entity.rfc3413 import cmdgen
from pysnmp.proto.api import v2c
from pysnmp.smi.rfc1902 import *
-try:
- import asyncio
-
-except ImportError:
- import trollius as asyncio
-
__all__ = ['getCmd', 'nextCmd', 'setCmd', 'bulkCmd', 'isEndOfMib']
VB_PROCESSOR = CommandGeneratorVarBinds()
@@ -134,17 +134,20 @@ def getCmd(snmpEngine, authData, transportTarget, contextData,
errorIndication, errorStatus, errorIndex,
varBinds, cbCtx):
lookupMib, future = cbCtx
+
if future.cancelled():
return
+
try:
- varBindsUnmade = VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache, varBinds,
- lookupMib)
+ varBindsUnmade = VB_PROCESSOR.unmakeVarBinds(
+ snmpEngine.cache, varBinds, lookupMib)
+
except Exception as e:
future.set_exception(e)
+
else:
future.set_result(
- (errorIndication, errorStatus, errorIndex, varBindsUnmade)
- )
+ (errorIndication, errorStatus, errorIndex, varBindsUnmade))
addrName, paramsName = LCD.configure(
snmpEngine, authData, transportTarget, contextData.contextName)
@@ -157,6 +160,7 @@ def getCmd(snmpEngine, authData, transportTarget, contextData,
VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds), __cbFun,
(options.get('lookupMib', True), future)
)
+
return future
@@ -240,13 +244,17 @@ def setCmd(snmpEngine, authData, transportTarget, contextData,
errorIndication, errorStatus, errorIndex,
varBinds, cbCtx):
lookupMib, future = cbCtx
+
if future.cancelled():
return
+
try:
- varBindsUnmade = VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache, varBinds,
- lookupMib)
+ varBindsUnmade = VB_PROCESSOR.unmakeVarBinds(
+ snmpEngine.cache, varBinds, lookupMib)
+
except Exception as e:
future.set_exception(e)
+
else:
future.set_result(
(errorIndication, errorStatus, errorIndex, varBindsUnmade)
@@ -263,6 +271,7 @@ def setCmd(snmpEngine, authData, transportTarget, contextData,
VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds), __cbFun,
(options.get('lookupMib', True), future)
)
+
return future
@@ -352,17 +361,20 @@ def nextCmd(snmpEngine, authData, transportTarget, contextData,
lookupMib, future = cbCtx
if future.cancelled():
return
+
try:
- varBindsUnmade = [VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache,
- varBindTableRow,
- lookupMib)
- for varBindTableRow in varBindTable]
+ varBindsUnmade = [
+ VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache, varBindTableRow,
+ lookupMib)
+ for varBindTableRow in varBindTable
+ ]
+
except Exception as e:
future.set_exception(e)
+
else:
future.set_result(
- (errorIndication, errorStatus, errorIndex, varBindsUnmade)
- )
+ (errorIndication, errorStatus, errorIndex, varBindsUnmade))
addrName, paramsName = LCD.configure(
snmpEngine, authData, transportTarget, contextData.contextName)
@@ -375,6 +387,7 @@ def nextCmd(snmpEngine, authData, transportTarget, contextData,
VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds), __cbFun,
(options.get('lookupMib', True), future)
)
+
return future
@@ -491,20 +504,23 @@ def bulkCmd(snmpEngine, authData, transportTarget, contextData,
errorIndication, errorStatus, errorIndex,
varBindTable, cbCtx):
lookupMib, future = cbCtx
+
if future.cancelled():
return
+
try:
- varBindsUnmade = [VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache,
- varBindTableRow,
- lookupMib)
- for varBindTableRow in varBindTable]
+ varBindsUnmade = [
+ VB_PROCESSOR.unmakeVarBinds(
+ snmpEngine.cache, varBindTableRow, lookupMib)
+ for varBindTableRow in varBindTable
+ ]
+
except Exception as e:
future.set_exception(e)
else:
future.set_result(
- (errorIndication, errorStatus, errorIndex, varBindsUnmade)
- )
+ (errorIndication, errorStatus, errorIndex, varBindsUnmade))
addrName, paramsName = LCD.configure(
snmpEngine, authData, transportTarget, contextData.contextName)
@@ -517,4 +533,5 @@ def bulkCmd(snmpEngine, authData, transportTarget, contextData,
VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds), __cbFun,
(options.get('lookupMib', True), future)
)
+
return future
diff --git a/pysnmp/hlapi/v3arch/asyncio/transport.py b/pysnmp/hlapi/v3arch/asyncio/transport.py
index 0b795163..f897de09 100644
--- a/pysnmp/hlapi/v3arch/asyncio/transport.py
+++ b/pysnmp/hlapi/v3arch/asyncio/transport.py
@@ -56,11 +56,11 @@ class UdpTransportTarget(AbstractTransportTarget):
def _resolveAddr(self, transportAddr):
try:
- return socket.getaddrinfo(transportAddr[0],
- transportAddr[1],
- socket.AF_INET,
- socket.SOCK_DGRAM,
- socket.IPPROTO_UDP)[0][4][:2]
+ return socket.getaddrinfo(
+ transportAddr[0], transportAddr[1],
+ socket.AF_INET, socket.SOCK_DGRAM,
+ socket.IPPROTO_UDP)[0][4][:2]
+
except socket.gaierror as exc:
raise PySnmpError('Bad IPv4/UDP transport address %s: %s' % (
'@'.join([str(x) for x in transportAddr]), exc))
@@ -116,11 +116,11 @@ class Udp6TransportTarget(AbstractTransportTarget):
def _resolveAddr(self, transportAddr):
try:
- return socket.getaddrinfo(transportAddr[0],
- transportAddr[1],
- socket.AF_INET6,
- socket.SOCK_DGRAM,
- socket.IPPROTO_UDP)[0][4][:2]
+ return socket.getaddrinfo(
+ transportAddr[0], transportAddr[1],
+ socket.AF_INET6, socket.SOCK_DGRAM,
+ socket.IPPROTO_UDP)[0][4][:2]
+
except socket.gaierror as exc:
raise PySnmpError('Bad IPv6/UDP transport address %s: %s' % (
'@'.join([str(x) for x in transportAddr]), exc))
diff --git a/pysnmp/hlapi/v3arch/asyncore/cmdgen.py b/pysnmp/hlapi/v3arch/asyncore/cmdgen.py
index 6446bce5..e11e040e 100644
--- a/pysnmp/hlapi/v3arch/asyncore/cmdgen.py
+++ b/pysnmp/hlapi/v3arch/asyncore/cmdgen.py
@@ -113,24 +113,26 @@ def getCmd(snmpEngine, authData, transportTarget, contextData,
def __cbFun(snmpEngine, sendRequestHandle,
errorIndication, errorStatus, errorIndex,
varBinds, cbCtx):
+
lookupMib, cbFun, cbCtx = cbCtx
+
if cbFun:
+ varBinds = VB_PROCESSOR.unmakeVarBinds(
+ snmpEngine.cache, varBinds, lookupMib)
+
return cbFun(snmpEngine, sendRequestHandle, errorIndication,
- errorStatus, errorIndex,
- VB_PROCESSOR.unmakeVarBinds(
- snmpEngine.cache, varBinds, lookupMib
- ), cbCtx)
+ errorStatus, errorIndex, varBinds, cbCtx)
addrName, paramsName = LCD.configure(
snmpEngine, authData, transportTarget, contextData.contextName)
+ varBinds = VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds)
+
return cmdgen.GetCommandGenerator().sendVarBinds(
snmpEngine, addrName, contextData.contextEngineId,
- contextData.contextName,
- VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds), __cbFun,
+ contextData.contextName, varBinds, __cbFun,
(options.get('lookupMib', True),
- options.get('cbFun'), options.get('cbCtx'))
- )
+ options.get('cbFun'), options.get('cbCtx')))
def setCmd(snmpEngine, authData, transportTarget, contextData,
@@ -226,22 +228,25 @@ def setCmd(snmpEngine, authData, transportTarget, contextData,
def __cbFun(snmpEngine, sendRequestHandle,
errorIndication, errorStatus, errorIndex,
varBinds, cbCtx):
+
lookupMib, cbFun, cbCtx = cbCtx
+
+ varBinds = VB_PROCESSOR.unmakeVarBinds(
+ snmpEngine.cache, varBinds, lookupMib)
+
return cbFun(snmpEngine, sendRequestHandle, errorIndication,
- errorStatus, errorIndex,
- VB_PROCESSOR.unmakeVarBinds(
- snmpEngine.cache, varBinds, lookupMib
- ), cbCtx)
+ errorStatus, errorIndex, varBinds, cbCtx)
addrName, paramsName = LCD.configure(
snmpEngine, authData, transportTarget, contextData.contextName)
+ varBinds = VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds)
+
return cmdgen.SetCommandGenerator().sendVarBinds(
snmpEngine, addrName, contextData.contextEngineId,
- contextData.contextName, VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds),
+ contextData.contextName, varBinds,
__cbFun, (options.get('lookupMib', True),
- options.get('cbFun'), options.get('cbCtx'))
- )
+ options.get('cbFun'), options.get('cbCtx')))
def nextCmd(snmpEngine, authData, transportTarget, contextData,
@@ -338,23 +343,26 @@ def nextCmd(snmpEngine, authData, transportTarget, contextData,
def __cbFun(snmpEngine, sendRequestHandle, errorIndication,
errorStatus, errorIndex, varBindTable, cbCtx):
+
lookupMib, cbFun, cbCtx = cbCtx
+
+ varBindTable = [VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache,
+ varBindTableRow, lookupMib)
+ for varBindTableRow in varBindTable]
+
return cbFun(snmpEngine, sendRequestHandle, errorIndication,
- errorStatus, errorIndex,
- [VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache, varBindTableRow, lookupMib) for varBindTableRow in
- varBindTable],
- cbCtx)
+ errorStatus, errorIndex, varBindTable, cbCtx)
addrName, paramsName = LCD.configure(
snmpEngine, authData, transportTarget, contextData.contextName)
+ varBinds = VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds)
+
return cmdgen.NextCommandGenerator().sendVarBinds(
- snmpEngine, addrName,
- contextData.contextEngineId, contextData.contextName,
- VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds),
- __cbFun, (options.get('lookupMib', True),
- options.get('cbFun'), options.get('cbCtx'))
- )
+ snmpEngine, addrName, contextData.contextEngineId,
+ contextData.contextName, varBinds, __cbFun,
+ (options.get('lookupMib', True), options.get('cbFun'),
+ options.get('cbCtx')))
def bulkCmd(snmpEngine, authData, transportTarget, contextData,
@@ -481,19 +489,23 @@ def bulkCmd(snmpEngine, authData, transportTarget, contextData,
def __cbFun(snmpEngine, sendRequestHandle,
errorIndication, errorStatus, errorIndex,
varBindTable, cbCtx):
+
lookupMib, cbFun, cbCtx = cbCtx
+
+ varBindTable = [VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache,
+ varBindTableRow, lookupMib)
+ for varBindTableRow in varBindTable]
+
return cbFun(snmpEngine.cache, sendRequestHandle, errorIndication,
- errorStatus, errorIndex,
- [VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache, varBindTableRow, lookupMib) for varBindTableRow in
- varBindTable], cbCtx)
+ errorStatus, errorIndex, varBindTable, cbCtx)
addrName, paramsName = LCD.configure(
snmpEngine, authData, transportTarget, contextData.contextName)
+ varBinds = VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds)
+
return cmdgen.BulkCommandGenerator().sendVarBinds(
snmpEngine, addrName, contextData.contextEngineId,
contextData.contextName, nonRepeaters, maxRepetitions,
- VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds), __cbFun,
- (options.get('lookupMib', True),
- options.get('cbFun'), options.get('cbCtx'))
- )
+ varBinds, __cbFun, (options.get('lookupMib', True),
+ options.get('cbFun'), options.get('cbCtx')))
diff --git a/pysnmp/hlapi/v3arch/asyncore/ntforg.py b/pysnmp/hlapi/v3arch/asyncore/ntforg.py
index 7df0bc08..2e714c08 100644
--- a/pysnmp/hlapi/v3arch/asyncore/ntforg.py
+++ b/pysnmp/hlapi/v3arch/asyncore/ntforg.py
@@ -152,22 +152,23 @@ def sendNotification(snmpEngine, authData, transportTarget, contextData,
# noinspection PyShadowingNames
def __cbFun(snmpEngine, sendRequestHandle, errorIndication,
errorStatus, errorIndex, varBinds, cbCtx):
+
lookupMib, cbFun, cbCtx = cbCtx
+
+ varBinds = VB_PROCESSOR.unmakeVarBinds(
+ snmpEngine.cache, varBinds, lookupMib)
+
return cbFun and cbFun(
snmpEngine, sendRequestHandle, errorIndication,
- errorStatus, errorIndex,
- VB_PROCESSOR.unmakeVarBinds(
- snmpEngine.cache, varBinds, lookupMib
- ), cbCtx
- )
+ errorStatus, errorIndex, varBinds, cbCtx)
notifyName = LCD.configure(snmpEngine, authData, transportTarget,
notifyType, contextData.contextName)
+ varBinds = VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds)
+
return ntforg.NotificationOriginator().sendVarBinds(
snmpEngine, notifyName,
contextData.contextEngineId, contextData.contextName,
- VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds), __cbFun,
- (options.get('lookupMib', True),
- options.get('cbFun'), options.get('cbCtx'))
- )
+ varBinds, __cbFun, (options.get('lookupMib', True),
+ options.get('cbFun'), options.get('cbCtx')))
diff --git a/pysnmp/hlapi/v3arch/asyncore/sync/cmdgen.py b/pysnmp/hlapi/v3arch/asyncore/sync/cmdgen.py
index c0e7a379..6165fa33 100644
--- a/pysnmp/hlapi/v3arch/asyncore/sync/cmdgen.py
+++ b/pysnmp/hlapi/v3arch/asyncore/sync/cmdgen.py
@@ -108,6 +108,7 @@ def getCmd(snmpEngine, authData, transportTarget, contextData,
errorStatus = cbCtx['errorStatus']
errorIndex = cbCtx['errorIndex']
varBinds = cbCtx['varBinds']
+
else:
errorIndication = errorStatus = errorIndex = None
varBinds = []
@@ -214,6 +215,7 @@ def setCmd(snmpEngine, authData, transportTarget, contextData,
errorStatus = cbCtx['errorStatus']
errorIndex = cbCtx['errorIndex']
varBinds = cbCtx['varBinds']
+
else:
errorIndication = errorStatus = errorIndex = None
varBinds = []
@@ -363,6 +365,7 @@ def nextCmd(snmpEngine, authData, transportTarget, contextData,
if errorIndication:
yield (errorIndication, errorStatus, errorIndex, varBinds)
return
+
elif errorStatus:
if errorStatus == 2:
# Hide SNMPv1 noSuchName error which leaks in here
@@ -371,6 +374,7 @@ def nextCmd(snmpEngine, authData, transportTarget, contextData,
errorIndex = errorIndex.clone(0)
yield (errorIndication, errorStatus, errorIndex, varBinds)
return
+
else:
stopFlag = True
@@ -570,8 +574,10 @@ def bulkCmd(snmpEngine, authData, transportTarget, contextData,
if errorIndication:
yield (errorIndication, errorStatus, errorIndex,
varBindTable and varBindTable[0] or [])
+
if errorIndication != errind.requestTimedOut:
return
+
elif errorStatus:
if errorStatus == 2:
# Hide SNMPv1 noSuchName error which leaks in here
@@ -580,26 +586,35 @@ def bulkCmd(snmpEngine, authData, transportTarget, contextData,
errorIndex = errorIndex.clone(0)
yield (errorIndication, errorStatus, errorIndex, varBindTable and varBindTable[0] or [])
return
+
else:
for row in range(len(varBindTable)):
stopFlag = True
+
if len(varBindTable[row]) != len(initialVars):
varBindTable = row and varBindTable[:row - 1] or []
break
+
for col in range(len(varBindTable[row])):
name, val = varBindTable[row][col]
+
if row:
previousVarBinds = varBindTable[row - 1]
+
if nullVarBinds[col]:
varBindTable[row][col] = previousVarBinds[col][0], endOfMibView
continue
+
stopFlag = False
+
if isinstance(val, Null):
varBindTable[row][col] = previousVarBinds[col][0], endOfMibView
nullVarBinds[col] = True
+
if not lexicographicMode and not initialVars[col].isPrefixOf(name):
varBindTable[row][col] = previousVarBinds[col][0], endOfMibView
nullVarBinds[col] = True
+
if stopFlag:
varBindTable = row and varBindTable[:row - 1] or []
break
diff --git a/pysnmp/hlapi/v3arch/asyncore/sync/ntforg.py b/pysnmp/hlapi/v3arch/asyncore/sync/ntforg.py
index 2cff18df..b26e2e4a 100644
--- a/pysnmp/hlapi/v3arch/asyncore/sync/ntforg.py
+++ b/pysnmp/hlapi/v3arch/asyncore/sync/ntforg.py
@@ -143,6 +143,7 @@ def sendNotification(snmpEngine, authData, transportTarget, contextData,
errorStatus = cbCtx.get('errorStatus')
errorIndex = cbCtx.get('errorIndex')
varBinds = cbCtx.get('varBinds', [])
+
else:
errorIndication = errorStatus = errorIndex = None
varBinds = []
diff --git a/pysnmp/hlapi/v3arch/asyncore/transport.py b/pysnmp/hlapi/v3arch/asyncore/transport.py
index 2cae2d7d..3e03b6af 100644
--- a/pysnmp/hlapi/v3arch/asyncore/transport.py
+++ b/pysnmp/hlapi/v3arch/asyncore/transport.py
@@ -53,11 +53,10 @@ class UdpTransportTarget(AbstractTransportTarget):
def _resolveAddr(self, transportAddr):
try:
- return socket.getaddrinfo(transportAddr[0],
- transportAddr[1],
- socket.AF_INET,
- socket.SOCK_DGRAM,
- socket.IPPROTO_UDP)[0][4][:2]
+ return socket.getaddrinfo(
+ transportAddr[0], transportAddr[1], socket.AF_INET,
+ socket.SOCK_DGRAM, socket.IPPROTO_UDP)[0][4][:2]
+
except socket.gaierror as exc:
raise error.PySnmpError('Bad IPv4/UDP transport address %s: %s' % (
'@'.join([str(x) for x in transportAddr]), exc))
@@ -111,11 +110,10 @@ class Udp6TransportTarget(AbstractTransportTarget):
def _resolveAddr(self, transportAddr):
try:
- return socket.getaddrinfo(transportAddr[0],
- transportAddr[1],
- socket.AF_INET6,
- socket.SOCK_DGRAM,
- socket.IPPROTO_UDP)[0][4][:2]
+ return socket.getaddrinfo(
+ transportAddr[0], transportAddr[1], socket.AF_INET6,
+ socket.SOCK_DGRAM, socket.IPPROTO_UDP)[0][4][:2]
+
except socket.gaierror as exc:
raise error.PySnmpError('Bad IPv6/UDP transport address %s: %s' % (
'@'.join([str(x) for x in transportAddr]), exc))
diff --git a/pysnmp/hlapi/v3arch/auth.py b/pysnmp/hlapi/v3arch/auth.py
index 7c232221..18b4b328 100644
--- a/pysnmp/hlapi/v3arch/auth.py
+++ b/pysnmp/hlapi/v3arch/auth.py
@@ -174,48 +174,60 @@ class CommunityData(object):
def __init__(self, communityIndex, communityName=None, mpModel=None,
contextEngineId=None, contextName=None, tag=None,
securityName=None):
+
if mpModel is not None:
self.mpModel = mpModel
self.securityModel = mpModel + 1
+
self.contextEngineId = contextEngineId
+
if contextName is not None:
self.contextName = contextName
+
if tag is not None:
self.tag = tag
+
# a single arg is considered as a community name
if communityName is None:
communityName, communityIndex = communityIndex, None
+
self.communityName = communityName
+
# Autogenerate communityIndex if not specified
if communityIndex is None:
- self.communityIndex = self.securityName = 's%s' % hash(
+ self.securityName = 's%s' % hash(
(self.communityName, self.mpModel, self.contextEngineId,
- self.contextName, self.tag)
- )
+ self.contextName, self.tag))
+
+ self.communityIndex = self.securityName
+
else:
self.communityIndex = communityIndex
- self.securityName = securityName is not None and securityName or communityIndex
+
+ if securityName is None:
+ self.securityName = communityIndex
+
+ else:
+ self.securityName = securityName
def __hash__(self):
raise TypeError('%s is not hashable' % self.__class__.__name__)
def __repr__(self):
- return '%s(communityIndex=%r, communityName=<COMMUNITY>, mpModel=%r, contextEngineId=%r, contextName=%r, tag=%r, securityName=%r)' % (
- self.__class__.__name__,
- self.communityIndex,
- self.mpModel,
- self.contextEngineId,
- self.contextName,
- self.tag,
- self.securityName
- )
+ return ('%s(communityIndex=%r, communityName=<COMMUNITY>, mpModel=%r, '
+ 'contextEngineId=%r, contextName=%r, tag=%r, securityName='
+ '%r)') % (self.__class__.__name__, self.communityIndex,
+ self.mpModel, self.contextEngineId, self.contextName,
+ self.tag, self.securityName)
def clone(self, communityIndex=None, communityName=None,
mpModel=None, contextEngineId=None,
contextName=None, tag=None, securityName=None):
+
# a single arg is considered as a community name
if communityName is None:
communityName, communityIndex = communityIndex, None
+
return self.__class__(
communityIndex,
communityName is None and self.communityName or communityName,
@@ -223,8 +235,7 @@ class CommunityData(object):
contextEngineId is None and self.contextEngineId or contextEngineId,
contextName is None and self.contextName or contextName,
tag is None and self.tag or tag,
- securityName is None and self.securityName or securityName
- )
+ securityName is None and self.securityName or securityName)
class UsmUserData(object):
@@ -306,28 +317,38 @@ class UsmUserData(object):
authProtocol=None, privProtocol=None,
securityEngineId=None,
securityName=None):
+
self.userName = userName
+
if securityName is None:
self.securityName = userName
+
else:
self.securityName = securityName
if authKey is not None:
self.authKey = authKey
+
if authProtocol is None:
self.authProtocol = config.USM_AUTH_HMAC96_MD5
+
else:
self.authProtocol = authProtocol
+
if self.securityLevel != 'authPriv':
self.securityLevel = 'authNoPriv'
if privKey is not None:
self.privKey = privKey
+
if self.authProtocol == config.USM_AUTH_NONE:
raise error.PySnmpError('Privacy implies authenticity')
+
self.securityLevel = 'authPriv'
+
if privProtocol is None:
self.privProtocol = config.USM_PRIV_CBC56_DES
+
else:
self.privProtocol = privProtocol
@@ -337,19 +358,19 @@ class UsmUserData(object):
raise TypeError('%s is not hashable' % self.__class__.__name__)
def __repr__(self):
- return '%s(userName=%r, authKey=<AUTHKEY>, privKey=<PRIVKEY>, authProtocol=%r, privProtocol=%r, securityEngineId=%r, securityName=%r)' % (
- self.__class__.__name__,
- self.userName,
- self.authProtocol,
- self.privProtocol,
+ return ('%s(userName=%r, authKey=<AUTHKEY>, privKey=<PRIVKEY>, '
+ 'authProtocol=%r, privProtocol=%r, securityEngineId=%r, '
+ 'securityName=%r)') % (
+ self.__class__.__name__, self.userName,
+ self.authProtocol, self.privProtocol,
self.securityEngineId is None and '<DEFAULT>' or self.securityEngineId,
- self.securityName
- )
+ self.securityName)
def clone(self, userName=None,
authKey=None, privKey=None,
authProtocol=None, privProtocol=None,
securityEngineId=None, securityName=None):
+
return self.__class__(
userName is None and self.userName or userName,
authKey is None and self.authKey or authKey,
@@ -357,5 +378,4 @@ class UsmUserData(object):
authProtocol is None and self.authProtocol or authProtocol,
privProtocol is None and self.privProtocol or privProtocol,
securityEngineId is None and self.securityEngineId or securityEngineId,
- securityName=securityName is None and self.securityName or securityName
- )
+ securityName=securityName is None and self.securityName or securityName)
diff --git a/pysnmp/hlapi/v3arch/lcd.py b/pysnmp/hlapi/v3arch/lcd.py
index b3397b0c..0e1eb9c5 100644
--- a/pysnmp/hlapi/v3arch/lcd.py
+++ b/pysnmp/hlapi/v3arch/lcd.py
@@ -21,10 +21,13 @@ class AbstractLcdConfigurator(object):
def _getCache(self, snmpEngine):
cacheId = self.__class__.__name__
+
cache = snmpEngine.getUserContext(cacheId)
+
if cache is None:
cache = dict([(x, {}) for x in self.cacheKeys])
snmpEngine.setUserContext(**{cacheId: cache})
+
return cache
def configure(self, snmpEngine, *args, **kwargs):
@@ -37,8 +40,10 @@ class AbstractLcdConfigurator(object):
class CommandGeneratorLcdConfigurator(AbstractLcdConfigurator):
cacheKeys = ['auth', 'parm', 'tran', 'addr']
- def configure(self, snmpEngine, authData, transportTarget, contextName, **options):
+ def configure(self, snmpEngine, authData, transportTarget,
+ contextName, **options):
cache = self._getCache(snmpEngine)
+
if isinstance(authData, CommunityData):
if authData.communityIndex not in cache['auth']:
config.addV1System(
@@ -50,9 +55,12 @@ class CommandGeneratorLcdConfigurator(AbstractLcdConfigurator):
authData.tag,
authData.securityName
)
+
cache['auth'][authData.communityIndex] = authData
+
elif isinstance(authData, UsmUserData):
authDataKey = authData.userName, authData.securityEngineId
+
if authDataKey not in cache['auth']:
config.addV3User(
snmpEngine,
@@ -62,37 +70,48 @@ class CommandGeneratorLcdConfigurator(AbstractLcdConfigurator):
authData.securityEngineId,
securityName=authData.securityName
)
+
cache['auth'][authDataKey] = authData
+
else:
raise error.PySnmpError('Unsupported authentication object')
paramsKey = (authData.securityName,
authData.securityLevel,
authData.mpModel)
+
if paramsKey in cache['parm']:
paramsName, useCount = cache['parm'][paramsKey]
+
cache['parm'][paramsKey] = paramsName, useCount + 1
+
else:
paramsName = 'p%s' % self.nextID()
config.addTargetParams(
snmpEngine, paramsName,
authData.securityName, authData.securityLevel, authData.mpModel
)
+
cache['parm'][paramsKey] = paramsName, 1
if transportTarget.TRANSPORT_DOMAIN in cache['tran']:
transport, useCount = cache['tran'][transportTarget.TRANSPORT_DOMAIN]
transportTarget.verifyDispatcherCompatibility(snmpEngine)
+
cache['tran'][transportTarget.TRANSPORT_DOMAIN] = transport, useCount + 1
+
elif config.getTransport(snmpEngine, transportTarget.TRANSPORT_DOMAIN):
transportTarget.verifyDispatcherCompatibility(snmpEngine)
+
else:
transport = transportTarget.openClientMode()
+
config.addTransport(
snmpEngine,
transportTarget.TRANSPORT_DOMAIN,
transport
)
+
cache['tran'][transportTarget.TRANSPORT_DOMAIN] = transport, 1
transportKey = (paramsName, transportTarget.TRANSPORT_DOMAIN,
@@ -105,8 +124,10 @@ class CommandGeneratorLcdConfigurator(AbstractLcdConfigurator):
if transportKey in cache['addr']:
addrName, useCount = cache['addr'][transportKey]
cache['addr'][transportKey] = addrName, useCount + 1
+
else:
addrName = 'a%s' % self.nextID()
+
config.addTargetAddr(
snmpEngine, addrName,
transportTarget.TRANSPORT_DOMAIN,
@@ -116,23 +137,30 @@ class CommandGeneratorLcdConfigurator(AbstractLcdConfigurator):
transportTarget.retries,
transportTarget.tagList
)
+
cache['addr'][transportKey] = addrName, 1
return addrName, paramsName
def unconfigure(self, snmpEngine, authData=None, contextName=null, **options):
cache = self._getCache(snmpEngine)
+
if authData:
if isinstance(authData, CommunityData):
authDataKey = authData.communityIndex
+
elif isinstance(authData, UsmUserData):
authDataKey = authData.userName, authData.securityEngineId
+
else:
raise error.PySnmpError('Unsupported authentication object')
+
if authDataKey in cache['auth']:
authDataKeys = (authDataKey,)
+
else:
raise error.PySnmpError('Unknown authData %s' % (authData,))
+
else:
authDataKeys = list(cache['auth'].keys())
@@ -140,35 +168,44 @@ class CommandGeneratorLcdConfigurator(AbstractLcdConfigurator):
for authDataKey in authDataKeys:
authDataX = cache['auth'][authDataKey]
+
del cache['auth'][authDataKey]
+
if isinstance(authDataX, CommunityData):
config.delV1System(
snmpEngine,
authDataX.communityIndex
)
+
elif isinstance(authDataX, UsmUserData):
config.delV3User(
snmpEngine,
authDataX.userName,
authDataX.securityEngineId
)
+
else:
raise error.PySnmpError('Unsupported authentication object')
paramsKey = (authDataX.securityName,
authDataX.securityLevel,
authDataX.mpModel)
+
if paramsKey in cache['parm']:
paramsName, useCount = cache['parm'][paramsKey]
+
useCount -= 1
+
if useCount:
cache['parm'][paramsKey] = paramsName, useCount
+
else:
del cache['parm'][paramsKey]
- config.delTargetParams(
- snmpEngine, paramsName
- )
+
+ config.delTargetParams(snmpEngine, paramsName)
+
paramsNames.add(paramsName)
+
else:
raise error.PySnmpError('Unknown target %s' % (paramsKey,))
@@ -176,22 +213,30 @@ class CommandGeneratorLcdConfigurator(AbstractLcdConfigurator):
for addrKey in addrKeys:
addrName, useCount = cache['addr'][addrKey]
+
useCount -= 1
+
if useCount:
cache['addr'][addrKey] = addrName, useCount
+
else:
config.delTargetAddr(snmpEngine, addrName)
+
del cache['addr'][addrKey]
+
addrNames.add(addrKey)
if addrKey[1] in cache['tran']:
transport, useCount = cache['tran'][addrKey[1]]
+
if useCount > 1:
useCount -= 1
cache['tran'][addrKey[1]] = transport, useCount
+
else:
config.delTransport(snmpEngine, addrKey[1])
transport.closeTransport()
+
del cache['tran'][addrKey[1]]
return addrNames, paramsNames
@@ -204,6 +249,7 @@ class NotificationOriginatorLcdConfigurator(AbstractLcdConfigurator):
def configure(self, snmpEngine, authData, transportTarget, notifyType,
contextName, **options):
cache = self._getCache(snmpEngine)
+
notifyName = None
# Create matching transport tags if not given by user. Not good!
@@ -211,79 +257,97 @@ class NotificationOriginatorLcdConfigurator(AbstractLcdConfigurator):
transportTarget.tagList = str(
hash((authData.securityName, transportTarget.transportAddr))
)
+
if isinstance(authData, CommunityData) and not authData.tag:
authData.tag = transportTarget.tagList.split()[0]
addrName, paramsName = self._cmdGenLcdCfg.configure(
snmpEngine, authData, transportTarget, contextName, **options)
+
tagList = transportTarget.tagList.split()
+
if not tagList:
tagList = ['']
+
for tag in tagList:
notifyNameKey = paramsName, tag, notifyType
+
if notifyNameKey in cache['name']:
notifyName, paramsName, useCount = cache['name'][notifyNameKey]
+
cache['name'][notifyNameKey] = notifyName, paramsName, useCount + 1
+
else:
notifyName = 'n%s' % self.nextID()
+
config.addNotificationTarget(
- snmpEngine,
- notifyName,
- paramsName,
- tag,
- notifyType
- )
+ snmpEngine, notifyName, paramsName, tag, notifyType)
+
cache['name'][notifyNameKey] = notifyName, paramsName, 1
+
authDataKey = authData.securityName, authData.securityModel, authData.securityLevel, contextName
+
if authDataKey in cache['auth']:
authDataX, subTree, useCount = cache['auth'][authDataKey]
+
cache['auth'][authDataKey] = authDataX, subTree, useCount + 1
+
else:
subTree = (1, 3, 6)
- config.addVacmUser(snmpEngine,
- authData.securityModel,
- authData.securityName,
- authData.securityLevel,
- (), (), subTree, contextName=contextName)
+
+ config.addVacmUser(
+ snmpEngine,authData.securityModel, authData.securityName,
+ authData.securityLevel, (), (), subTree,
+ contextName=contextName)
+
cache['auth'][authDataKey] = authData, subTree, 1
return notifyName
def unconfigure(self, snmpEngine, authData=None, contextName=null, **options):
cache = self._getCache(snmpEngine)
+
if authData:
authDataKey = authData.securityName, authData.securityModel, authData.securityLevel, contextName
+
if authDataKey in cache['auth']:
authDataKeys = (authDataKey,)
+
else:
raise error.PySnmpError('Unknown authData %s' % (authData,))
+
else:
authDataKeys = tuple(cache['auth'])
addrNames, paramsNames = self._cmdGenLcdCfg.unconfigure(
snmpEngine, authData, contextName, **options)
- notifyAndParamsNames = [(cache['name'][x], x) for x in cache['name'].keys() if x[0] in paramsNames]
+ notifyAndParamsNames = [
+ (cache['name'][x], x) for x in cache['name'].keys()
+ if x[0] in paramsNames
+ ]
for (notifyName, paramsName, useCount), notifyNameKey in notifyAndParamsNames:
useCount -= 1
+
if useCount:
cache['name'][notifyNameKey] = notifyName, paramsName, useCount
+
else:
- config.delNotificationTarget(
- snmpEngine, notifyName, paramsName
- )
+ config.delNotificationTarget(snmpEngine, notifyName, paramsName)
del cache['name'][notifyNameKey]
for authDataKey in authDataKeys:
authDataX, subTree, useCount = cache['auth'][authDataKey]
+
useCount -= 1
+
if useCount:
cache['auth'][authDataKey] = authDataX, subTree, useCount
+
else:
config.delTrapUser(
- snmpEngine, authDataX.securityModel,
- authDataX.securityName, authDataX.securityLevel,
- subTree
- )
+ snmpEngine, authDataX.securityModel, authDataX.securityName,
+ authDataX.securityLevel, subTree)
+
del cache['auth'][authDataKey]
diff --git a/pysnmp/hlapi/v3arch/twisted/cmdgen.py b/pysnmp/hlapi/v3arch/twisted/cmdgen.py
index 91cfdab2..528c92df 100644
--- a/pysnmp/hlapi/v3arch/twisted/cmdgen.py
+++ b/pysnmp/hlapi/v3arch/twisted/cmdgen.py
@@ -110,38 +110,41 @@ def getCmd(snmpEngine, authData, transportTarget, contextData,
...
>>> react(run)
(0, 0, [ObjectType(ObjectIdentity(ObjectName('1.3.6.1.2.1.1.1.0')), DisplayString('SunOS zeus.snmplabs.com 4.1.3_U1 1 sun4m'))])
- >>>
-
"""
def __cbFun(snmpEngine, sendRequestHandle,
errorIndication, errorStatus, errorIndex,
varBinds, cbCtx):
+
lookupMib, deferred = cbCtx
+
if errorIndication:
deferred.errback(Failure(errorIndication))
+
else:
try:
- varBindsUnmade = VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache, varBinds, lookupMib)
+ varBinds = VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache, varBinds, lookupMib)
except Exception as e:
deferred.errback(Failure(e))
else:
- deferred.callback((errorStatus, errorIndex, varBindsUnmade))
+ deferred.callback((errorStatus, errorIndex, varBinds))
addrName, paramsName = LCD.configure(
snmpEngine, authData, transportTarget, contextData.contextName)
+ varBinds = VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds)
+
deferred = Deferred()
cmdgen.GetCommandGenerator().sendVarBinds(
snmpEngine, addrName, contextData.contextEngineId,
- contextData.contextName,
- VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds), __cbFun,
- (options.get('lookupMib', True), deferred)
- )
+ contextData.contextName, varBinds, __cbFun,
+ (options.get('lookupMib', True), deferred))
+
return deferred
+
def setCmd(snmpEngine, authData, transportTarget, contextData,
*varBinds, **options):
"""Performs SNMP SET query.
@@ -227,38 +230,41 @@ def setCmd(snmpEngine, authData, transportTarget, contextData,
...
>>> react(run)
(0, 0, [ObjectType(ObjectIdentity(ObjectName('1.3.6.1.2.1.1.1.0')), DisplayString('Linux i386'))])
- >>>
-
"""
def __cbFun(snmpEngine, sendRequestHandle,
errorIndication, errorStatus, errorIndex,
varBinds, cbCtx):
+
lookupMib, deferred = cbCtx
+
if errorIndication:
deferred.errback(Failure(errorIndication))
+
else:
try:
- varBindsUnmade = VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache, varBinds, lookupMib)
+ varBinds = VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache, varBinds, lookupMib)
except Exception as e:
deferred.errback(Failure(e))
else:
- deferred.callback((errorStatus, errorIndex, varBindsUnmade))
+ deferred.callback((errorStatus, errorIndex, varBinds))
addrName, paramsName = LCD.configure(
snmpEngine, authData, transportTarget, contextData.contextName)
+ varBinds = VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds)
+
deferred = Deferred()
cmdgen.SetCommandGenerator().sendVarBinds(
snmpEngine, addrName, contextData.contextEngineId,
- contextData.contextName,
- VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds), __cbFun,
- (options.get('lookupMib', True), deferred)
- )
+ contextData.contextName, varBinds, __cbFun,
+ (options.get('lookupMib', True), deferred))
+
return deferred
+
def nextCmd(snmpEngine, authData, transportTarget, contextData,
*varBinds, **options):
"""Performs SNMP GETNEXT query.
@@ -352,44 +358,49 @@ def nextCmd(snmpEngine, authData, transportTarget, contextData,
...
>>> react(run)
(0, 0, [[ObjectType(ObjectIdentity(ObjectName('1.3.6.1.2.1.1.1.0')), DisplayString('SunOS zeus.snmplabs.com 4.1.3_U1 1 sun4m'))]])
- >>>
-
"""
def __cbFun(snmpEngine, sendRequestHandle,
errorIndication, errorStatus, errorIndex,
varBindTable, cbCtx):
+
lookupMib, deferred = cbCtx
- if (options.get('ignoreNonIncreasingOid', False) and
- errorIndication and isinstance(errorIndication, errind.OidNotIncreasing)):
+
+ if (options.get('ignoreNonIncreasingOid', False) and errorIndication
+ and isinstance(errorIndication, errind.OidNotIncreasing)):
errorIndication = None
+
if errorIndication:
deferred.errback(Failure(errorIndication))
+
else:
try:
- varBindsUnmade = [VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache,
- varBindTableRow,
- lookupMib)
- for varBindTableRow in varBindTable]
+ varBindTable = [
+ VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache,
+ varBindTableRow, lookupMib)
+ for varBindTableRow in varBindTable
+ ]
except Exception as e:
deferred.errback(Failure(e))
else:
- deferred.callback((errorStatus, errorIndex, varBindsUnmade))
+ deferred.callback((errorStatus, errorIndex, varBindTable))
addrName, paramsName = LCD.configure(
snmpEngine, authData, transportTarget, contextData.contextName)
+ varBinds = VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds)
+
deferred = Deferred()
cmdgen.NextCommandGenerator().sendVarBinds(
snmpEngine, addrName, contextData.contextEngineId,
- contextData.contextName,
- VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds), __cbFun,
- (options.get('lookupMib', True), deferred)
- )
+ contextData.contextName, varBinds, __cbFun,
+ (options.get('lookupMib', True), deferred))
+
return deferred
+
def bulkCmd(snmpEngine, authData, transportTarget, contextData,
nonRepeaters, maxRepetitions, *varBinds, **options):
"""Performs SNMP GETBULK query.
@@ -511,41 +522,45 @@ def bulkCmd(snmpEngine, authData, transportTarget, contextData,
...
>>> react(run)
(0, 0, [[ObjectType(ObjectIdentity(ObjectName('1.3.6.1.2.1.1.1.0')), DisplayString('SunOS zeus.snmplabs.com 4.1.3_U1 1 sun4m'))], [ObjectType(ObjectIdentity(ObjectName('1.3.6.1.2.1.1.2.0')), ObjectIdentifier('1.3.6.1.4.1.424242.1.1'))]])
- >>>
-
"""
def __cbFun(snmpEngine, sendRequestHandle,
errorIndication, errorStatus, errorIndex,
varBindTable, cbCtx):
+
lookupMib, deferred = cbCtx
- if options.get('ignoreNonIncreasingOid', False) and errorIndication and \
- isinstance(errorIndication, errind.OidNotIncreasing):
+
+ if (options.get('ignoreNonIncreasingOid', False) and errorIndication
+ and isinstance(errorIndication, errind.OidNotIncreasing)):
errorIndication = None
+
if errorIndication:
deferred.errback(Failure(errorIndication))
+
else:
try:
- varBindsUnmade = [VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache,
- varBindTableRow,
- lookupMib)
- for varBindTableRow in varBindTable]
+ varBindTable = [
+ VB_PROCESSOR.unmakeVarBinds(snmpEngine.cache,
+ varBindTableRow, lookupMib)
+ for varBindTableRow in varBindTable
+ ]
except Exception as e:
deferred.errback(Failure(e))
else:
- deferred.callback((errorStatus, errorIndex, varBindsUnmade))
+ deferred.callback((errorStatus, errorIndex, varBindTable))
addrName, paramsName = LCD.configure(
snmpEngine, authData, transportTarget, contextData.contextName)
+ varBinds = VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds)
+
deferred = Deferred()
cmdgen.BulkCommandGenerator().sendVarBinds(
snmpEngine, addrName, contextData.contextEngineId,
contextData.contextName, nonRepeaters, maxRepetitions,
- VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds),
- __cbFun,
- (options.get('lookupMib', True), deferred)
- )
+ varBinds, __cbFun, (options.get('lookupMib', True),
+ deferred))
+
return deferred
diff --git a/pysnmp/hlapi/v3arch/twisted/ntforg.py b/pysnmp/hlapi/v3arch/twisted/ntforg.py
index 5243c66f..3ea2aa59 100644
--- a/pysnmp/hlapi/v3arch/twisted/ntforg.py
+++ b/pysnmp/hlapi/v3arch/twisted/ntforg.py
@@ -21,6 +21,7 @@ __all__ = ['sendNotification']
VB_PROCESSOR = NotificationOriginatorVarBinds()
LCD = NotificationOriginatorLcdConfigurator()
+
def sendNotification(snmpEngine, authData, transportTarget, contextData,
notifyType, *varBinds, **options):
"""Sends SNMP notification.
@@ -145,27 +146,26 @@ def sendNotification(snmpEngine, authData, transportTarget, contextData,
...
>>> react(run)
(0, 0, [])
- >>>
-
"""
def __cbFun(snmpEngine, sendRequestHandle,
errorIndication, errorStatus, errorIndex,
varBinds, cbCtx):
+
lookupMib, deferred = cbCtx
if errorIndication:
deferred.errback(Failure(errorIndication))
+
else:
try:
- varBindsUnmade = VB_PROCESSOR.unmakeVarBinds(
- snmpEngine.cache, varBinds, lookupMib
- )
+ varBinds = VB_PROCESSOR.unmakeVarBinds(
+ snmpEngine.cache, varBinds, lookupMib)
except Exception as e:
deferred.errback(Failure(e))
else:
- deferred.callback((errorStatus, errorIndex, varBindsUnmade))
+ deferred.callback((errorStatus, errorIndex, varBinds))
notifyName = LCD.configure(snmpEngine, authData, transportTarget,
notifyType, contextData.contextName)
@@ -173,15 +173,13 @@ def sendNotification(snmpEngine, authData, transportTarget, contextData,
def __trapFun(deferred):
deferred.callback((0, 0, []))
+ varBinds = VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds)
+
deferred = Deferred()
ntforg.NotificationOriginator().sendVarBinds(
- snmpEngine,
- notifyName,
- contextData.contextEngineId,
- contextData.contextName,
- VB_PROCESSOR.makeVarBinds(snmpEngine.cache, varBinds),
- __cbFun,
+ snmpEngine, notifyName, contextData.contextEngineId,
+ contextData.contextName, varBinds, __cbFun,
(options.get('lookupMib', True), deferred)
)
diff --git a/pysnmp/hlapi/v3arch/twisted/transport.py b/pysnmp/hlapi/v3arch/twisted/transport.py
index 11119fc4..71b0337a 100644
--- a/pysnmp/hlapi/v3arch/twisted/transport.py
+++ b/pysnmp/hlapi/v3arch/twisted/transport.py
@@ -12,6 +12,7 @@ from pysnmp.hlapi.transport import AbstractTransportTarget
__all__ = ['UdpTransportTarget']
+
class UdpTransportTarget(AbstractTransportTarget):
"""Creates UDP/IPv4 configuration entry and initialize socket API if needed.
@@ -43,18 +44,17 @@ class UdpTransportTarget(AbstractTransportTarget):
>>> from pysnmp.hlapi.twisted import UdpTransportTarget
>>> UdpTransportTarget(('demo.snmplabs.com', 161))
UdpTransportTarget(('195.218.195.228', 161), timeout=1, retries=5, tagList='')
- >>>
-
"""
TRANSPORT_DOMAIN = udp.DOMAIN_NAME
PROTO_TRANSPORT = udp.UdpTwistedTransport
def _resolveAddr(self, transportAddr):
try:
- return socket.getaddrinfo(transportAddr[0],
- transportAddr[1],
- socket.AF_INET,
- socket.SOCK_DGRAM,
- socket.IPPROTO_UDP)[0][4][:2]
+ return socket.getaddrinfo(
+ transportAddr[0], transportAddr[1], socket.AF_INET,
+ socket.SOCK_DGRAM, socket.IPPROTO_UDP)[0][4][:2]
+
except socket.gaierror as exc:
- raise PySnmpError('Bad IPv4/UDP transport address %s: %s' % ('@'.join([str(x) for x in transportAddr]), exc))
+ raise PySnmpError(
+ 'Bad IPv4/UDP transport address %s: '
+ '%s' % ('@'.join(str(x) for x in transportAddr), exc))
diff --git a/pysnmp/hlapi/varbinds.py b/pysnmp/hlapi/varbinds.py
index d3742a75..0eed7e50 100644
--- a/pysnmp/hlapi/varbinds.py
+++ b/pysnmp/hlapi/varbinds.py
@@ -38,7 +38,9 @@ class CommandGeneratorVarBinds(MibViewControllerManager):
varBind = ObjectType(*varBind)
elif isinstance(varBind[0][0], tuple): # legacy
- varBind = ObjectType(ObjectIdentity(varBind[0][0][0], varBind[0][0][1], *varBind[0][1:]), varBind[1])
+ varBind = ObjectType(
+ ObjectIdentity(varBind[0][0][0], varBind[0][0][1],
+ *varBind[0][1:]), varBind[1])
else:
varBind = ObjectType(ObjectIdentity(varBind[0]), varBind[1])
@@ -50,7 +52,10 @@ class CommandGeneratorVarBinds(MibViewControllerManager):
def unmakeVarBinds(self, userCache, varBinds, lookupMib=True):
if lookupMib:
mibViewController = self.getMibViewController(userCache)
- varBinds = [ObjectType(ObjectIdentity(x[0]), x[1]).resolveWithMib(mibViewController) for x in varBinds]
+ varBinds = [
+ ObjectType(ObjectIdentity(x[0]),
+ x[1]).resolveWithMib(mibViewController)
+ for x in varBinds]
return varBinds
@@ -85,5 +90,9 @@ class NotificationOriginatorVarBinds(MibViewControllerManager):
def unmakeVarBinds(self, userCache, varBinds, lookupMib=False):
if lookupMib:
mibViewController = self.getMibViewController(userCache)
- varBinds = [ObjectType(ObjectIdentity(x[0]), x[1]).resolveWithMib(mibViewController) for x in varBinds]
+ varBinds = [
+ ObjectType(ObjectIdentity(x[0]),
+ x[1]).resolveWithMib(mibViewController)
+ for x in varBinds]
+
return varBinds