from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def fix_fix_versions():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202309070934_fix_attach_ver )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    # 30 sec на базе bcrm
    l_step = 10
    l_i = 0
    while True:
        lists = models.CmfList.list(logic_prefix='list.release',
                                    slice=[l_i*l_step, l_i*l_step+l_step],
                                    order_by=['cmf_created_at'])
        l_i += 1
        if not lists:
            break

        print(f'Обрабатываем релизы: {lists}')
        while True:
            tasks = models.CmfTask.list(filter=['lists', 'IN', lists],
                                        fields=['lists.logic_prefix', 'fix_versions'],
                                        slice=[0, 100],
                                        order_by=['cmf_created_at'])
            if not tasks:
                break
            print(f'Обрабатываем часть задач: 100')
            for task in tasks:
                move = []
                for list in task.lists:
                    if list.logic_prefix == 'list.release':
                        move.append(list)
                print(f'{task.id}')
                print(f'BEFORE task.lists: {task.lists}')
                print(f'BEFORE task.fix_versions: {task.fix_versions}')
                for list in move:
                    task.lists.remove(list)
                    task.fix_versions.append(list)
                print(f'AFTER task.lists: {task.lists}')
                print(f'AFTER task.fix_versions: {task.fix_versions}')
                task.save(only_data=True, emit=False, notify=False)
            commit_all_ds()

if __name__ == "__main__":
    fix_fix_versions()
