def main(): """Application entry point. """ if hasattr(multiprocessing, 'set_start_method'): # Avoid use 'fork': safely forking a multithreaded process is problematic multiprocessing.set_start_method('spawn') parser = argparse.ArgumentParser(usage="%(prog)s [options]", description=pibooth.__doc__) parser.add_argument('--version', action='version', version=pibooth.__version__, help=u"show program's version number and exit") parser.add_argument("--config", action='store_true', help=u"edit the current configuration and exit") parser.add_argument("--translate", action='store_true', help=u"edit the GUI translations and exit") parser.add_argument( "--reset", action='store_true', help=u"restore the default configuration/translations and exit") parser.add_argument("--fonts", action='store_true', help=u"display all available fonts and exit") parser.add_argument( "--nolog", action='store_true', default=False, help= u"don't save console output in a file (avoid filling the /tmp directory)" ) group = parser.add_mutually_exclusive_group() group.add_argument("-v", "--verbose", dest='logging', action='store_const', const=logging.DEBUG, help=u"report more information about operations", default=logging.INFO) group.add_argument("-q", "--quiet", dest='logging', action='store_const', const=logging.WARNING, help=u"report only errors and warnings", default=logging.INFO) options, _args = parser.parse_known_args() if not options.nolog: filename = osp.join(tempfile.gettempdir(), 'pibooth.log') else: filename = None configure_logging(options.logging, '[ %(levelname)-8s] %(name)-18s: %(message)s', filename=filename) 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() 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 main(): """Application entry point. """ parser = argparse.ArgumentParser(usage="%(prog)s [options]", description=pibooth.__doc__) parser.add_argument('--version', action='version', version=pibooth.__version__, help=u"show program's version number and exit") parser.add_argument("--config", action='store_true', help=u"edit the current configuration and exit") parser.add_argument("--translate", action='store_true', help=u"edit the GUI translations and exit") parser.add_argument("--reset", action='store_true', help=u"restore the default configuration/translations and exit") parser.add_argument("--fonts", action='store_true', help=u"display all available fonts and exit") parser.add_argument("--log", default=None, help=u"save logs output to the given file") group = parser.add_mutually_exclusive_group() group.add_argument("-v", "--verbose", dest='logging', action='store_const', const=logging.DEBUG, help=u"report more information about operations", default=logging.INFO) group.add_argument("-q", "--quiet", dest='logging', action='store_const', const=logging.WARNING, 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) # Create plugin manager and defined hooks specification plugin_manager = pluggy.PluginManager(hookspecs.hookspec.project_name) plugin_manager.add_hookspecs(hookspecs) plugin_manager.load_setuptools_entrypoints(hookspecs.hookspec.project_name) # Load the configuration and languages config = PiConfigParser("~/.config/pibooth/pibooth.cfg", plugin_manager, options.reset) language.init("~/.config/pibooth/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 plugins configuration plugin_manager.hook.pibooth_configure(cfg=config) if not osp.isfile(config.filename): config.save() 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() else: LOGGER.info("Starting the photo booth application %s", GPIO_INFO) app = PiApplication(config, plugin_manager) app.main_loop()