diff options
author | elie <elie> | 2005-06-14 10:16:58 +0000 |
---|---|---|
committer | elie <elie> | 2005-06-14 10:16:58 +0000 |
commit | bf4ff68c931266c69d358842459839c66b092e68 (patch) | |
tree | afd8eac72ed4f0b055c1c47f5bb42a4ebcac26ab /pysnmp/smi/view.py | |
parent | b6541b6239baac0bef715670dba44a51970bc3b4 (diff) | |
download | pysnmp-git-bf4ff68c931266c69d358842459839c66b092e68.tar.gz |
* loadMissingModule() added
* excessive exceptions reduced
Diffstat (limited to 'pysnmp/smi/view.py')
-rw-r--r-- | pysnmp/smi/view.py | 89 |
1 files changed, 23 insertions, 66 deletions
diff --git a/pysnmp/smi/view.py b/pysnmp/smi/view.py index 7a61d661..ac309377 100644 --- a/pysnmp/smi/view.py +++ b/pysnmp/smi/view.py @@ -115,6 +115,12 @@ class MibViewController: self.lastBuildId = self.mibBuilder.lastBuildId + def loadMissingModule(self, modName): + self.__indexMib() + if self.__mibSymbolsIdx.has_key(modName): + return + apply(self.mibBuilder.loadModules, (modName,)) + # Module management def getFirstModuleName(self): @@ -122,16 +128,14 @@ class MibViewController: modNames = self.__mibSymbolsIdx.keys() if modNames: return modNames[0] - raise error.NoSuchModuleError( - 'No modules loaded at %s' % self - ) + raise error.SmiError('No modules loaded at %s' % self) def getNextModuleName(self, modName): self.__indexMib() try: return self.__mibSymbolsIdx.nextKey(modName) except KeyError: - raise error.NoSuchModuleError( + raise error.SmiError( 'No module next to %s at %s' % (modName, self) ) @@ -167,7 +171,7 @@ class MibViewController: self.__indexMib() mibMod = self.__mibSymbolsIdx.get(modName) if mibMod is None: - raise error.NoSuchModuleError( + raise error.SmiError( 'No module %s at %s' % (modName, self) ) oid, label, suffix = self.__getOidLabel( @@ -175,7 +179,7 @@ class MibViewController: ) if oid == label: raise error.NoSuchInstanceError( - 'Can\'t resolve node name %s::%s at %s' % + str='Can\'t resolve node name %s::%s at %s' % (modName, nodeName, self) ) return oid, label, suffix @@ -184,13 +188,13 @@ class MibViewController: self.__indexMib() mibMod = self.__mibSymbolsIdx.get(modName) if mibMod is None: - raise error.NoSuchModuleError( + raise error.SmiError( 'No module %s at %s' % (modName, self) ) oid = mibMod['varToNameIdx'].get(nodeName) if oid is None: raise error.NoSuchInstanceError( - 'No such symbol %s::%s at %s' % (modName, nodeName, self) + str='No such symbol %s::%s at %s' % (modName, nodeName, self) ) return self.getNodeNameByOid(oid, modName) @@ -204,12 +208,12 @@ class MibViewController: self.__indexMib() mibMod = self.__mibSymbolsIdx.get(modName) if mibMod is None: - raise error.NoSuchModuleError( + raise error.SmiError( 'No module %s at %s' % (modName, self) ) if not mibMod['oidToLabelIdx']: raise error.NoSuchInstanceError( - 'No variables at MIB module %s at %s' % (modName, self) + str='No variables at MIB module %s at %s' % (modName, self) ) oid, label = mibMod['oidToLabelIdx'].items()[0] return oid, label, () @@ -223,20 +227,21 @@ class MibViewController: ) except KeyError: raise error.NoSuchInstanceError( - 'No name next to %s::%s at %s' % (modName, nodeName, self) + str='No name next to %s::%s at %s' % (modName, nodeName, self) ) def getParentNodeName(self, nodeName, modName=''): oid, label, suffix = self.getNodeName(nodeName, modName) if len(oid) < 2: raise error.NoSuchInstanceError( - 'No parent name for %s::%s at %s' % (modName, nodeName, self) + str='No parent name for %s::%s at %s' % + (modName, nodeName, self) ) return oid[:-1], label[:-1], oid[-1:] + suffix def getNodeLocation(self, nodeName, modName=''): oid, label, suffix = self.getNodeName(nodeName, modName) - return self.__mibSymbolsIdx['']['oidToModIdx'][oid], label[-1] + return self.__mibSymbolsIdx['']['oidToModIdx'][oid], label[-1], suffix # MIB type management @@ -244,13 +249,13 @@ class MibViewController: self.__indexMib() mibMod = self.__mibSymbolsIdx.get(modName) if mibMod is None: - raise error.NoSuchModuleError( + raise error.SmiError( 'No module %s at %s' % (modName, self) ) m = mibMod['typeToModIdx'].get(typeName) if m is None: raise error.NoSuchInstanceError( - 'No such type %s::%s at %s' % (modName, typeName, self) + str='No such type %s::%s at %s' % (modName, typeName, self) ) return m, typeName @@ -258,12 +263,12 @@ class MibViewController: self.__indexMib() mibMod = self.__mibSymbolsIdx.get(modName) if mibMod is None: - raise error.NoSuchModuleError( + raise error.SmiError( 'No module %s at %s' % (modName, self) ) if not mibMod['typeToModIdx']: raise error.NoSuchInstanceError( - 'No types at MIB module %s at %s' % (modName, self) + str='No types at MIB module %s at %s' % (modName, self) ) t = mibMod['typeToModIdx'].keys()[0] return mibMod['typeToModIdx'][t], t @@ -274,57 +279,9 @@ class MibViewController: return self.__mibSymbolsIdx[m]['typeToModIdx'].nextKey(t) except KeyError: raise error.NoSuchInstanceError( - 'No type next to %s::%s at %s' % (modName, typeName, self) + str='No type next to %s::%s at %s' % (modName, typeName, self) ) -if __name__ == '__main__': - from pysnmp.smi.builder import MibBuilder - - mibBuilder = MibBuilder().loadModules() - mibView = MibViewController(mibBuilder) -# print mibView.getNodeName('iso') -# print mibView.getNodeName('sysDescr') -# print mibView.getNodeName('sysObjectID', 'SNMPv2-MIB') -# print mibView.getNodeName((1, 3, 6, 1, 2, 1, 1, 3)) - print mibView.getNodeName((1, 3, 6, 1, 2, 1, 1, 'sysContact')) - - print 'MIB tree traversal' - - oid, label, suffix = mibView.getFirstNodeName() - - while 1: - try: - modName, nodeDesc = mibView.getNodeLocation(oid) - print '%s::%s == %s' % (modName, nodeDesc, oid) - oid, label, suffix = mibView.getNextNodeName(oid) - except error.NoSuchInstanceError: - break - - print 'Modules traversal' - modName = mibView.getFirstModuleName() - while 1: - print modName - try: - modName = mibView.getNextModuleName(modName) - except error.NoSuchModuleError: - break - - print 'TEXTUAL-CONVENTION pretty print' - node, = apply( - mibBuilder.importSymbols, mibView.getNodeLocation('snmpEngineID') - ) - print node.syntax.prettyGet() - - print 'Conceptual table indices convertion' - rowNode, = apply( - mibBuilder.importSymbols, mibView.getNodeLocation('snmpCommunityEntry') - ) - print rowNode - entryOid = rowNode.getInstIdFromIndices('router') - print entryOid - print rowNode.getIndicesFromInstId(entryOid) - - # XXX # indices -> ../ # repr node |