예제 #1
0
def edit_sync_params():
    puts(colored.green('Editing synchronization workload parameters...\n'))
    user_conf.num_consumers = prompt.query('Number of worker threads: ',
                                           default=str(user_conf.num_consumers),
                                           validators=[validators.IntegerValidator()])
    user_conf.deep_sync_interval_seconds = prompt.query('Number of seconds to wait before next full scan: ',
                                                        default=str(user_conf.deep_sync_interval_seconds),
                                                        validators=[validators.IntegerValidator()])
    puts()
    puts(colored.green('Workload parameters saved.'))
예제 #2
0
def modifySettings(settings):
    putSeparator()
    puts('Modify Settings:')
    with indent(4):
        invalidSettings = True
        while invalidSettings:
            settings['method'] = prompt.query(
                'Output Method:',
                default=settings['method'],
                validators=[
                    validators.RegexValidator(regex=re.compile('[a-b]+'))
                ])
            settings['min'] = prompt.query(
                'Minimum X Value:',
                default="%f" % settings['min'],
                validators=[sab_validators.FloatValidator()])
            settings['max'] = prompt.query(
                'Max X Value:',
                default="%f" % settings['max'],
                validators=[sab_validators.FloatValidator()])
            if settings['min'] > settings['max']:
                puts(
                    colored.red(
                        'Minimum X value can not be larger than Maximum X value!'
                    ))
                continue
            settings['formats'] = prompt.query(
                'Comma Separated List of Output Formats(Formats: {}):'.format(
                    ','.join(getValidFormats())),
                default=','.join(settings['formats']),
                validators=[
                    sab_validators.CommaSeparatedValidator(
                        options=getValidFormats())
                ])
            settings['smooth'] = prompt.query(
                'AirPLS Smoothing:',
                default=str(settings['smooth']),
                validators=[validators.IntegerValidator()])
            settings['max_it'] = prompt.query(
                'AirPLS Max Iterations:',
                default=str(settings['max_it']),
                validators=[validators.IntegerValidator()])
            settings['porder'] = prompt.query(
                'AirPLS POrder:',
                default=str(settings['porder']),
                validators=[validators.IntegerValidator()])
            settings['prec'] = prompt.query(
                'Data Output Decimal Precision:',
                default=str(settings['prec']),
                validators=[validators.IntegerValidator()])

            invalidSettings = False
예제 #3
0
def prompt_drive_config(drive):
    if hasattr(drive, 'config'):
        drive_config_data = drive.config.data
    else:
        drive_config_data = drive_config.DriveConfig.DEFAULT_VALUES
    if drive_config_data['local_root'] is None or drive_config_data['local_root'] == '':
        drive_config_data['local_root'] = OS_USER_HOME + '/OneDrive/' + drive.drive_id
    puts(colored.green('You selected Drive "%s"...' % drive.drive_id))

    puts()
    with indent(4, quote=' >'):
        puts('When specifying local root, pick a directory not used by or under any other Drive.')
        puts('When specifying HTTPS download / upload sizes, note that files larger than those sizes will be handled '
             'as chunks.')
    puts()

    while True:
        local_root = prompt.query('Which local directory do you want to sync with this Drive?',
                                  default=drive_config_data['local_root'])
        try:
            while local_root[-1] == '/':
                local_root = local_root[:-1]
            if not os.path.exists(local_root):
                puts(colored.yellow('Directory "%s" does not exist. Try creating it...' % local_root))
                mkdir(local_root)
                puts(colored.green('Successfully created directory "%s".' % local_root))
            elif os.path.isfile(local_root):
                raise ValueError('Path "%s" is a file.' % local_root)
            if os.path.isdir(local_root):
                drive_config_data['local_root'] = local_root
                break
            raise ValueError('Invalid path "%s"' % local_root)
        except Exception as ex:
            puts(colored.red('Error: ' + str(ex)))
    drive_config_data['max_get_size_bytes'] = prompt.query('Maximum size, in KB, for a single download request?',
                                                           default=str(drive_config_data['max_get_size_bytes'] >> 10),
                                                           validators=[validators.IntegerValidator()]) * 1024
    drive_config_data['max_put_size_bytes'] = prompt.query('Maximum size, in KB, for a single upload request?',
                                                           default=str(drive_config_data['max_put_size_bytes'] >> 10),
                                                           validators=[validators.IntegerValidator()]) * 1024
    try:
        while not prompt.yn('Do you have ignore list files specific to this Drive to add?', default='n'):
            ignore_file_path = prompt.query('Path to the ignore list file (hit [Ctrl+C] to skip): ',
                                            validators=[validators.FileValidator()])
            drive_config_data['ignore_files'].add(ignore_file_path)
            puts(colored.green('Recorded ignore list file: "{}"' % ignore_file_path))
    except KeyboardInterrupt:
        pass
    drive_conf = drive_config.DriveConfig.load(drive_config_data)
    drive.config = drive_conf
    drive_store.add_record(drive)
예제 #4
0
def dispatch_task():
    puts('\n' + colored.blue('-' * 80) + '\n')
    puts(
        colored.green('Preference wizard supports the following tasks:\n',
                      bold=True))
    option_descriptions = [
        'Connect a new OneDrive Personal Account',  # 0
        'Connect a new OneDrive for Business Account',  # 1
        'View / Delete connected OneDrive accounts',  # 2
        'Add a remote Drive to sync',  # 3
        'View / Edit / Delete existing Drives',  # 4
        'Edit global ignore list files',  # 5
        'Edit HTTPS proxies',  # 6
        'Configure synchronization workload (resync interval, etc.)',  # 7
        'Exit wizard'  # 8
    ]
    for i in range(0, len(option_descriptions)):
        puts('[{}] {}'.format(i, option_descriptions[i]))
    puts()
    task_id = prompt.query('Please enter the task index and hit [ENTER]: ',
                           validators=[
                               validators.IntegerValidator(),
                               validators.OptionValidator(
                                   range(len(option_descriptions)))
                           ])
    tasks = [
        add_personal_account, add_business_account, list_existing_accounts,
        add_new_drive, list_existing_drives, edit_default_ignore_list,
        edit_proxies, edit_sync_params, bye
    ]
    if task_id < len(option_descriptions) - 1:
        puts('\n' + colored.blue('-' * 80) + '\n')
    tasks[task_id]()
예제 #5
0
def _do_game():
    game = Game(
        players=[Player(name=name) for name in _get_players()],
        max_rounds=int(
            prompt.query('How many rounds would you like to play?',
                         default=str(Game.DEFAULT_ROUNDS_PER_GAME),
                         validators=[validators.IntegerValidator()])),
    )

    puts()
    puts(colored.green('Awesome.'))

    while not game.is_finished:
        game.begin_round()

        puts()
        _puts_beginning_of_round_header(game)

        _init_round(game.current_round)
        while not game.current_round.is_finished:
            _do_turn(game.current_round)

        _puts_end_of_round_summary(game)

    _declare_winner(game)
예제 #6
0
def _get_players():
    num_players = prompt.query('How many players?',
                               default='2',
                               validators=[validators.IntegerValidator()])
    return [
        prompt.query('Player %s name:' % (i + 1),
                     default='Player %s' % (i + 1))
        for i in range(int(num_players))
    ]
예제 #7
0
    def __config(self):
        global portSelection
        configList = [{
            'selector': '1',
            'prompt': 'Set Baud Rate'
        }, {
            'selector': '2',
            'prompt': 'Set Login Details'
        }, {
            'selector': '3',
            'prompt': 'Set AT Library'
        }, {
            'selector': '4',
            'prompt': 'Change Device'
        }, {
            'selector': '5',
            'prompt': 'About'
        }, {
            'selector': '0',
            'prompt': 'Back'
        }]

        config = int(prompt.options("Config:", configList))

        if config == 1:
            baudRate = prompt.query("Baud rate:",
                                    validators=[validators.IntegerValidator()])
            self.__modifyConfigFiles('BaudRate', baudRate)
        elif config == 2:
            print 'Under Construction...'
            os.environ["SIGFOX_USR"] = prompt.query("Username:"******"SIGFOX_PWD"] = getpass.getpass('Password:'******'Error'
        raw_input("Press Enter to continue...")
        self.__config()
예제 #8
0
def prompt_delete_account(account_list):
    while True:
        id_to_delete = prompt.query('Type the index of the account to delete: ',
                                    validators=[validators.IntegerValidator(),
                                                validators.OptionValidator(range(len(account_list)))])
        account_to_delete = account_list[id_to_delete]
        if account_to_delete is None:
            puts(colored.red('Error: The account has been deleted.'))
        else:
            drive_store.delete_records_by_account(account_to_delete.profile.user_id, account_to_delete.TYPE)
            account_store.delete_account(account_to_delete)
            account_list[id_to_delete] = None
            puts(colored.green('Successfully deleted the account.'))
예제 #9
0
def prompt_delete_account(account_list):
    while True:
        id_to_delete = prompt.query(
            'Type the index of the account to delete: ',
            validators=[
                validators.IntegerValidator(),
                validators.OptionValidator(range(len(account_list)))
            ])
        account_to_delete = account_list[id_to_delete]
        if account_to_delete is None:
            puts(colored.red('Error: The account has been deleted.'))
        else:
            account_store.delete_account(account_to_delete)
            account_list[id_to_delete] = None
예제 #10
0
def prompt_add_drive(drive_list):
    drive_count = 0
    while len(drive_list) > drive_count:
        puts()
        id_to_add = prompt.query('Type the index of the Drive to add: ',
                                 validators=[validators.IntegerValidator(),
                                             validators.OptionValidator(range(len(drive_list)))])
        drive_to_add = drive_list[id_to_add]
        if drive_to_add is None:
            puts(colored.red('Error: The Drive has been added.'))
        else:
            prompt_drive_config(drive_to_add)
            drive_list[id_to_add] = None
            drive_count += 1
            puts(colored.green('Successfully added Drive.'))
            puts()
예제 #11
0
def setup_user_input():
    """
    Setup configuration and database loading script by querying information from user.
    """
    print(
        "#### Please answer the following questions to setup the folder ####")
    log_folder = prompt.query('Logging folder (must exist):',
                              default='.',
                              validators=[validators.PathValidator()])
    loader_file = prompt.query('Loader file name:', default='loader')
    config_file = prompt.query('Config file name:', default='local')
    config_class = prompt.query('Config class name:', default='LocalConfig')
    print("#### Database configuration setup ####")
    dialect = prompt.options('Marcotti-Events Database backend:',
                             dialect_options)
    if dialect == 'sqlite':
        dbname = prompt.query('Database filename (must exist):',
                              validators=[validators.FileValidator()])
        dbuser = ''
        hostname = ''
        dbport = 0
    else:
        dbname = prompt.query('Database name:')
        dbuser = prompt.query('Database user:'******'')
        puts(
            colored.red(
                'Database password is not defined -- You must define it in the config file!'
            ))
        hostname = prompt.query('Database hostname:', default='localhost')
        dbport = prompt.query('Database path:', default=db_ports.get(dialect))
    print("#### Database season setup ####")
    start_yr = prompt.query('Start season year',
                            default='1990',
                            validators=[validators.IntegerValidator()])
    end_yr = prompt.query('End season year',
                          default='2020',
                          validators=[validators.IntegerValidator()])
    print("#### Data file setup ####")
    supplier = prompt.query('Name of data supplier:')
    is_club_db = prompt.options('Is this a club database?', binary_options)
    spanish = prompt.options('Are country names in Spanish?', binary_options)
    csv_data_dir = prompt.query('Directory containing CSV data files:',
                                default='.',
                                validators=[validators.PathValidator()])
    supplier_data_path = path_query(
        'Relative path of Suppliers CSV data files:')
    club_data_path = path_query('Relative path of Clubs CSV data files:')
    comp_data_path = path_query(
        'Relative path of Competitions CSV data files:')
    season_data_path = path_query('Relative path of Seasons CSV data files:')
    venue_data_path = path_query('Relative path of Venues CSV data files:')
    position_data_path = path_query(
        'Relative path of Player Positions CSV data files:')
    player_data_path = path_query('Relative path of Players CSV data files:')
    manager_data_path = path_query('Relative path of Managers CSV data files:')
    referee_data_path = path_query('Relative path of Referees CSV data files:')
    league_match_data_path = path_query(
        'Relative path of League Matches CSV data files:')
    group_match_data_path = path_query(
        'Relative path of Group Matches CSV data files:')
    knockout_match_data_path = path_query(
        'Relative path of Knockout Matches CSV data files:')
    goal_data_path = path_query('Relative path of Goals CSV data files:')
    penalty_data_path = path_query(
        'Relative path of Penalties CSV data files:')
    bookable_data_path = path_query(
        'Relative path of Bookables CSV data files:')
    substitution_data_path = path_query(
        'Relative path of Substitutions CSV data files:')
    shootout_data_path = path_query(
        'Relative path of Penalty Shootouts CSV data files:')
    player_stats_data_path = path_query(
        'Relative path of Player Statistics CSV data files:')

    print("#### End setup questions ####")

    setup_dict = {
        'loader_file': loader_file.lower(),
        'config_file': config_file.lower(),
        'config_class': config_class,
        'supplier': supplier,
        'dialect': dialect,
        'dbname': dbname,
        'dbuser': dbuser,
        'dbhost': hostname,
        'dbport': dbport,
        'start_yr': start_yr,
        'end_yr': end_yr,
        'logging_dir': log_folder,
        'log_file_path': os.path.join(log_folder, 'marcotti.log'),
        'club_db': is_club_db,
        'country_prefix': 'es' * (spanish is True),
        'csv_data_dir': csv_data_dir,
        'csv_data': {
            'suppliers': supplier_data_path,
            'competitions': comp_data_path,
            'seasons': season_data_path,
            'clubs': club_data_path,
            'venues': venue_data_path,
            'positions': position_data_path,
            'players': player_data_path,
            'managers': manager_data_path,
            'referees': referee_data_path,
            'league_matches': league_match_data_path,
            'group_matches': group_match_data_path,
            'knockout_matches': knockout_match_data_path,
            'goals': goal_data_path,
            'penalties': penalty_data_path,
            'bookables': bookable_data_path,
            'substitutions': substitution_data_path,
            'shootouts': shootout_data_path,
            'statistics': player_stats_data_path
        }
    }
    return setup_dict
예제 #12
0
def setup_user_input():
    """
    Setup configuration and database loading script by querying information from user.
    """
    print(
        "#### Please answer the following questions to setup the folder ####")
    log_folder = prompt.query('Logging folder (must exist):',
                              default='.',
                              validators=[validators.PathValidator()])
    loader_file = prompt.query('Loader file name:', default='loader')
    config_file = prompt.query('Config file name:', default='local')
    config_class = prompt.query('Config class name:', default='LocalConfig')
    print("#### Database configuration setup ####")
    dialect = prompt.options('Marcotti-Events Database backend:',
                             dialect_options)
    if dialect == 'sqlite':
        dbname = prompt.query('Database filename (must exist):',
                              validators=[validators.FileValidator()])
        dbuser = ''
        hostname = ''
        dbport = 0
    else:
        dbname = prompt.query('Database name:')
        dbuser = prompt.query('Database user:'******'')
        puts(
            colored.red(
                'Database password is not defined -- You must define it in the config file!'
            ))
        hostname = prompt.query('Database hostname:', default='localhost')
        dbport = prompt.query('Database path:', default=db_ports.get(dialect))
    print("#### Database season setup ####")
    start_yr = prompt.query('Start season year',
                            default='1990',
                            validators=[validators.IntegerValidator()])
    end_yr = prompt.query('End season year',
                          default='2020',
                          validators=[validators.IntegerValidator()])
    print("#### Data file setup ####")
    supplier = prompt.query('Name of data supplier:')
    is_club_db = prompt.options('Is this a club database?')
    spanish = prompt.options('Are country names in Spanish?')
    using_xml = prompt.options('Are XML files stored locally?', binary_options)
    if using_xml:
        xml_data_dir = prompt.query('Directory containing XML data files:',
                                    default='.',
                                    validators=[validators.PathValidator()])
        xml_squads = path_query('Relative path of Squad XML data files:')
        xml_summaries = path_query(
            'Relative path of Match Summary XML data files:')
        xml_events = path_query('Relative path of Match Event XML data files:')
    else:
        xml_data_dir = None
        xml_squads = None
        xml_summaries = None
        xml_events = None
    csv_data_dir = prompt.query('Directory containing CSV data files:',
                                default='.',
                                validators=[validators.PathValidator()])
    supplier_data_path = path_query(
        'Relative path of Suppliers CSV data files:')
    club_data_path = path_query('Relative path of Clubs CSV data files:')
    comp_data_path = path_query(
        'Relative path of Competitions CSV data files:')
    season_data_path = path_query('Relative path of Seasons CSV data files:')
    venue_data_path = path_query('Relative path of Venues CSV data files:')
    player_data_path = path_query('Relative path of Players CSV data files:')
    manager_data_path = path_query('Relative path of Managers CSV data files:')
    referee_data_path = path_query('Relative path of Referees CSV data files:')
    summary_data_path = path_query(
        'Relative path of Match Summary CSV data files:')
    event_data_path = path_query(
        'Relative path of Match Event CSV data files:')

    print("#### End setup questions ####")

    setup_dict = {
        'loader_file': loader_file.lower(),
        'config_file': config_file.lower(),
        'config_class': config_class,
        'supplier': supplier,
        'dialect': dialect,
        'dbname': dbname,
        'dbuser': dbuser,
        'dbhost': hostname,
        'dbport': dbport,
        'start_yr': start_yr,
        'end_yr': end_yr,
        'logging_dir': log_folder,
        'log_file_path': os.path.join(log_folder, 'marcotti.log'),
        'club_db': is_club_db,
        'country_prefix': 'es' * (spanish is True),
        'xml_data_dir': xml_data_dir,
        'xml_data': {
            'squads': xml_squads,
            'matches': xml_summaries,
            'events': xml_events
        },
        'csv_data_dir': csv_data_dir,
        'csv_data': {
            'suppliers': supplier_data_path,
            'competitions': comp_data_path,
            'seasons': season_data_path,
            'clubs': club_data_path,
            'venues': venue_data_path,
            'players': player_data_path,
            'managers': manager_data_path,
            'referees': referee_data_path,
            'matches': summary_data_path,
            'events': event_data_path
        }
    }
    return setup_dict
예제 #13
0
def setup_user_input():
    """
    Setup configuration and database loading script by querying information from user.

    :return:
    """
    print "#### Please answer the following questions to setup the folder ####"
    log_folder = prompt.query('Logging folder (must exist):',
                              default='.',
                              validators=[validators.PathValidator()])
    loader_file = prompt.query('Loader file name:', default='loader')
    config_file = prompt.query('Config file name:', default='local')
    config_class = prompt.query('Config class name:', default='LocalConfig')
    print "#### Database configuration setup ####"
    dialect = prompt.options('Marcotti-MLS Database backend:', dialect_options)
    if dialect == 'sqlite':
        dbname = prompt.query('Database filename (must exist):',
                              validators=[validators.FileValidator()])
        dbuser = ''
        hostname = ''
        dbport = 0
    else:
        dbname = prompt.query('Database name:')
        dbuser = prompt.query('Database user:'******'')
        puts(
            colored.red(
                'Database password is not defined -- You must define it in the config file!'
            ))
        hostname = prompt.query('Database hostname:', default='localhost')
        dbport = prompt.query('Database path:', default=db_ports.get(dialect))
    print "#### Database season setup ####"
    start_yr = prompt.query('Start season year',
                            default='1990',
                            validators=[validators.IntegerValidator()])
    end_yr = prompt.query('End season year',
                          default='2020',
                          validators=[validators.IntegerValidator()])
    print "#### Data file setup ####"
    top_level_data_dir = prompt.query('Directory containing CSV data files:',
                                      default='.',
                                      validators=[validators.PathValidator()])
    club_data_path = path_query('Relative path of Clubs data files:')
    comp_data_path = path_query('Relative path of Competitions data files:')
    comp_season_data_path = path_query(
        'Relative path of CompetitionSeasons data files:')
    player_data_path = path_query('Relative path of Players data files:')
    acq_data_path = path_query(
        'Relative path of Player Acquisitions data files:')
    salary_data_path = path_query('Relative path of Salaries data files:')
    partial_data_path = path_query(
        'Relative path of Partial Tenure data files:')
    minutes_data_path = path_query(
        'Relative path of Player Minutes data files:')
    field_stat_data_path = path_query(
        'Relative path of Field Player Statistics data files:')
    gk_stat_data_path = path_query(
        'Relative path of Goalkeeper Statistics data files:')
    points_data_path = path_query('Relative path of League Points data files:')
    print "#### End setup questions ####"

    setup_dict = {
        'loader_file': loader_file.lower(),
        'config_file': config_file.lower(),
        'config_class': config_class,
        'dialect': dialect,
        'dbname': dbname,
        'dbuser': dbuser,
        'dbhost': hostname,
        'dbport': dbport,
        'start_yr': start_yr,
        'end_yr': end_yr,
        'logging_dir': log_folder,
        'log_file_path': os.path.join(log_folder, 'marcotti.log'),
        'data_dir': top_level_data_dir,
        'data': {
            'clubs': club_data_path,
            'competitions': comp_data_path,
            'comp_seasons': comp_season_data_path,
            'players': player_data_path,
            'acquisitions': acq_data_path,
            'salaries': salary_data_path,
            'partials': partial_data_path,
            'minutes': minutes_data_path,
            'field_stats': field_stat_data_path,
            'gk_stats': gk_stat_data_path,
            'points': points_data_path
        }
    }
    return setup_dict
예제 #14
0
def mainLoop():
    cmd_status = 'status'
    cmd_randkill = 'randkill'
    cmd_randstart = 'randstart'
    cmd_deeprestart = 'deeprestart'
    cmd_randworkload = 'randworkload'
    cmd_exit = 'exit'
    cmd_start = 'start'
    cmd_kill = 'kill'
    cmd_strobetime = 'strobetime'

    init()

    while True:
        # cmds
        cmd_options = [
            {
                'selector': '0',
                'prompt': 'start/restart the cluster',
                'return': cmd_deeprestart
            },
            {
                'selector': '9',
                'prompt': '(gracefully) exit',
                'return': cmd_exit
            },
            {
                'selector': '1',
                'prompt': 'show status',
                'return': cmd_status
            },
            {
                'selector': '2',
                'prompt': 'random kill/start workload',
                'return': cmd_randworkload
            },
            {
                'selector': '3',
                'prompt': 'random kill one node',
                'return': cmd_randkill
            },
            {
                'selector': '4',
                'prompt': 'random start one node',
                'return': cmd_randstart
            },
            {
                'selector': '5',
                'prompt': 'start one node',
                'return': cmd_start
            },
            {
                'selector': '6',
                'prompt': 'kill one node',
                'return': cmd_kill
            },
            {
                'selector': '7',
                'prompt': 'strobe time yak',
                'return': cmd_strobetime
            },
        ]
        cmd = prompt.options("Cockroach cracker commands:", cmd_options)

        if cmd == cmd_status:
            show_status()
        elif cmd == cmd_randkill:
            cockroach.random_kill()
        elif cmd == cmd_randstart:
            cockroach.random_start()
        elif cmd == cmd_randworkload:
            cockroach.kill_start_workload(30)
        elif cmd == cmd_deeprestart:
            init()
        elif cmd == cmd_start:
            i = prompt.query('which node id?',
                             validators=[validators.IntegerValidator()])
            cockroach.start_node(i)
        elif cmd == cmd_kill:
            i = prompt.query('which node id?',
                             validators=[validators.IntegerValidator()])
            cockroach.kill_node(i)
        elif cmd == cmd_exit:
            cockroach.gracefully_exit()
            break
        elif cmd == cmd_strobetime:
            cobra_time.strobe_time('yak', 1000, 1000, 60)

        puts(colored.blue("-------"))