@staticmethod
def human_print_plan(plan: object):
    'Prints the plan in a human friendly way'
    print(f"Name: {plan['name']}")
    print(f"Description: {(plan['description'] if ('description' in plan) else 'N/A')}")
    print(f"Services: {BackupServicePlan.service_list_to_str(plan['services'])}")
    print(f"Default: {(plan['default'] if ('deafult' in plan) else False)!s}")
    if (not plan['tasks']):
        return
    print()
    print('Tasks:')
    task_name_pad = 5
    schedule_pad = 10
    for task in plan['tasks']:
        if (len(task['name']) > task_name_pad):
            task_name_pad = len(task['name'])
        task['schedule_str'] = BackupServicePlan.format_schedule(task['schedule'])
        if (len(task['schedule_str']) > schedule_pad):
            schedule_pad = len(task['schedule_str'])
    task_name_pad += 1
    schedule_pad += 1
    header = f"{'Name':<{task_name_pad}} | {'Schedule':<{schedule_pad}} | Options"
    print(header)
    print(('-' * (len(header) + 5)))
    for task in plan['tasks']:
        options = BackupServicePlan.format_options(task)
        print(f"{task['name']:<{task_name_pad}} | {task['schedule_str']:<{schedule_pad}} | {options}")
Prints the plan in a human friendly way
@staticmethod
def human_print_plan(plan: object):
    
    print(f"Name: {plan['name']}")
    print(f"Description: {(plan['description'] if ('description' in plan) else 'N/A')}")
    print(f"Services: {BackupServicePlan.service_list_to_str(plan['services'])}")
    print(f"Default: {(plan['default'] if ('deafult' in plan) else False)!s}")
    if (not plan['tasks']):
        return
    print()
    print('Tasks:')
    task_name_pad = 5
    schedule_pad = 10
    for task in plan['tasks']:
        if (len(task['name']) > task_name_pad):
            task_name_pad = len(task['name'])
        task['schedule_str'] = BackupServicePlan.format_schedule(task['schedule'])
        if (len(task['schedule_str']) > schedule_pad):
            schedule_pad = len(task['schedule_str'])
    task_name_pad += 1
    schedule_pad += 1
    header = f"{'Name':<{task_name_pad}} | {'Schedule':<{schedule_pad}} | Options"
    print(header)
    print(('-' * (len(header) + 5)))
    for task in plan['tasks']:
        options = BackupServicePlan.format_options(task)
        print(f"{task['name']:<{task_name_pad}} | {task['schedule_str']:<{schedule_pad}} | {options}")