import urllib
from urllib.parse import unquote_plus

import bs4

from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def patch():
    """
    Для тестирования патча: ( cd /opt/crm; python3 -m patch.20220XXXXXXX_PATCHNAME )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    edited = set()
    for doc in tqdm(models.CmfDocument.list(fields=['text'])):
        soup = bs4.BeautifulSoup(doc.text.value, 'html.parser')
        for tag in soup.find_all(lambda tag: tag.has_attr('download')):
            url = unquote_plus(unquote_plus(tag.attrs['download']))
            title = url.split('/')[-1]
            if tag.attrs['title'] != title:
                edited.add(doc.code.value)
                tag.attrs['title'] = title
        if doc.code.value in edited:
            doc.text_draft = str(soup)
            doc.save()
            doc.do_approve()
    print(edited)
    print(f'Изменено {len(edited)}')


if __name__ == "__main__":
    patch()
