Compile SMIv1/v2 MIBs
*********************

Look up specific ASN.1 MIBs at configured local directories, compile
them into pysnmp form if not done yet and save Python modules as
plain-text files in a local directory.

Try to support both SMIv1 and SMIv2 flavors of SMI as well as popular
deviations from official syntax found in the wild.

When figuring out if compilation is needed, check all known places
where pysnmp MIBs could possibly be found.

You can force MIB re-compilation by passing rebuild flag to MIB
compiler (see below).

Default invocation of MIB compiler does not generate [potentially
large] comments and texts found in MIBs. If you need them in pysnmp
MIB modules, just pass genTexts flag to MIB compiler.

   from pysmi.reader import FileReader
   from pysmi.searcher import PyFileSearcher, PyPackageSearcher, StubSearcher
   from pysmi.writer import PyFileWriter
   from pysmi.parser import SmiStarParser
   from pysmi.codegen import PySnmpCodeGen
   from pysmi.compiler import MibCompiler

   inputMibs = ['IF-MIB', 'IP-MIB']
   srcDirectories = ['/usr/share/snmp/mibs']
   dstDirectory = '.pysnmp-mibs'

   # Initialize compiler infrastructure

   mibCompiler = MibCompiler(SmiStarParser(),
                             PySnmpCodeGen(),
                             PyFileWriter(dstDirectory))

   # search for source MIBs here
   mibCompiler.addSources(*[FileReader(x) for x in srcDirectories])

   # check compiled MIBs in our own productions
   mibCompiler.addSearchers(PyFileSearcher(dstDirectory))
   # ...and at default PySNMP MIBs packages
   mibCompiler.addSearchers(*[PyPackageSearcher(x) for x in PySnmpCodeGen.defaultMibPackages])

   # never recompile MIBs with MACROs
   mibCompiler.addSearchers(StubSearcher(*PySnmpCodeGen.baseMibs))

   # run [possibly recursive] MIB compilation
   results = mibCompiler.compile(*inputMibs)  #, rebuild=True, genTexts=True)

   print('Results: %s' % ', '.join(['%s:%s' % (x, results[x]) for x in results]))

"Download" script.
