Refactored entry routines

This commit is contained in:
Balthasar Reuter committed 2018-04-17 23:55:59 +02:00
1 parent cb5c2d6870
commit e296d7997c
5 files changed
+84 -78

No files matched your search

+1 -72
View File
@@ -1,19 +1,14 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from multiprocessing import Pipe, Process
from time import time, sleep, localtime, strftime from time import time, sleep, localtime, strftime
import importlib
from PIL import Image, ImageOps from PIL import Image, ImageOps
from Config import Config
from PictureList import PictureList from PictureList import PictureList
from PictureDimensions import PictureDimensions from PictureDimensions import PictureDimensions
import camera, gui import gui
class Photobooth: class Photobooth:
@@ -169,69 +164,3 @@ class Photobooth:
self._send.send(gui.IdleState()) self._send.send(gui.IdleState())
def lookup_and_import(module_list, name, package=None):
result = next(((mod_name, class_name)
for config_name, mod_name, class_name in module_list
if name == config_name), None)
print(result)
if package == None:
import_module = importlib.import_module(result[0])
else:
import_module = importlib.import_module('.' + result[0], package)
if result[1] == None:
return import_module
else:
return getattr(import_module, result[1])
def main_photobooth(config, send, recv):
while True:
try:
Camera = lookup_and_import(camera.modules, config.get('Camera', 'module'), 'camera')
with Camera() as cap:
photobooth = Photobooth(config, cap)
return photobooth.run(send, recv)
except BaseException as e:
send.send( gui.ErrorState('Camera error', str(e)) )
event = recv.recv()
if str(event) != 'ack':
print('Unknown event received: ' + str(event))
raise RuntimeError('Unknown event received', str(event))
def run(argv):
config = Config('photobooth.cfg')
event_recv, event_send = Pipe(duplex=False)
gui_recv, gui_send = Pipe(duplex=False)
photobooth = Process(target=main_photobooth, args=(config, gui_send, event_recv), daemon=True)
photobooth.start()
Gui = lookup_and_import(gui.modules, config.get('Gui', 'module'), 'gui')
return Gui(argv, config).run(event_send, gui_recv)
def main(argv):
known_status_codes = {
-1: 'Initializing photobooth',
-2: 'Restarting photobooth and reloading config'
}
status_code = -1
while status_code in known_status_codes:
print(known_status_codes[status_code])
status_code = run(argv)
return status_code
+2 -2
View File
@@ -1,8 +1,8 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import sys, Photobooth import sys, main
if __name__ == "__main__": if __name__ == "__main__":
sys.exit(Photobooth.main(sys.argv)) sys.exit(main.main(sys.argv))
+2 -2
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import sys, Photobooth import sys, main
sys.exit(Photobooth.main(sys.argv)) sys.exit(main.main(sys.argv))
+5 -2
View File
@@ -117,10 +117,13 @@ class PyQt5Gui(Gui):
def showError(self, title, message): def showError(self, title, message):
if QMessageBox.warning(self._p, title,message, QMessageBox.Ok, reply = QMessageBox.warning(self._p, title,message, QMessageBox.Close | QMessageBox.Retry,
QMessageBox.Ok) == QMessageBox.Ok: QMessageBox.Retry)
if reply == QMessageBox.Retry:
self._transport.send('ack') self._transport.send('ack')
self._lastState() self._lastState()
else:
self.close()
class PyQt5Receiver(QThread): class PyQt5Receiver(QThread):
+74
View File
@@ -0,0 +1,74 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from multiprocessing import Pipe, Process
import importlib
import camera, gui
from Config import Config
from Photobooth import Photobooth
def lookup_and_import(module_list, name, package=None):
result = next(((mod_name, class_name)
for config_name, mod_name, class_name in module_list
if name == config_name), None)
if package == None:
import_module = importlib.import_module(result[0])
else:
import_module = importlib.import_module('.' + result[0], package)
if result[1] == None:
return import_module
else:
return getattr(import_module, result[1])
def main_photobooth(config, send, recv):
while True:
try:
Camera = lookup_and_import(camera.modules, config.get('Camera', 'module'), 'camera')
with Camera() as cap:
photobooth = Photobooth(config, cap)
return photobooth.run(send, recv)
except BaseException as e:
send.send( gui.ErrorState('Camera error', str(e)) )
event = recv.recv()
if str(event) != 'ack':
print('Unknown event received: ' + str(event))
raise RuntimeError('Unknown event received', str(event))
def run(argv):
config = Config('photobooth.cfg')
event_recv, event_send = Pipe(duplex=False)
gui_recv, gui_send = Pipe(duplex=False)
photobooth = Process(target=main_photobooth, args=(config, gui_send, event_recv), daemon=True)
photobooth.start()
Gui = lookup_and_import(gui.modules, config.get('Gui', 'module'), 'gui')
return Gui(argv, config).run(event_send, gui_recv)
def main(argv):
known_status_codes = {
-1: 'Initializing photobooth',
-2: 'Restarting photobooth and reloading config'
}
status_code = -1
while status_code in known_status_codes:
print(known_status_codes[status_code])
status_code = run(argv)
return status_code