def _compile_mib_to_json(mib, source_mib_directories, destination_directory, source, compiled_mibs_path): from pysmi.borrower import AnyFileBorrower from pysmi.codegen import JsonCodeGen from pysmi.compiler import MibCompiler from pysmi.parser import SmiV1CompatParser from pysmi.reader import getReadersFromUrls from pysmi.searcher import AnyFileSearcher, StubSearcher from pysmi.writer import FileWriter mib_stubs = JsonCodeGen.baseMibs compile_documentation = True # Compiler infrastructure code_generator = JsonCodeGen() file_writer = FileWriter(destination_directory).setOptions(suffix='.json') mib_compiler = MibCompiler(SmiV1CompatParser(tempdir=''), code_generator, file_writer) # use source_mib_directories as mibs source sources = [source] sources.extend(source_mib_directories) mib_compiler.addSources( *getReadersFromUrls(*sources, **dict(fuzzyMatching=True))) searchers = [ AnyFileSearcher(destination_directory).setOptions(exts=['.json']), StubSearcher(*mib_stubs) ] mib_compiler.addSearchers(*searchers) # borrowers, aka compiled mibs source borrowers = [ AnyFileBorrower(borrower_reader, genTexts=True).setOptions(exts=['.json']) for borrower_reader in getReadersFromUrls( *[compiled_mibs_path], **dict(lowcaseMatching=False)) ] mib_compiler.addBorrowers(borrowers) processed = mib_compiler.compile( mib, **dict( noDeps=False, rebuild=False, dryRun=False, dstTemplate=None, genTexts=compile_documentation, textFilter=False and (lambda symbol, text: text) or None, writeMibs=True, ignoreErrors=False, )) return processed
pyOptimizationLevel=pyOptimizationLevel) elif dstFormat == 'json': if not mibStubs: mibStubs = JsonCodeGen.baseMibs if not mibBorrowers: mibBorrowers = [('http://mibs.snmplabs.com/json/notexts/@mib@', False), ('http://mibs.snmplabs.com/json/fulltexts/@mib@', True)] if not dstDirectory: dstDirectory = os.path.join('.') # Compiler infrastructure borrowers = [AnyFileBorrower(x[1], genTexts=mibBorrowers[x[0]][1]).setOptions(exts=['.json']) for x in enumerate(getReadersFromUrls(*[m[0] for m in mibBorrowers], **dict(lowcaseMatching=False)))] searchers = [AnyFileSearcher(dstDirectory).setOptions(exts=['.json']), StubSearcher(*mibStubs)] codeGenerator = JsonCodeGen() fileWriter = FileWriter(dstDirectory).setOptions(suffix='.json') elif dstFormat == 'null': if not mibStubs: mibStubs = NullCodeGen.baseMibs if not mibBorrowers: mibBorrowers = [('http://mibs.snmplabs.com/null/notexts/@mib@', False), ('http://mibs.snmplabs.com/null/fulltexts/@mib@', True)]