Example #1
0
def test_scheduler_change_set_adding_schedule():

    schedule_1 = ScheduleDefinition('schedule_1', "*****", "pipeline_name", {})
    schedule_2 = ScheduleDefinition('schedule_2', "*****", "pipeline_name", {})
    schedule_3 = ScheduleDefinition('schedule_3', "*****", "pipeline_name", {})
    schedule_4 = ScheduleDefinition('schedule_4', "*****", "pipeline_name", {})

    modified_schedule_2 = ScheduleDefinition('schedule_2', "0****",
                                             "pipeline_name",
                                             {'new_key': "new_value"})
    renamed_schedule_3 = ScheduleDefinition('renamed_schedule_3', "*****",
                                            "pipeline_name", {})

    running_1 = Schedule("1", schedule_1.schedule_definition_data,
                         ScheduleStatus.RUNNING, "", "")
    running_2 = Schedule("2", schedule_2.schedule_definition_data,
                         ScheduleStatus.RUNNING, "", "")
    running_3 = Schedule("3", schedule_3.schedule_definition_data,
                         ScheduleStatus.RUNNING, "", "")
    running_4 = Schedule("4", schedule_4.schedule_definition_data,
                         ScheduleStatus.RUNNING, "", "")

    # Add initial schedules
    change_set_1 = get_schedule_change_set([], [schedule_1, schedule_2])
    assert sorted(change_set_1) == sorted([('add', 'schedule_2', []),
                                           ('add', 'schedule_1', [])])

    # Add more schedules
    change_set_2 = get_schedule_change_set(
        [running_1, running_2],
        [schedule_1, schedule_2, schedule_3, schedule_4])
    assert sorted(change_set_2) == sorted([('add', 'schedule_3', []),
                                           ('add', 'schedule_4', [])])

    # Modify schedule_2
    change_set_3 = get_schedule_change_set(
        [running_1, running_2, running_3, running_4],
        [schedule_1, modified_schedule_2, schedule_3, schedule_4],
    )
    assert change_set_3 == [('change', 'schedule_2', [('cron_schedule',
                                                       ('*****', '0****'))])]

    # Delete schedules
    change_set_3 = get_schedule_change_set(
        [running_1, running_2, running_3, running_4], [schedule_3, schedule_4])
    assert sorted(change_set_3) == sorted([('remove', 'schedule_1', []),
                                           ('remove', 'schedule_2', [])])

    # Rename schedules
    change_set_4 = get_schedule_change_set(
        [running_1, running_2, running_3, running_4],
        [schedule_1, schedule_2, renamed_schedule_3, schedule_4],
    )
    assert sorted(change_set_4) == sorted([('add', 'renamed_schedule_3', []),
                                           ('remove', 'schedule_3', [])])
Example #2
0
def print_changes(repository, instance, print_fn=print, preview=False):
    debug_info = instance.scheduler_debug_info()
    errors = debug_info.errors
    changeset = get_schedule_change_set(
        instance.all_schedules(repository.name), repository.schedule_defs)

    if len(errors) == 0 and len(changeset) == 0:
        if preview:
            print_fn(
                click.style('No planned changes to schedules.',
                            fg='magenta',
                            bold=True))
            print_fn('{num} schedules will remain unchanged'.format(
                num=len(repository.schedule_defs)))
        else:
            print_fn(
                click.style('No changes to schedules.',
                            fg='magenta',
                            bold=True))
            print_fn('{num} schedules unchanged'.format(
                num=len(repository.schedule_defs)))
        return

    if len(errors):
        print_fn(
            click.style(
                'Planned Error Fixes:' if preview else 'Errors Resolved:',
                fg='magenta',
                bold=True))
        print_fn("\n".join(debug_info.errors))

    if len(changeset):
        print_fn(
            click.style('Planned Schedule Changes:' if preview else 'Changes:',
                        fg='magenta',
                        bold=True))

    for change in changeset:
        change_type, schedule_name, changes = change

        if change_type == "add":
            print_fn(click.style('  + %s (add)' % schedule_name, fg='green'))

        if change_type == "change":
            print_fn(
                click.style('  ~ %s (update)' % schedule_name, fg='yellow'))
            for change_name, diff in changes:
                if len(diff) == 2:
                    old, new = diff
                    print_fn(
                        click.style('\t %s: ' % change_name, fg='yellow') +
                        click.style(old, fg='red') + " => " +
                        click.style(new, fg='green'))
                else:
                    print_fn(
                        click.style('\t %s: ' % change_name, fg='yellow') +
                        click.style(diff, fg='green'))

        if change_type == "remove":
            print_fn(click.style('  - %s (delete)' % schedule_name, fg='red'))
Example #3
0
def print_changes(external_repository, instance, print_fn=print, preview=False):
    debug_info = instance.scheduler_debug_info()
    errors = debug_info.errors
    external_schedules = external_repository.get_external_schedules()
    changeset = get_schedule_change_set(
        instance.all_stored_schedule_state(external_repository.get_origin_id()), external_schedules
    )

    if len(errors) == 0 and len(changeset) == 0:
        if preview:
            print_fn(click.style("No planned changes to schedules.", fg="magenta", bold=True))
            print_fn("{num} schedules will remain unchanged".format(num=len(external_schedules)))
        else:
            print_fn(click.style("No changes to schedules.", fg="magenta", bold=True))
            print_fn("{num} schedules unchanged".format(num=len(external_schedules)))
        return

    if len(errors):
        print_fn(
            click.style(
                "Planned Error Fixes:" if preview else "Errors Resolved:", fg="magenta", bold=True
            )
        )
        print_fn("\n".join(debug_info.errors))

    if len(changeset):
        print_fn(
            click.style(
                "Planned Schedule Changes:" if preview else "Changes:", fg="magenta", bold=True
            )
        )

    for change in changeset:
        change_type, schedule_name, schedule_origin_id, changes = change

        if change_type == "add":
            print_fn(
                click.style(
                    "  + {name} (add) [{id}]".format(name=schedule_name, id=schedule_origin_id),
                    fg="green",
                )
            )

        if change_type == "change":
            print_fn(
                click.style(
                    "  ~ {name} (update) [{id}]".format(name=schedule_name, id=schedule_origin_id),
                    fg="yellow",
                )
            )
            for change_name, diff in changes:
                if len(diff) == 2:
                    old, new = diff
                    print_fn(
                        click.style("\t %s: " % change_name, fg="yellow")
                        + click.style(old, fg="red")
                        + " => "
                        + click.style(new, fg="green")
                    )
                else:
                    print_fn(
                        click.style("\t %s: " % change_name, fg="yellow")
                        + click.style(diff, fg="green")
                    )

        if change_type == "remove":
            print_fn(
                click.style(
                    "  - {name} (delete) [{id}]".format(name=schedule_name, id=schedule_origin_id),
                    fg="red",
                )
            )