|
|
||
|---|---|---|
| app | ||
| Dockerfile | ||
| Jenkinsfile | ||
| README.md | ||
| docker-compose.yaml | ||
| requirements.txt | ||
README.md
About
- Получаем и парсим данные с https://formats.saby.ru/
- Выполняем валидацию данных для БД
- Отправляем данные в БД oracle
- С помощью планировщика повторяем процессы выше.
Usage
Приложение запускается через main.py. Главный модуль parse_saby.py - находит по в html страницы нужные данные, работает не зависимо от других модулей, можно запускать отдельно.
How it's works
Проект расчитан на запуск в Docker контейнере. Для это есть Dockerfile и docker-compose.yaml. В Dockerfile используется подготовленый образ содержащий все необходимое для работы с базой данных Oracle и сам Python. docker-compose:
- Запускает main.py с ключом
--first-runдля первого запуска. - Парамметр env-file прокидывает файл .env сордержащий токен для подключение к Vault.
- Парамметр environment содержит часовой пояс.
1. Получение данных с сайта.
C перва запускается скрипт parse_saby.py
result_dict_data = parse_saby.process_reports_parse()
Основным модулем для забора нужных данных является bs4 с классом BeautifulSoup. BeautifulSoup представляет объект html страницы, это позволяет обращаеться по тэгам, что бы достать нужные данные. process_reports_parse() возвращает cписок словарей. Пример:
result_dict_data = [{128513: ('fns', 'Уведомление о налогах для ЕНП', '01.07.22', None, '5.03')}, {132526: ('sfr', 'АДВ-1 Анкета застрахованного лица', '09.01.23', '31.12.34', '2.0')}, {...}]
2. Предварительный парсинг - parse_data_in_list()
list_data = parse_data_in_list(result_dict_data)
Легкий парсиннг преобразуем лист словарей в лист листов. Это нужно для отправки в БД - берутся ключу к ним присваиваеюся значение по индексу из листа.
3. Валидация данных
list_data_validated = DataValid.validate_data(list_data)
Тут из листа по листу передаем данные в класс DataValid из модуля проекта validation.py. DataValid наследуется от класса BaseModul модуля pydantic. Сначало парсится дата, вторая дата в списке может быть None.
Потом проверяется соответсвие типов, и может выполняется явное преобразование. Забираем валидные данные в новый лист. Класс в рамках цикла пересоздается, для валидации следующего листа.
4. Отправка данных в БД
working_database.SimpleDB().data_transfer_in_database(list_data_validated)
4.1. Инциализация модуля working_database.py, подключение к hvac
Сервер hvac настрое на работу в тихом режиме, реализуется с помощью: init_oracle_client()
Тут выполняется сначало подключение к hvac серверу, получение секретов,
необохдимых для подключения к БД _create_db_pool_from_vault(). Что бы подключиться к серверу hvac используется секретный токен. Он забирается из переменной окружения, передается при создание контейнера(определенно в docker-compouse.yaml).
4.2. Подключение и отправка данных в БД
Метод класса data_transfer_in_database() получает данные для отправки в БД.
Данные имеют структуру лист словарей. Выполняется подключение к БД используя пул секретов из шага 4.1.
После чего передаются данные в процедуру P_RK_GOVERNMENT_REPORTS_INSERS.
Планировщик заданий - scheduler.py
scheduler.launch_the_scheduler()
Запускается при вервом запуска main.py с ключом --first-run через docker-compose.
Планировщик работает в фоновом режиме, пока не наступит заданое время.
Когда наступает заданое время запукает main.py. Время запуска по умолчанию 6 часов 0 минут.
Время можно изменить например на 9:30 следующим образом:
scheduler.launch_the_scheduler(h=9, m=30)