Example #1
0
class RemoteFileUploader():
    """A class that allows parallel file uploading.  Open with the with
    statement.  Provides a writable object where bytes are supposed to
    be written to."""

    def __init__(self, host, port, filename):
        self.url = "http://{}:{}/".format(host, port)
        self.filename = filename
        self.queue = CloseableQueue()
        self.rw = ReaderWorker(self.queue, self.url)
        self.queue_writer = QueueWriter(self.queue)

    def __enter__(self):
        self.rw.start()
        return self.queue_writer

    def __exit__(self, type, value, tb):
        self.queue.close()
        self.rw.join()
        print('Data sent to server.')
Example #2
0
 def __init__(self, host, port, filename):
     self.url = "http://{}:{}/".format(host, port)
     self.filename = filename
     self.queue = CloseableQueue()
     self.rw = ReaderWorker(self.queue, self.url)
     self.queue_writer = QueueWriter(self.queue)
Example #3
0
 def setUp(self):
     self.queue = CloseableQueue()
Example #4
0
 def _get(self):
     if self.fail_next_get:
         self.fail_next_get = False
         raise FailingQueueException, "You Lose"
     return CloseableQueue._get(self)
Example #5
0
class CloseableQueueTest(TestCase):
    def setUp(self):
        self.queue = CloseableQueue()

    def _do_work(self, i):
        return i + 1

    def _worker(self):
        while True:
            item = self.queue.get()
            self._do_work(item)
            self.queue.task_done()

    def _addToQueue(self, item):
        self.queue.put(item)

    def test_new_queue_should_be_empty(self):
        self.assertTrue(self.queue.empty())

    def test_queue_with_one_item_should_not_be_empty(self):
        self.queue.put(1)
        self.assertFalse(self.queue.empty())

    def test_shouldProcessAllMessagesOnQueue(self):
        t = Thread(target=self._worker)
        t.daemon = True
        for item in range(100):
            self._addToQueue(item)
        t.start()
        self.queue.join()
        self.assertTrue(self.queue.empty())

    def test_new_queue_should_be_open(self):
        self.assertFalse(self.queue.closed())

    def test_queue_should_be_closeable(self):
        self.queue.close()
        self.assertTrue(self.queue.closed())

    def test_can_close_multiple_times(self):
        t1 = Thread(target=self.queue.close)
        t1.start()
        t2 = Thread(target=self.queue.close)
        t2.start()
        t1.join()
        t2.join()

    def test_should_not_add_to_closed_queue(self):
        self.queue.close()
        with self.assertRaises(ClosedQueueException):
            self.queue.put(10)

    def test_thread_can_clean_up(self):
        def work():
            while not self.queue.closed():
                try:
                    _ = self.queue.get(timeout=3)
                except Empty:
                    pass

        t = Thread(target=work)
        t.setDaemon(True)
        t.start()
        self.assertEqual(threading.active_count(), 2)
        self.queue.close()
        sleep(6)
        self.assertEqual(threading.active_count(), 1)
Example #6
0
 def _put(self, item):
     if self.fail_next_put:
         self.fail_next_put = False
         raise FailingQueueException, "You Lose"
     return CloseableQueue._put(self, item)
Example #7
0
 def __init__(self, *args):
     self.fail_next_put = False
     self.fail_next_get = False
     CloseableQueue.__init__(self, *args)
Example #8
0
 def _get(self):
     if self.fail_next_get:
         self.fail_next_get = False
         raise FailingQueueException, "You Lose"
     return CloseableQueue._get(self)
Example #9
0
 def _put(self, item):
     if self.fail_next_put:
         self.fail_next_put = False
         raise FailingQueueException, "You Lose"
     return CloseableQueue._put(self, item)
Example #10
0
 def __init__(self, *args):
     self.fail_next_put = False
     self.fail_next_get = False
     CloseableQueue.__init__(self, *args)