from patch.include import *
from tqdm import tqdm


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

    with cmfutil.disable_acl(), cmfutil.disable_notify():
        for scheme in models.CmfAssetScheme.list():
            # Идемпотентный метод
            scheme._scaffold_assets()
            
            assets_folder = models.CmfFolder.get(sys_type='assets', parent=scheme)
            asset_cats = models.CmfAssetCat.list(filter=[['parent', '==', scheme], ['tree_parent', '==', None]])
            for asset_cat in asset_cats:
                if not asset_cat.tree_parent:
                    asset_cat.tree_parent = assets_folder
                    asset_cat.save()

            ct_folder = models.CmfFolder.get(sys_type='asset_types', parent=scheme)

            asset_type_cats = models.CmfAssetTypeCat.list(filter=[['parent', '==', scheme], ['tree_parent', '==', None]])
            for asset_type_cat in asset_type_cats:
                if not asset_type_cat.tree_parent:
                    asset_type_cat.tree_parent = ct_folder
                    asset_type_cat.save()

if __name__ == "__main__":
    asset_recover_treeparent()
