from patch.include import *
from tqdm import tqdm


def update_tree_label_recursive(tree_nodes):
    for node in tree_nodes:
        node.load_fields(['tree_node_is_branch'])
        if node.tree_node_is_branch:
            node.load_fields(['tree_nodes'])
            if node.tree_nodes:
                update_tree_label_recursive(node.tree_nodes)
            else:
                node.tree_node_is_branch = False
                node.save(only_data=True)

@app_context(commit=True)
def patch():
    """
    Для тестирования патча: ( cd /opt/crm; python3 -m patch.20220XXXXXXX_PATCHNAME )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    projects = models.CmfProject.list(fields=['tree_nodes'])
    for project in tqdm(projects):
        update_tree_label_recursive(project.tree_nodes)


if __name__ == "__main__":
    patch()
