Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
configure_logging(options.logging, '[ %(levelname)-8s] %(name)-18s: %(message)s', filename=options.log)
config = PiConfigParser("~/.config/pibooth/pibooth.cfg", options.reset)
language.init("~/.config/pibooth/translations.cfg", options.reset)
if options.config:
LOGGER.info("Editing the pibooth configuration...")
config.edit()
elif options.translate:
LOGGER.info("Editing the GUI translations...")
language.edit()
elif options.fonts:
LOGGER.info("Listing all fonts available...")
print_columns_words(get_available_fonts(), 3)
elif options.diagnostic:
LOGGER.info("Starting diagnostic of DSLR camera...")
diagnostic.main()
elif not options.reset:
LOGGER.info("Starting the photo booth application...")
app = PiApplication(config)
app.main_loop()
help=u"report only errors and warnings", default=logging.INFO)
options, _args = parser.parse_known_args()
configure_logging(options.logging, '[ %(levelname)-8s] %(name)-18s: %(message)s', filename=options.log)
plugin_manager = create_plugin_manager()
# Load the configuration and languages
config = PiConfigParser("~/.config/pibooth/pibooth.cfg", plugin_manager)
language.init(config.join_path("translations.cfg"), options.reset)
# Register plugins
custom_paths = [p for p in config.gettuple('GENERAL', 'plugins', 'path') if p]
load_plugins(plugin_manager, *custom_paths)
LOGGER.info("Installed plugins: %s", ", ".join(list_plugin_names(plugin_manager)))
# Update configuration with plugins ones
plugin_manager.hook.pibooth_configure(cfg=config)
# Ensure config files are present in case of first pibooth launch
if not options.reset:
if not osp.isfile(config.filename):
config.save(default=True)
plugin_manager.hook.pibooth_reset(cfg=config, hard=False)
if options.config:
LOGGER.info("Editing the pibooth configuration...")
config.edit()
elif options.translate:
LOGGER.info("Editing the GUI translations...")
language.edit()
plugin_manager.hook.pibooth_configure(cfg=config)
# Ensure config files are present in case of first pibooth launch
if not options.reset:
if not osp.isfile(config.filename):
config.save(default=True)
plugin_manager.hook.pibooth_reset(cfg=config, hard=False)
if options.config:
LOGGER.info("Editing the pibooth configuration...")
config.edit()
elif options.translate:
LOGGER.info("Editing the GUI translations...")
language.edit()
elif options.fonts:
LOGGER.info("Listing all fonts available...")
print_columns_words(get_available_fonts(), 3)
elif options.reset:
config.save(default=True)
plugin_manager.hook.pibooth_reset(cfg=config, hard=True)
else:
LOGGER.info("Starting the photo booth application %s", GPIO_INFO)
app = PiApplication(config, plugin_manager)
app.main_loop()
LOGGER.info("Installed plugins: %s", ", ".join(list_plugin_names(plugin_manager)))
# Update configuration with plugins ones
plugin_manager.hook.pibooth_configure(cfg=config)
# Ensure config files are present in case of first pibooth launch
if not options.reset:
if not osp.isfile(config.filename):
config.save(default=True)
plugin_manager.hook.pibooth_reset(cfg=config, hard=False)
if options.config:
LOGGER.info("Editing the pibooth configuration...")
config.edit()
elif options.translate:
LOGGER.info("Editing the GUI translations...")
language.edit()
elif options.fonts:
LOGGER.info("Listing all fonts available...")
print_columns_words(get_available_fonts(), 3)
elif options.reset:
config.save(default=True)
plugin_manager.hook.pibooth_reset(cfg=config, hard=True)
else:
LOGGER.info("Starting the photo booth application %s", GPIO_INFO)
app = PiApplication(config, plugin_manager)
app.main_loop()
def add_event_detect(self, pin, status, **kwargs):
LOGGER.debug("GPIO Mock: add detection on pin %s when %s", pin, status)
callback = kwargs.get('callback')
bouncetime = kwargs.get('bouncetime', 0)
if callback:
LOGGER.info("GPIO Mock: trigger pin %s by typing 'kill -%s %s'", pin, pin, os.getpid())
signal.signal(pin, partial(self._on_signal, callback=callback, bouncetime=bouncetime))
def save(self, default=False):
"""Save the current or default values into the configuration file.
"""
LOGGER.info("Generate the configuration file in '%s'", self.filename)
dirname = osp.dirname(self.filename)
if not osp.isdir(dirname):
os.makedirs(dirname)
with io.open(self.filename, 'w', encoding="utf-8") as fp:
for section, options in DEFAULT.items():
fp.write("[{}]\n".format(section))
for name, value in options.items():
if default:
val = value[0]
else:
val = self.get(section, name)
fp.write("# {}\n{} = {}\n\n".format(value[1], name, val))
self.handle_autostart()
def _on_event(self, evt):
"""
Call for each new printer event.
"""
LOGGER.info(evt.title)
pygame.event.post(pygame.event.Event(PRINTER_TASKS_UPDATED,
tasks=self.get_all_tasks()))
def __init__(self, filename, clear=False):
ConfigParser.__init__(self)
self.filename = osp.abspath(osp.expanduser(filename))
if not osp.isfile(self.filename) or clear:
LOGGER.info("Generate the configuration file in '%s'", self.filename)
dirname = osp.dirname(self.filename)
if not osp.isdir(dirname):
os.makedirs(dirname)
generate_default_config(self.filename)
self.reload()
def enable_autostart(self, enable=True):
"""Auto-start pibooth at the Raspberry Pi startup.
"""
filename = osp.expanduser('~/.config/autostart/pibooth.desktop')
dirname = osp.dirname(filename)
if enable and not osp.isfile(filename):
if not osp.isdir(dirname):
os.makedirs(dirname)
LOGGER.info("Generate the auto-startup file in '%s'", dirname)
with open(filename, 'w') as fp:
fp.write("[Desktop Entry]\n")
fp.write("Name=pibooth\n")
fp.write("Exec=pibooth\n")
fp.write("Type=application\n")
elif not enable and osp.isfile(filename):
LOGGER.info("Remove the auto-startup file in '%s'", dirname)
os.remove(filename)
def entry_actions(self):
LOGGER.info("Start new captures sequence")
self.app.nbr_duplicates = 0
self.app.previous_picture = None
self.app.previous_picture_file = None
self.app.dirname = osp.join(self.app.savedir, "raw", time.strftime("%Y-%m-%d-%H-%M-%S"))
os.makedirs(self.app.dirname)
self.app.led_preview.switch_on()
self.count = 0
self.app.window.set_capture_number(self.count, self.app.capture_nbr)
self.app.camera.preview(self.app.window)