from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def clean_testcaserunhistorystep():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.clean_testcaserunhistorystep )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """

    def delete_step(step):
        """Рекурсивное удаление вложенных шагов"""
        for child in step.children_steps:
            delete_step(child)
        for deffect in step.deffects:
            deffect.delete(TEXKOM_db_delete=True)
        for attachment in models.CmfAttachment.list(filter=['parent', '==', step]):
            attachment.delete(TEXKOM_db_delete=True)
        step.delete(TEXKOM_db_delete=True)

    print('Запуск патча clean_testcaserunhistorystep')
    limit = 100
    while True:
        steps = models.CmfTestcaseRunHistoryStep.list(
            filter=['parent_step', '==', None],  # без вложенных (выбираются в delete_step)
            fields=['deffects', 'children_steps'],
            slice=[0, limit],  # в следующую выборку удалённые не попадут
            include_deleted=True, order_by=['id'])
        if not steps:
            break
        for step in tqdm(steps):
            delete_step(step)
        cmf_commit()


if __name__ == "__main__":
    clean_testcaserunhistorystep()
