tworker.py - tomb - the crypto undertaker
HTML git clone git://parazyd.org/tomb.git
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
tworker.py (2094B)
---
1 import sys,os
2 import time
3 from tempfile import NamedTemporaryFile
4
5 from PyQt4 import QtCore
6
7 parentdir = sys.path[0].split(os.sep)[:-1]
8 sys.path.append(os.sep.join(parentdir))
9 from tomblib.tomb import Tomb
10 from tomblib.parser import parse_line
11
12 class TombCreateThread(QtCore.QThread):
13 line_received = QtCore.pyqtSignal(QtCore.QString)
14 error_received = QtCore.pyqtSignal(QtCore.QString)
15 def __init__(self, tombpath, size, keypath, **opts):
16 QtCore.QThread.__init__(self)
17 self.tombpath = tombpath
18 self.size = size
19 self.keypath = keypath
20 self.opts = opts
21
22 self.err_thread = TombOutputThread()
23 self.err_thread.line_received.connect(self.line_received)
24 self.err_thread.error_received.connect(self.error_received)
25
26 def run(self):
27 self.err_thread.start()
28 self.status = Tomb.create(str(self.tombpath), str(self.size),
29 self.keypath, stderr=self.err_thread.buffer, **self.opts)
30 # self.err_thread.terminate()
31
32 def get_success(self):
33 return self.status
34
35 class TombOutputThread(QtCore.QThread):
36 line_received = QtCore.pyqtSignal(QtCore.QString)
37 error_received = QtCore.pyqtSignal(QtCore.QString)
38 progressed = QtCore.pyqtSignal(int) #value in percent
39
40 def __init__(self):
41 QtCore.QThread.__init__(self)
42 self.buffer = NamedTemporaryFile()
43
44 def run(self):
45 while True:
46 where = self.buffer.tell()
47 line = self.buffer.readline()
48 if not line:
49 time.sleep(1)
50 self.buffer.seek(where)
51 else:
52 #ansi color escapes messes this up, but it'ok anyway
53 self.line_received.emit(line)
54 self.parse_line(line)
55
56 def parse_line(self, line):
57 #This could be simplified, and s/search/match, if --no-color supported
58 #see #59
59 #TODO: this should be moved to tomblib.parse
60 parsed = parse_line(line)
61 if parsed and parsed['type'] == 'error':
62 self.error_received.emit(parsed.content)