Ejemplo n.º 1
0
def main(args):
    if args.out and args.filename:
        raise ValueError('out and filename can not be used together')

    mission = args.mission[0]
    filename = args.filename
    if not filename:
        filename = (
            mission.replace('-', '_') + '.' +
            conf.default_domain_data['extension']
        )


    if not args.out:
        print('Requesting...')

    data = get_mission_info(mission)
    code = data['code']
    description = data['description']

    output = code_for_file(mission, code, 
        None if args.without_info else description)

    if args.out:
        print(output)
        return


    init_code_file(filename, output)
    print('Done')
Ejemplo n.º 2
0
def write_solution(slug, initial_file, solution_path):
    domain = conf.default_domain_data
    logging.info("Write a solution into %s for %s %s", solution_path, slug,
                 initial_file)
    folder = Folder(slug)
    dirname = os.path.dirname(solution_path)
    os.makedirs(dirname, exist_ok=True)
    with open(solution_path, 'w', encoding='utf8') as fh:
        fh.write(code_for_file(slug, folder.initial_code(initial_file)))

    st = os.stat(solution_path)
    os.chmod(solution_path, st.st_mode | stat.S_IEXEC)
Ejemplo n.º 3
0
def sync_single_mission(mission):
    domain_data = conf.default_domain_data
    item = get_user_single_mission(mission)
    if item is None or item['stationName'] is None:
        return
    mission = item['slug']
    code = item['code']
    description = item['description']
    folder = domain_data.get('solutions')

    output = code_for_file(mission, code, description)

    filename = gen_filename(mission, item['stationName'], folder)
    init_code_file(filename, output)
    return filename
Ejemplo n.º 4
0
def main(args):
    folder = args.folder
    with_unseen = args.include_unseen
    with_solved = not args.exclude_solved
    save_config = not args.without_config

    domain_data = conf.default_domain_data

    if not folder:
        folder = domain_data.get('solutions')
        if not folder:
            print('Select folder')
            return

    print('Requesting...')
    data = get_user_missions()
    os.makedirs(folder, exist_ok=True)

    for item in data['objects']:
        if not item['isStarted'] and not with_unseen:
            continue

        if item['isSolved'] and not with_solved:
            continue

        mission = item['slug']
        code = item['code']
        description = item['description']

        filename = os.path.join(
            folder,
            mission.replace('-', '_') + '.' + domain_data['extension'])

        output = code_for_file(mission, code,
                               None if args.without_info else description)

        init_code_file(filename, output)

        print(filename + ' - Done')

        if save_config:
            conf.default_domain_section['solutions'] = os.path.abspath(folder)
            conf.save()
Ejemplo n.º 5
0
def main(args):
    mission = args.mission[0]
    filename = args.filename

    if filename:
        print('Requesting...')

    data = get_mission_info(mission)
    code = data['code']
    description = data['description']

    output = code_for_file(mission, code,
                           None if args.without_info else description)

    if not filename:
        print(output)
        return

    init_code_file(filename, output)
    print('Done')
Ejemplo n.º 6
0
def main(args):
    folder = args.folder
    with_unseen = not args.exclude_unseen
    with_solved = not args.exclude_solved
    save_config = not args.without_config

    domain_data = conf.default_domain_data

    if not folder:
        folder = domain_data.get('solutions')
        if not folder:
            print('Select folder')
            return
        print('Using folder "{}"'.format(folder))

    if args.configure_only:
        conf.default_domain_section['solutions'] = os.path.abspath(folder)
        conf.save()
        return

    paths = solutions_paths(folder)

    print('Requesting...')
    data = get_user_missions()
    for item in data['objects']:
        if not item['isStarted'] and not with_unseen:
            continue

        if item['isSolved'] and not with_solved:
            continue

        mission = item['slug']
        code = item['code']
        description = item['description']

        output = code_for_file(mission, code,
                               None if args.without_info else description)

        # file exist
        if mission not in paths:
            filename = gen_filename(mission, item['stationName'], folder)
            init_code_file(filename, output)
            print(filename + ' - Created')
            continue

        filename = paths[mission]
        f_stats = os.stat(filename)

        # file changed
        with open(filename, 'r', encoding='utf-8') as fh:
            local_code = fh.read()
            if code_for_send(local_code) == code_for_send(output):
                continue

        t_changed = time.time() - f_stats.st_mtime

        # local file have been changed
        if not item['secondsPast'] or t_changed < item['secondsPast']:
            print(filename + ' - Sending... ', end='')
            save_code(code_for_send(local_code), item['id'])
            print('Done')

        # file was changed through the web interface
        else:
            init_code_file(filename, output)
            print(filename + ' - Overwritten')

    if save_config:
        conf.default_domain_section['solutions'] = os.path.abspath(folder)
        conf.save()