Skip to content

Vladislav-Isakov/Auto-generate-pdf-vk

Repository files navigation

Auto-generate-pdf-vk - В чём суть проекта?

Вам нужно отправлять множество PDF файлов, но делать это руками долго и не эффективно? Тогда автогенерация PDF вам в этом поможет.

С помощью многопоточности и асинхронности фреймворка достигается высокая скорость отправки файлов с письмами на почту пользователей.

Используемый фреймворк Flask

Flask асинхронный, тем самым обращение к API сервисов или отправка файлов через API становится быстрее.

В проекте используется Flask версии 2.3.2, учитывайте это при реализации логики.

По умолчанию в проекте используется режим дебагинга - debug, если вы собираетесь разворачивать проект на своей машине, отключите данный режим в модуле run.py

Многопоточность

Использование многопоточности ускоряет IO-bound(ввод-вывод) процессы, так мы обходим GIL - глобальную блокировку итерпритатора, т.к Python выполняет только один поток байт-кода одновременно.

Многопоточность используется в модуле mail.py - для отправки писем на почты пользователей.

Откуда берутся данные для отправки?

Данные: имя пользователя, фамилия, заголовок, тело текст в PFD файле и т.д. берутся из Google Sheets.

Вам необходимо создать гугл-таблицу, наполнить её данными. В конфигурации проекта config.py, указать в атрибуте TABLE_LETTERS_TO_MANAGERS_SPREADSHEET_ID класса вставить ID таблицы.

Пример ID таблицы, у нас есть ссылка вида https://docs.google.com/spreadsheets/d/1NsXDHSDPlVdf7gbNxC4Gib/edit#gid=0 - ID таблицы будет = 1NsXDHSDPlVdf7gbNxC4Gib

Настройка конфигурации

  • Заходим в модуль config.py и следуем инструкции:
  • Измените SECRET_KEY на любой, сложный ключ - для безопасности WEB-приложения. Можете сгенирировать hex строку в консоли, с помощью команды:
python -c 'import secrets; print(secrets.token_hex())'
  • В атрибуте MAIL_USERNAME указываем email с которого будут отправляться письма.
  • MAIL_PASSWORD - указываем пароль для внешних сервисов, сгенерировать его можно тут.
  • MAIL_DEFAULT_SENDER - указываем почту, с которой будут отправляться письма, в случае если не передадим её в функцию для отправки письма, будет использована почта по умолчанию.
  • MAIL_DEFAULT_THEME - указываем тему письма по умолчанию, если не передадим её в функцию для отправки письма - будет использоваться она.
  • Если будете заливать скрипт на свою машину, раскоментируйте атрибуты: SESSION_COOKIE_SECURE, REMEMBER_COOKIE_SECURE, SESSION_COOKIE_HTTPONLY, REMEMBER_COOKIE_HTTPONLY, SESSION_COOKIE_SAMESITE - они нужны для безопасности вашего WEB-приложения - Flask.

Необходимые столбцы в гугл-таблице

A B C D E F G H I F
Почта пользователя на которую будет отправлено письмо Второстепенная почта (не обязательно) Пол пользователя (М/Ж) Текст для хедера в PDF файле Текст для приветствия - над основным текстом в PDF файле Основной текст для PDF файла Время отправки письма Статус доставки письма - Письмо будет доставлено, установится статус "Доставлено" Ссылка для скачивания сгенерированного файла с машины Чек-бокс, если чек-бокс нажат, письмо будет отправлено, если нет - система не сгенерирует файл и не отправит его на почту пользователя

Пример гугл-таблицы после отправки письма на необходимые email/email's:

A B C D E F G H I F
[email protected] [email protected] М Начальнику управления автоматизации процессов [email protected] Уважаемый Miguel Grinberg! Выражаем Вам благодарность за фреймворк Flask 02.10.2023 17:48:23 Доставлено http://127.0.0.1:5000/pdf/mail/fab996074f7619662da3b38fdace900f.pdf

Необходимые настройки в проекте

  • Перейдите в модуль app/classes.py, в классе PDF, укажите путь до exe файла генератора PDF, скачать его можно тут.

  • Перейдите в модуль app/functions.py, в функции AutoSendingEmailsAdmin, измените переменные на свои (номера столбцов начинаются с 0 - как в списке, например у нас есть таблица A B C, номер столбца B будет 1):

    range - название листа в таблице с которого будут читаться данные.

    email_one - номер столбца, где будут основные email пользователей.

    email_two - номер столбца, где будут вторичные email пользователей (необязательно).

    text_header - номер столбца, где будет текст хеадера для PDF файла, в правом левом углу.

    text_greeting - номер столбца, где будет приветственный текст, находится над основным текстом в PDF файле.

    text_body - номер столбца, где будет основной текст - наполнение в PDF файле.

    employee_gender - номер столбца, где будет пол получателя

    mail_text_body - текст в email письме, которое будет отправлено с прикреплённым PDF файлом.

В блоках обработки исключений try/except, в except будет вызов функции values_batch_update_in_google_spreadsheet(она записывает значения в столбцы таблицы) вам необходимо в ключах range изменить значения на свои.

В текущем проекте стоят значения - названия столбцов:

R - отвечает за столбец с временем отправки письма

S - отвечает за столбец со статусом отправки

T - отвечает за столбец с ссылкой на pdf файл на машине.

Ошибки при отправке писем

Если во время отправки писем на почты пользователей, возникнет ошибка, она запишется в файл логов, папка /logs Ошибки возникают чаще всего, в случае если email пользователя невалидный.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published