from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def create_column_history():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202508151035_create_column_history )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    print('Запуск патча create_column_history')
    history_fields = []
    for field_name in models.CmfTask.fields:
        if models.CmfTask.fields[field_name].column_history:
            history_fields.append(field_name)
    batch_size = 5000
    cnt=models.CmfTask.count(include_templates=False)
    progress = tqdm(total=cnt)
    for start in range(0, cnt, batch_size):
        histories = []
        for obj in models.CmfTask.list(fields=history_fields, slice=[start, start + batch_size],
                                       include_templates=False):
            for fname in history_fields:
                field = getattr(obj, fname)
                if field.value is not None:
                    field_history = field.history()
                    field_history['obj_id'] = field_history['obj']
                    del field_history['obj']
                    histories.append(field_history)

            progress.update(1)
        models.CmfOrmColumnHistory.bulk_insert(values=histories)
        cmf_commit()


if __name__ == "__main__":
    create_column_history()
