def main(): """Application entry point. """ configure_logging() plugin_manager = create_plugin_manager() config = PiConfigParser("~/.config/pibooth/pibooth.cfg", plugin_manager) # Register plugins plugin_manager.load_all_plugins( config.gettuple('GENERAL', 'plugins', 'path'), config.gettuple('GENERAL', 'plugins_disabled', str)) LOGGER.info( "Installed plugins: %s", ", ".join([ plugin_manager.get_friendly_name(p) for p in plugin_manager.list_external_plugins() ])) # Update configuration with plugins ones plugin_manager.hook.pibooth_configure(cfg=config) # Initialize varibales normally done by the app picture_plugin = plugin_manager.get_plugin('pibooth-core:picture') picture_plugin.texts_vars['date'] = datetime.now() picture_plugin.texts_vars['count'] = Counters( config.join_path("counters.pickle"), taken=0, printed=0, forgotten=0, remaining_duplicates=config.getint('PRINTER', 'max_duplicates')) for path in config.gettuple('GENERAL', 'directory', 'path'): regenerate_all_images(plugin_manager, config, path)
def main(): """Application entry point. """ configure_logging() plugin_manager = create_plugin_manager() config = PiConfigParser("~/.config/pibooth/pibooth.cfg", plugin_manager) # Register plugins custom_paths = [p for p in config.gettuple('GENERAL', 'plugins', 'path') if p] load_plugins(plugin_manager, *custom_paths) # Update configuration with plugins ones plugin_manager.hook.pibooth_configure(cfg=config) for path in config.gettuple('GENERAL', 'directory', 'path'): regenerate_all_images(plugin_manager, config, path)
def main(): """Application entry point. """ configure_logging() plugin_manager = create_plugin_manager() config = PiConfigParser("~/.config/pibooth/pibooth.cfg", plugin_manager) # Register plugins plugin_manager.load_all_plugins(config.gettuple('GENERAL', 'plugins', 'path'), config.gettuple('GENERAL', 'plugins_disabled', str)) LOGGER.info("Installed plugins: %s", ", ".join( [plugin_manager.get_friendly_name(p) for p in plugin_manager.list_extern_plugins()])) # Update configuration with plugins ones plugin_manager.hook.pibooth_configure(cfg=config) for path in config.gettuple('GENERAL', 'directory', 'path'): regenerate_all_images(plugin_manager, config, path)
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(): error = False configure_logging() write_log("Pibooth version installed: {}".format(pibooth.__version__)) plugin_manager = create_plugin_manager() config = PiConfigParser("~/.config/pibooth/pibooth.cfg", plugin_manager) # Register plugins plugin_manager.load_all_plugins( config.gettuple('GENERAL', 'plugins', 'path'), config.gettuple('GENERAL', 'plugins_disabled', str)) write_log("Installed plugins: {}".format(", ".join([ plugin_manager.get_friendly_name(p) for p in plugin_manager.list_external_plugins() ]))) if not gp: write_log("gPhoto2 not installed, cannot diagnose connected DSLR") sys.exit(1) gp_log_callback = gp.check_result( gp.gp_log_add_func(gp.GP_LOG_VERBOSE, gp_logging)) write_log("Listing all connected DSLR camera") cameras_list = camera_connected() if not cameras_list: write_log('No compatible DSLR camera detected') sys.exit(1) cameras_list = sorted(cameras_list, key=lambda x: x[0]) for index, (name, addr) in enumerate(cameras_list): write_log("{:02d} : addr-> {} name-> {}".format(index, addr, name)) write_log("Stating diagnostic of connected DSLR camera", True) camera = gp.Camera() camera.init() abilities = camera.get_abilities() preview_compat = gp.GP_OPERATION_CAPTURE_PREVIEW ==\ abilities.operations & gp.GP_OPERATION_CAPTURE_PREVIEW write_log("* Preview compatible: {}".format(preview_compat)) capture_compat = gp.GP_OPERATION_CAPTURE_IMAGE ==\ abilities.operations & gp.GP_OPERATION_CAPTURE_IMAGE write_log("* Capture compatible: {}".format(capture_compat)) if capture_compat: try: print_config(camera.get_config()) write_log("Testing commands used by pibooth", True) set_config_value(camera, 'imgsettings', 'iso', '100') set_config_value(camera, 'settings', 'capturetarget', 'Memory card') viewfinder = get_config_value(camera, 'actions', 'viewfinder') if viewfinder is not None: set_config_value(camera, 'actions', 'viewfinder', 1) write_log("Take capture preview") camera.capture_preview() if viewfinder is not None: set_config_value(camera, 'actions', 'viewfinder', 0) write_log("Take a capture") gp_path = camera.capture(gp.GP_CAPTURE_IMAGE) write_log("Download file from DSLR") camera_file = camera.file_get(gp_path.folder, gp_path.name, gp.GP_FILE_TYPE_NORMAL) write_log("Save capture locally from memory buffer") data = camera_file.get_data_and_size() with open(APPNAME + '.raw', 'wb') as fd: fd.write(data) image = Image.open(io.BytesIO(data)) image.save(APPNAME + '.jpg') except Exception as ex: write_log("ABORT : exception occures: {}".format(ex), True) error = True if not error: write_log("SUCCESS : diagnostic completed", True) del gp_log_callback camera.exit() write_log( "If you are investigating why pibooth does not work with your DSLR camera," ) write_log( "please paste the content of generated file '{}'".format(APPNAME + '.log')) write_log("on https://github.com/pibooth/pibooth/issues")
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()