Пример #1
0
def main():
    """Application entry point.
    """
    configure_logging()
    plugin_manager = create_plugin_manager()
    config = PiConfigParser("~/.config/pibooth/pibooth.cfg", plugin_manager)

    counters = Counters(config.join_path("counters.pickle"),
                        taken=0,
                        printed=0,
                        forgotten=0,
                        remaining_duplicates=config.getint(
                            'PRINTER', 'max_duplicates'))

    if '--json' in sys.argv:
        print(json.dumps(counters.data))
    elif '--update' in sys.argv:
        try:
            print("\nUpdating counters (current value in square bracket):\n")
            for name in counters:
                value = input(" -> {:.<18} [{:>4}] : ".format(
                    name.capitalize(), counters[name]))
                if value.strip():
                    setattr(counters, name, int(value))
        except KeyboardInterrupt:
            pass
        print()
    else:
        print("\nListing current counters:\n")
        for name in counters:
            print(" -> {:.<25} : {:>4}".format(name.capitalize(),
                                               counters[name]))
        print()
Пример #2
0
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)
Пример #3
0
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()