from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def attach():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202309061553_attach )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    import shutil
    print('Перемещаем файлы без парента в obj')
    step = 1000
    i = 0
    cnt = models.CmfAttachment.count(filter=['parent', '==', None])
    while step * i < cnt:
        for attach in tqdm(models.CmfAttachment.list(filter=['parent', '==', None], 
                                                    fields=['url', 'url_preview', 'url_preview_img'],
                                                    slice=[step * i, step * i + step])):
            try:
                print(attach.url)
                if '/obj/' in attach.url:
                    continue
                print(attach.url)
                from_path = attach.url.value.replace('/files', config.UPLOAD_DIR)
                to_path = attach.url.value.replace('/files', f'{config.UPLOAD_DIR}/obj')
                if os.path.exists(from_path):
                    shutil.move(from_path, to_path)
                if os.path.exists(f'{from_path}.meta'):
                    shutil.move(f'{from_path}.meta', f'{to_path}.meta')
                attach.url = attach.url.value.replace('/files', '/files/obj')
                attach.url_preview = attach.url_preview.value.replace('/files', '/files/obj')
                attach.url_preview_img = attach.url_preview_img.value.replace('/files', '/files/obj')
                attach.save(only_data=True)
                attach.dp.commit()
            except Exception as e:
                print(f'Ошибка переноса {e}')
        i += 1


if __name__ == "__main__":
    attach()
