Exemple #1
0
def main():
    parser = argparse.ArgumentParser(prog="Fast File Transfer")
    parser.add_argument("--config", "-c", default=DEFAULT_CONFIG_FILE)
    parser.add_argument("--generate", "-g", action="store_true")
    parser.add_argument("--log_file", "-f")
    parser.add_argument(
        "--log_level",
        "-l",
        default="INFO",
        choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"])
    parser.add_argument("--skip_site_commands", "-s", action="store_true")
    parser.add_argument("--skip_ewsd_check", "-e", action="store_true")

    log_level = getattr(logging, parser.parse_args().log_level, None)
    log_format = "%(asctime)s - %(levelname)s - %(message)s"

    if parser.parse_args().log_file is None:
        logging.basicConfig(stream=sys.stdout,
                            level=log_level,
                            format=log_format)
    else:
        logging.basicConfig(filename=parser.parse_args().log_file,
                            level=log_level,
                            format=log_format)

    logging.info("Fast File Transfer application started")

    logging.debug("Argument --config = %s" % parser.parse_args().config)
    logging.debug("Argument --generate = %s" % parser.parse_args().generate)
    logging.debug("Argument --log_file = %s" % parser.parse_args().log_file)
    logging.debug("Argument --log_level = %s" % parser.parse_args().log_level)
    logging.debug("Argument --skip_site_commands = %s" %
                  parser.parse_args().skip_site_commands)
    logging.debug("Argument --skip_ewsd_check = %s" %
                  parser.parse_args().skip_ewsd_check)

    logging.info("Configuration: %s" % parser.parse_args().config)

    if parser.parse_args().generate:
        logging.info("Requested new configuration file")
        generate_new_config(filename=parser.parse_args().config)
        logging.info(
            "Fast File Transfer application finished - New configuration file "
            "generated")
        return

    logging.info("Loading configuration")
    config = Config()
    config.load(filename=parser.parse_args().config)

    logging.info("Establishing connection")
    use_site_commands = not parser.parse_args().skip_site_commands
    collector = Collector()
    collector.connect(host=config.get_host(),
                      username=config.get_username(),
                      password=config.get_password(),
                      use_site_commands=use_site_commands)

    ewsd_check = not parser.parse_args().skip_ewsd_check
    transfers = config.get_transfers()
    if transfers is None or transfers == []:
        logging.info("No active transfers")
    elif type(transfers) == list:
        logging.error(
            "Unfinished file transfers, aborting, download and release "
            "manually, review the configuration file %s" %
            config.get_config_filename())
        exit(-1)
    else:
        logging.error(
            "List of transfers corrupted, aborting, review the configuration "
            "file %s" % config.get_config_filename())
        exit(-1)

    logging.info("Collecting new file")
    new_filename = config.generate_new_filename()

    signal.signal(signal.SIGALRM, signal_handler)
    signal.alarm(DEFAULT_COLLECTION_TIMEOUT)
    try:
        collect_file(filename=new_filename,
                     path=config.get_ewsd_path(),
                     config=config,
                     collector=collector,
                     ewsd_check=ewsd_check)
    except Exception as exception:
        logging.debug(exception)
        logging.error(
            "File %s not collected due to timeout, aborting, download and release manually"
            % new_filename)
    signal.alarm(0)

    logging.info("Disconnecting")
    collector.disconnect()

    logging.info("Fast File Transfer application finished")