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 setUp(self): ast = parserFactory()().parse(self.__class__.__doc__)[0] mibInfo, symtable = SymtableCodeGen().genCode(ast, {}, genTexts=True) self.mibInfo, pycode = PySnmpCodeGen().genCode(ast, { mibInfo.name: symtable }, genTexts=True) codeobj = compile(pycode, 'test', 'exec') self.ctx = { 'mibBuilder': MibBuilder() } exec(codeobj, self.ctx, self.ctx)
def setUp(self): ast = parserFactory()().parse(self.__class__.__doc__)[0] mibInfo, symtable = SymtableCodeGen().genCode(ast, {}, genTexts=True) self.mibInfo, pycode = PySnmpCodeGen().genCode(ast, {mibInfo.name: symtable}, genTexts=True) codeobj = compile(pycode, "test", "exec") mibBuilder = MibBuilder() mibBuilder.loadTexts = True self.ctx = {"mibBuilder": mibBuilder} exec(codeobj, self.ctx, self.ctx)
def setUp(self): ast = parserFactory()().parse(self.__class__.__doc__)[0] mibInfo, symtable = SymtableCodeGen().genCode(ast, {}, genTexts=True) self.mibInfo, pycode = PySnmpCodeGen().genCode(ast, {mibInfo.name: symtable}, genTexts=True) codeobj = compile(pycode, 'test', 'exec') mibBuilder = MibBuilder() mibBuilder.loadTexts = True self.ctx = {'mibBuilder': mibBuilder} exec(codeobj, self.ctx, self.ctx)
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)) 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 )
from pysmi.reader.callback import CallbackReader from pysmi.searcher.stub import StubSearcher from pysmi.writer.callback import CallbackWriter from pysmi.parser.smi import parserFactory from pysmi.codegen.pysnmp import PySnmpCodeGen, baseMibs from pysmi.compiler import MibCompiler # debug.setLogger(debug.Debug('compiler')) inputMibs = ['IF-MIB', 'IP-MIB'] srcDir = '/usr/share/snmp/mibs/' # we will read MIBs from here # Initialize compiler infrastructure mibCompiler = MibCompiler( parserFactory()(), PySnmpCodeGen(), # out own callback function stores results in its own way CallbackWriter(lambda m, d, c: sys.stdout.write(d)) ) # our own callback function serves as a MIB source here mibCompiler.addSources( CallbackReader(lambda m, c: open(srcDir+m+'.txt').read()) ) # never recompile MIBs with MACROs mibCompiler.addSearchers(StubSearcher(*baseMibs)) # run non-recursive MIB compilation results = mibCompiler.compile(*inputMibs, **dict(noDeps=True))
from pysmi import debug #debug.setLogger(debug.Debug('all')) 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( parserFactory(**smiV1Relaxed)(), 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(*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]))
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)
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))
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 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))
from pysmi.writer.pyfile import PyFileWriter from pysmi.parser.smi import parserFactory from pysmi.parser.dialect import smiV1Relaxed from pysmi.codegen.pysnmp import PySnmpCodeGen, defaultMibPackages, baseMibs from pysmi.compiler import MibCompiler from pysmi import debug #debug.setLogger(debug.Debug('reader', 'compiler')) inputMibs = [ 'IF-MIB', 'IP-MIB' ] srcDirectories = [ '/usr/share/snmp/mibs' ] dstDirectory = '.pysnmp-mibs' # Initialize compiler infrastructure mibCompiler = MibCompiler(parserFactory(**smiV1Relaxed)(), 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 defaultMibPackages ]) # never recompile MIBs with MACROs mibCompiler.addSearchers(StubSearcher(*baseMibs)) # run [possibly recursive] MIB compilation
# # This file is part of pysmi software. # # Copyright (c) 2015-2016, Ilya Etingof <*****@*****.**> # License: http://pysmi.sf.net/license.html # from pysmi.parser.smi import parserFactory from pysmi.parser.dialect import smiV1 # compatibility stub SmiV1Parser = parserFactory(**smiV1)
# # This file is part of pysmi software. # # Copyright (c) 2015-2019, Ilya Etingof <*****@*****.**> # License: http://snmplabs.com/pysmi/license.html # from pysmi.parser.smi import parserFactory from pysmi.parser.dialect import smiV2 # compatibility stub SmiV2Parser = parserFactory(**smiV2)
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 writer = CFileWriter(dstDirectory) mibCompiler = MibCompiler(parserFactory(**smiV1Relaxed)(tempdir=cacheDirectory), NetSnmpCodeGen(writer), 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)))
Try various filenames while searching for MIB module: %s """ % (', '.join(sorted(mibSources)), ', '.join( sorted([x[0] for x in mibBorrowers if x[1] == genMibTextsFlag])), ', '.join(mibSearchers), dstDirectory, ', '.join(sorted(mibStubs)), ', '.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 writer = CFileWriter(dstDirectory) mibCompiler = MibCompiler( parserFactory(**smiV1Relaxed)(tempdir=cacheDirectory), NetSnmpCodeGen( writer, **dict(mappingFile=mappingFile, clangFormatPath=clangFormatPath, jsonTables=jsonTables)), writer) try: mibCompiler.addSources(*getReadersFromUrls( *mibSources, **dict(fuzzyMatching=doFuzzyMatchingFlag))) mibCompiler.addSearchers(PyFileSearcher(dstDirectory)) for mibSearcher in mibSearchers: mibCompiler.addSearchers(PyPackageSearcher(mibSearcher))
# # This file is part of pysmi software. # # Copyright (c) 2015-2016, Ilya Etingof <*****@*****.**> # License: http://pysmi.sf.net/license.html # from pysmi.parser.smi import parserFactory from pysmi.parser.dialect import smiV1Relaxed # compatibility stub SmiV1CompatParser = parserFactory(**smiV1Relaxed)
Generate texts in MIBs: %s Try various filenames while searching for MIB module: %s """ % (', '.join(sorted(mibSources)), ', '.join( sorted([x[0] for x in mibBorrowers if x[1] == genMibTextsFlag])), ', '.join(mibSearchers), dstDirectory, ', '.join(sorted(mibStubs)), ', '.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(*[
from pysmi.searcher.stub import StubSearcher from pysmi.writer.callback import CallbackWriter from pysmi.parser.smi import parserFactory from pysmi.codegen.pysnmp import PySnmpCodeGen, baseMibs from pysmi.compiler import MibCompiler from pysmi import debug #debug.setLogger(debug.Debug('compiler')) inputMibs = ['IF-MIB', 'IP-MIB'] srcDir = '/usr/share/snmp/mibs/' # we will read MIBs from here # Initialize compiler infrastructure mibCompiler = MibCompiler( parserFactory()(), PySnmpCodeGen(), # out own callback function stores results in its own way CallbackWriter(lambda m, d, c: sys.stdout.write(d))) # our own callback function serves as a MIB source here mibCompiler.addSources( CallbackReader(lambda m, c: open(srcDir + m + '.txt').read())) # never recompile MIBs with MACROs mibCompiler.addSearchers(StubSearcher(*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]))
from pysmi.parser.dialect import smiV1Relaxed from pysmi.codegen.pysnmp import PySnmpCodeGen, baseMibs 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( parserFactory(**smiV1Relaxed)(), 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(*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
from pysmi.parser.smi import parserFactory from pysmi.parser.dialect import smiV1Relaxed # compatibility stub SmiV1CompatParser = parserFactory(**smiV1Relaxed)