Borrow pysnmp MIBs on failure
*****************************

Look up specific ASN.1 MIBs at configured Web/FTP sites. If no
required MIB is found or its compilation fails for some reason,
attempt to download precompiled version of failed MIB and store it
locally as if we had compiled it.

   from pysmi.reader import HttpReader
   from pysmi.searcher import PyFileSearcher
   from pysmi.searcher import StubSearcher
   from pysmi.borrower import PyFileBorrower
   from pysmi.writer import PyFileWriter
   from pysmi.parser import SmiStarParser
   from pysmi.codegen import PySnmpCodeGen
   from pysmi.compiler import MibCompiler
   # from pysmi import debug

   # debug.setLogger(debug.Debug('borrower', 'reader', 'searcher'))

   inputMibs = ['BORROWED-MIB']
   httpSources = [ 
       ('mibs.snmplabs.com', 80, '/asn1/@mib@')
   ]
   httpBorrowers = [
       ('mibs.snmplabs.com', 80, '/pysnmp/notexts/@mib@')
   ]
   dstDirectory = '.pysnmp-mibs'

   # Initialize compiler infrastructure

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

   # search for source MIBs at Web sites
   mibCompiler.addSources(*[HttpReader(*x) for x in httpSources])

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

   # check compiled/borrowed MIBs in our own productions
   mibCompiler.addSearchers(PyFileSearcher(dstDirectory))

   # search for compiled MIBs at Web sites if source is not available or broken
   mibCompiler.addBorrowers(*[PyFileBorrower(HttpReader(*x)).setOptions(genTexts=False) for x in httpBorrowers])

   # run non-recursive MIB compilation
   results = mibCompiler.compile(*inputMibs)

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

"Download" script.
