class SnapshotFile (AbstractMibInstrumController): openedQueue = [] maxQueueEntries = 15 # max number of open text and index files def __init__(self, textFile, textParser): self.__textParser = textParser self.__textFile = textFile self._db = Database(self.__textFile, self.__textParser) def indexText(self): self._db.create() return self def close(self): self._db.close() def openDb(self): if not self._db.isOpen(): if len(SnapshotFile.openedQueue) > self.maxQueueEntries: SnapshotFile.openedQueue[0].close() del SnapshotFile.openedQueue[0] SnapshotFile.openedQueue.append(self) self._db.open() def processVarBinds(self, varBinds, nextFlag=False, setFlag=False): self.openDb() rspVarBinds = [] for oid,_ in varBinds: textOid = str( univ.OctetString( oid2str(oid) ) ) if nextFlag: try: (_oid, _, _tag, _val) = self._db.lookup_next( textOid ) subtreeFlag = False except KeyError: rspVarBinds.append((oid, exval.endOfMib)) continue else: try: (_oid, subtreeFlag, _tag, _val) = self._db.lookup( textOid ) subtreeFlag, int(subtreeFlag), True except KeyError: rspVarBinds.append((oid, exval.noSuchInstance)) continue # _oid = parser.evaluateOid(_oid) # _,_,_val = parser.evaluateValue(_oid,_tag,_val) rspVarBinds.append ( ( _oid, _val ) ) return rspVarBinds def __str__(self): return str(self._db)