Refactored entry routines

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

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

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))

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))

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
photobooth/main.py Normal file
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