Пример #1
0
class Database:
    # TODO: sanitise dbfilename
    def __init__(self, dbfilename):
        try:
            self.name = dbfilename
            self.dbsemaphore = QSemaphore(
                1)  # to control concurrent write access to db
            metadata.bind = 'sqlite:///' + dbfilename
            #		metadata.bind.echo = True									# uncomment to see detailed database logs
            setup_all()
            create_all()
        except:
            print '[-] Could not create database. Please try again.'

    def openDB(self, dbfilename):
        try:
            self.name = dbfilename
            metadata.bind = 'sqlite:///' + dbfilename
            #		metadata.bind.echo = True									# uncomment to see detailed database logs
            setup_all()
        except:
            print '[-] Could not open database file. Is the file corrupted?'

    # this function commits any modified data to the db, ensuring no concurrent write access to the DB (within the same thread)
    # if you code a thread that writes to the DB, make sure you acquire/release at the beginning/end of the thread (see nmap importer)
    def commit(self):
        self.dbsemaphore.acquire()
        session.commit()
        self.dbsemaphore.release()
Пример #2
0
class Database:
    # TODO: sanitise dbfilename
    def __init__(self, dbfilename):
        try:
            self.name = dbfilename
            self.dbsemaphore = QSemaphore(1)  # to control concurrent write access to db
            metadata.bind = "sqlite:///" + dbfilename
            # 		metadata.bind.echo = True									# uncomment to see detailed database logs
            setup_all()
            create_all()
        except:
            print "[-] Could not create database. Please try again."

    def openDB(self, dbfilename):
        try:
            self.name = dbfilename
            metadata.bind = "sqlite:///" + dbfilename
            # 		metadata.bind.echo = True									# uncomment to see detailed database logs
            setup_all()
        except:
            print "[-] Could not open database file. Is the file corrupted?"

            # this function commits any modified data to the db, ensuring no concurrent write access to the DB (within the same thread)
            # if you code a thread that writes to the DB, make sure you acquire/release at the beginning/end of the thread (see nmap importer)

    def commit(self):
        self.dbsemaphore.acquire()
        session.commit()
        self.dbsemaphore.release()
Пример #3
0
class TypeWorker(QThread):
  def __init__(self, *args):
    QThread.__init__(self)
    self.typeQueue = Queue()
    self.regImage = re.compile("(JPEG|JPG|jpg|jpeg|GIF|gif|bmp|BMP|png|PNG|pbm|PBM|pgm|PGM|ppm|PPM|xpm|XPM|xbm|XBM|TIFF|tiff).*", re.IGNORECASE)
    self.typeQueue = []
    self.setUniq = set()
    self.qmutex = QMutex()
    self.qsem = QSemaphore()

  def enqueue(self, parent, index, node):
    self.qmutex.lock()
    if long(node.this) not in self.setUniq:
       self.typeQueue.insert(0, (parent, index, node))
       self.setUniq.add(long(node.this))
       self.qsem.release()
    self.qmutex.unlock()

  def clear(self):
    self.qmutex.lock()
    self.typeQueue = []
    self.setUniq.clear()
    self.qsem.acquire(self.qsem.available())
    self.qmutex.unlock()

  def get(self):
    self.qsem.acquire()
    self.qmutex.lock()
    res = self.typeQueue.pop()
    self.setUniq.remove(long(res[2].this))
    self.qmutex.unlock()
    return res

  def isImage(self, ftype):
    res = self.regImage.search(ftype)
    return res

  def run(self):
     count = 0
     while True:
       (parent, index, node) = self.get()
       if node.size():
         ftype = str(node.dataType())
         if parent.imagesthumbnails and self.isImage(ftype):
           thumb = ImageThumb()
           img = thumb.getImage(ftype, node, index)
           if img:
             parent.emit(SIGNAL('dataImage'), index, node, img)
Пример #4
0
class Collect(QRunnable):
    """Collect results from engines and emit signal."""

    def __init__(self, engines, finished):
        super(Collect, self).__init__()
        self.engines = engines
        self.semaphore = QSemaphore()
        self.queue = Queue()
        self.finished = finished
        for engine in engines:
            engine.query_finished.connect(self.handle_query_finished)

    def run(self):
        for i in range(len(self.engines)):
            self.semaphore.acquire()
        self.finished(dump_queue(self.queue))

    @pyqtSlot(object)
    def handle_query_finished(self, response):
        self.queue.put(response)
        self.semaphore.release()