# Compile MIBs from web

Look up specific ASN.1 MIBs at configured Web and FTP sites, compile them into pysnmp form 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.

In this example we disable automatic dependency checking on MIB compilation using noDeps flag.

Also, we do not check if target file already exists thus MIB compilation occurs on every invocation.

    from pysmi.reader import HttpReader
    from pysmi.reader import FtpReader
    from pysmi.searcher import 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']
    httpSources = [
        ('mibs.snmplabs.com', 80, '/asn1/@mib@')
    ]
    ftpSources = [
        ('ftp.cisco.com', '/pub/mibs/v2/@mib@')
    ]
    dstDirectory = '.pysnmp-mibs'

    # Initialize compiler infrastructure

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

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

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

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

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

`Download` script.