diff options
Diffstat (limited to 'pysnmp/smi/compiler.py')
-rw-r--r-- | pysnmp/smi/compiler.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/pysnmp/smi/compiler.py b/pysnmp/smi/compiler.py new file mode 100644 index 0000000..80e041c --- /dev/null +++ b/pysnmp/smi/compiler.py @@ -0,0 +1,62 @@ +# +# Attach PySMI MIB compiler to PySNMP MIB builder and configure +# both accordingly. +# +import os +import sys +try: + from pysmi.reader.url import getReadersFromUrls + from pysmi.searcher.pypackage import PyPackageSearcher + from pysmi.searcher.stub import StubSearcher + from pysmi.borrower.pyfile import PyFileBorrower + from pysmi.writer.pyfile import PyFileWriter + from pysmi.parser.smi import parserFactory + from pysmi.parser.dialect import smiV1Relaxed + from pysmi.codegen.pysnmp import PySnmpCodeGen, baseMibs + from pysmi.compiler import MibCompiler + +except ImportError: + from pysnmp.smi import error + + def addMibCompiler(mibBuilder, + sources=defaultSources, + destination=defaultDest, + borrowers=defaultBorrowers): + raise error.SmiError('MIB compiler not available (pysmi not installed)') + +else: + defaultSources = [ 'file:///usr/share/snmp/mibs' ] + + if sys.platform[:3] == 'win': + defaultDest = os.path.join(os.path.expanduser("~"), + 'PySNMP Configuration', 'mibs') + else: + defaultDest = os.path.join(os.path.expanduser("~"), '.pysnmp', 'mibs') + + defaultBorrowers = [] + + def addMibCompiler(mibBuilder, + sources=defaultSources, + destination=defaultDest, + borrowers=defaultBorrowers): + + compiler = MibCompiler( + parserFactory(**smiV1Relaxed)(), + PySnmpCodeGen(), + PyFileWriter(destination) + ) + + compiler.addSources(*getReadersFromUrls(*sources)) + + compiler.addSearchers( + StubSearcher(*baseMibs) # XXX + ) + compiler.addSearchers( + *[ PyPackageSearcher(x.fullPath()) for x in mibBuilder.getMibSources() ] + ) + + compiler.addBorrowers( + *[ PyFileBorrower(x) for x in getReadersFromUrls(*borrowers, originalMatching=False, lowcaseMatching=False) ] + ) + + mibBuilder.setMibCompiler(compiler, destination) |