def addMibCompiler(mibBuilder, **kwargs): if kwargs.get('ifNotAdded') and mibBuilder.getMibCompiler(): return compiler = MibCompiler( parserFactory(**smiV1Relaxed)(), PySnmpCodeGen(), PyFileWriter(kwargs.get('destination') or DEFAULT_DEST)) compiler.addSources( *getReadersFromUrls(*kwargs.get('sources') or DEFAULT_SOURCES)) compiler.addSearchers( StubSearcher(*baseMibs)) compiler.addSearchers( *[PyPackageSearcher(x.fullPath()) for x in mibBuilder.getMibSources()]) compiler.addBorrowers( *[PyFileBorrower(x, genTexts=mibBuilder.loadTexts) for x in getReadersFromUrls( *kwargs.get('borrowers') or DEFAULT_BORROWERS, lowcaseMatching=False)]) mibBuilder.setMibCompiler( compiler, kwargs.get('destination') or DEFAULT_DEST)
def addMibCompiler(mibBuilder, **kwargs): if kwargs.get('ifNotAdded') and mibBuilder.getMibCompiler(): return compiler = MibCompiler( parserFactory(**smiV1Relaxed)(), PySnmpCodeGen(), PyFileWriter(kwargs.get('destination') or defaultDest) ) compiler.addSources(*getReadersFromUrls(*kwargs.get('sources') or defaultSources)) compiler.addSearchers( StubSearcher(*baseMibs) # XXX ) compiler.addSearchers( *[ PyPackageSearcher(x.fullPath()) for x in mibBuilder.getMibSources() ] ) compiler.addBorrowers( *[ PyFileBorrower(x, genTexts=mibBuilder.loadTexts) for x in getReadersFromUrls(*kwargs.get('borrowers') or defaultBorrowers, **dict(lowcaseMatching=False)) ] ) mibBuilder.setMibCompiler( compiler, kwargs.get('destination') or defaultDest )
', '.join(sorted(inputMibs)), dstFormat, cacheDirectory or 'not used', nodepsFlag and 'no' or 'yes', rebuildFlag and 'yes' or 'no', dryrunFlag and 'yes' or 'no', pyCompileFlag and 'yes' or 'no', pyOptimizationLevel, ignoreErrorsFlag and 'yes' or 'no', buildIndexFlag and 'yes' or 'no', genMibTextsFlag and 'yes' or 'no', doFuzzyMatchingFlag and 'yes' or 'no')) # Initialize compiler infrastructure mibCompiler = MibCompiler( parserFactory(**smiV1Relaxed)(tempdir=cacheDirectory), NetSnmpCodeGen(), PyFileWriter(dstDirectory).setOptions( pyCompile=pyCompileFlag, pyOptimizationLevel=pyOptimizationLevel)) try: mibCompiler.addSources(*getReadersFromUrls( *mibSources, **dict(fuzzyMatching=doFuzzyMatchingFlag))) mibCompiler.addSearchers(PyFileSearcher(dstDirectory)) for mibSearcher in mibSearchers: mibCompiler.addSearchers(PyPackageSearcher(mibSearcher)) mibCompiler.addSearchers(StubSearcher(*mibStubs)) mibCompiler.addBorrowers(*[ PyFileBorrower(x[1], genTexts=mibBorrowers[x[0]][1]) for x in enumerate( getReadersFromUrls(*[m[0] for m in mibBorrowers], **dict(lowcaseMatching=False))) ])
def storeMib(config, mib, mibdir=None, fetchRemote=False): """ A function to compile, store new mibs Mostly got the code from https://raw.githubusercontent.com/etingof/pysmi/master/scripts/mibdump.py """ cacheDir = '/tmp/' log.debug("Collecting MIB resources") mibSearchers = defaultMibPackages log.debug("Searches") mibStubs = [x for x in baseMibs if x not in fakeMibs] log.debug("Stubs") mibSources = ["file://{}".format(x) for x in config["mibs"]["locations"]] log.debug("MIB sources from config") if mibdir != None: mibSources.append("file://{}".format(mibdir)) log.debug("MIB source from param") # if "mib" is a path, add it to the sources. if os.path.sep in mib: mibSources.append(os.path.abspath(os.path.dirname(mib))) log.debug("MIB source from '{}'".format(mib)) if fetchRemote: mibSources.append('http://mibs.snmplabs.com/asn1/@mib@') log.debug("Added remote mib source.") log.info("Using MIB sources: [{}]".format(", ".join(mibSources))) log.info("Using dest: {}".format(config['mibs']['compiled'])) log.info("Initialize compiler") try: mibCompiler = MibCompiler( parserFactory(**smiV1Relaxed)(tempdir=cacheDir), PySnmpCodeGen(), PyFileWriter(config['mibs']['compiled']).setOptions( pyCompile=True, pyOptimizationLevel=0)) print(mibSources) except Exception as e: log.error("Exception! {}".format(e)) log.debug("Adding sources to compiler") try: mibCompiler.addSources( *getReadersFromUrls(*mibSources, **dict(fuzzyMatching=True))) mibCompiler.addSearchers(PyFileSearcher(config['mibs']['compiled'])) for mibSearcher in mibSearchers: mibCompiler.addSearchers(PyPackageSearcher(mibSearcher)) mibCompiler.addSearchers(StubSearcher(*mibStubs)) log.debug("Starting compilation of {}".format(mib)) processed = mibCompiler.compile( *[mib], **dict(noDeps=False, rebuild=False, dryRun=False, genTexts=False, ignoreErrors=False)) mibCompiler.buildIndex(processed, dryRun=False, ignoreErrors=False) except smiError.PySmiError as e: log.error("Compilation failed: {}".format(e)) raise exceptions.MibCompileError(e) errors = [(x, processed[x].error) for x in sorted(processed) if processed[x] == 'failed'] compiled = [(x, processed[x].alias) for x in sorted(processed) if processed[x] == 'compiled'] missing = [x for x in sorted(processed) if processed[x] == 'missing'] for mib in compiled: log.info("Compiled {} ({})".format(mib[0], mib[1])) if len(errors) > 0 or len(missing) > 0: for error in errors: log.error("Could not process {} MIB: {}".format( error[0], error[1])) for mis in missing: log.error("Could not find {}".format(mis)) raise exceptions.MibCompileFailed(errors) log.info("Done without errors") print(processed)
doFuzzyMatchingFlag and 'yes' or 'no')) # Initialize compiler infrastructure mibCompiler = MibCompiler( parserFactory(**smiV1Relaxed)(tempdir=cacheDirectory), NetSnmpCodeGen(), PyFileWriter(dstDirectory).setOptions( pyCompile=pyCompileFlag, pyOptimizationLevel=pyOptimizationLevel ) ) try: mibCompiler.addSources( *getReadersFromUrls( *mibSources, **dict(fuzzyMatching=doFuzzyMatchingFlag) ) ) mibCompiler.addSearchers(PyFileSearcher(dstDirectory)) for mibSearcher in mibSearchers: mibCompiler.addSearchers(PyPackageSearcher(mibSearcher)) mibCompiler.addSearchers(StubSearcher(*mibStubs)) mibCompiler.addBorrowers( *[ PyFileBorrower(x[1], genTexts=mibBorrowers[x[0]][1]) for x in enumerate(getReadersFromUrls(*[m[0] for m in mibBorrowers], **dict(lowcaseMatching=False))) ] ) processed = mibCompiler.compile(*inputMibs,
doFuzzyMatchingFlag and 'yes' or 'no')) # Initialize compiler infrastructure mibCompiler = MibCompiler( parserFactory(**smiV1Relaxed)(tempdir=cacheDirectory), PySnmpCodeGen(), PyFileWriter(dstDirectory).setOptions( pyCompile=pyCompileFlag, pyOptimizationLevel=pyOptimizationLevel ) ) try: mibCompiler.addSources( *getReadersFromUrls( *mibSources, **dict(fuzzyMatching=doFuzzyMatchingFlag) ) ) mibCompiler.addSearchers(PyFileSearcher(dstDirectory)) for mibSearcher in mibSearchers: mibCompiler.addSearchers(PyPackageSearcher(mibSearcher)) mibCompiler.addSearchers(StubSearcher(*mibStubs)) mibCompiler.addBorrowers( *[PyFileBorrower(x[1], genTexts=mibBorrowers[x[0]][1]) for x in enumerate(getReadersFromUrls(*[m[0] for m in mibBorrowers], **dict(lowcaseMatching=False)))] )
ignoreErrorsFlag and 'yes' or 'no', buildIndexFlag and 'yes' or 'no', genMibTextsFlag and 'yes' or 'no', doFuzzyMatchingFlag and 'yes' or 'no')) # Initialize compiler infrastructure writer = CFileWriter(dstDirectory) mibCompiler = MibCompiler(parserFactory(**smiV1Relaxed)(tempdir=cacheDirectory), NetSnmpCodeGen(writer,**dict(mappingFile=mappingFile, clangFormatPath=clangFormatPath, jsonTables=jsonTables,scalarMapping=scalarMapping)), writer) try: mibCompiler.addSources(*getReadersFromUrls(*mibSources, **dict(fuzzyMatching=doFuzzyMatchingFlag))) mibCompiler.addSearchers(PyFileSearcher(dstDirectory)) for mibSearcher in mibSearchers: mibCompiler.addSearchers(PyPackageSearcher(mibSearcher)) mibCompiler.addSearchers(StubSearcher(*mibStubs)) mibCompiler.addBorrowers(*[ PyFileBorrower(x[1], genTexts=mibBorrowers[x[0]][1]) for x in enumerate(getReadersFromUrls(*[m[0] for m in mibBorrowers], **dict(lowcaseMatching=False))) ]) processed = mibCompiler.compile(*inputMibs, **dict(noDeps=nodepsFlag, rebuild=rebuildFlag, dryRun=dryrunFlag, genTexts=genMibTextsFlag,