--- /dev/null
+"""
+AsynchronousFileReader
+======================
+
+Simple thread based asynchronous file reader for Python.
+
+see https://github.com/soxofaan/asynchronousfilereader
+
+MIT License
+Copyright (c) 2014 Stefaan Lippens
+"""
+
+__version__ = '0.2.1'
+
+import threading
+try:
+ # Python 2
+ from Queue import Queue
+except ImportError:
+ # Python 3
+ from queue import Queue
+
+
+class AsynchronousFileReader(threading.Thread):
+ """
+ Helper class to implement asynchronous reading of a file
+ in a separate thread. Pushes read lines on a queue to
+ be consumed in another thread.
+ """
+
+ def __init__(self, fd, queue=None, autostart=True):
+ self._fd = fd
+ if queue is None:
+ queue = Queue()
+ self.queue = queue
+
+ threading.Thread.__init__(self)
+
+ if autostart:
+ self.start()
+
+ def run(self):
+ """
+ The body of the tread: read lines and put them on the queue.
+ """
+ while True:
+ line = self._fd.readline()
+ if not line:
+ break
+ self.queue.put(line)
+
+ def eof(self):
+ """
+ Check whether there is no more content to expect.
+ """
+ return not self.is_alive() and self.queue.empty()
+
+ def readlines(self):
+ """
+ Get currently available lines.
+ """
+ while not self.queue.empty():
+ yield self.queue.get()
+
import time
import operator
import Queue
-import threading
import logging
import hashlib
import socket
from zipfile import ZipFile
import metadata
+from fdroidserver.asynchronousfilereader import AsynchronousFileReader
+
XMLElementTree.register_namespace('android', 'http://schemas.android.com/apk/res/android')
return False
-class AsynchronousFileReader(threading.Thread):
-
- '''
- Helper class to implement asynchronous reading of a file
- in a separate thread. Pushes read lines on a queue to
- be consumed in another thread.
- '''
-
- def __init__(self, fd, queue):
- assert isinstance(queue, Queue.Queue)
- assert callable(fd.readline)
- threading.Thread.__init__(self)
- self._fd = fd
- self._queue = queue
-
- def run(self):
- '''The body of the tread: read lines and put them on the queue.'''
- for line in iter(self._fd.readline, ''):
- self._queue.put(line)
-
- def eof(self):
- '''Check whether there is no more content to expect.'''
- return not self.is_alive() and self._queue.empty()
-
-
class PopenResult:
returncode = None
output = ''
stdout_queue = Queue.Queue()
stdout_reader = AsynchronousFileReader(p.stdout, stdout_queue)
- stdout_reader.start()
# Check the queue for output (until there is no more to get)
while not stdout_reader.eof():
author='The F-Droid Project',
author_email='team@f-droid.org',
url='https://f-droid.org',
- packages=['fdroidserver'],
+ packages=['fdroidserver', 'fdroidserver.asynchronousfilereader'],
scripts=['fdroid', 'fd-commit'],
data_files=[
(data_prefix + '/share/doc/fdroidserver/examples',