Go to file
korotkov 95ef2acff7 python from 3.14 to 3.13 2025-11-06 16:16:25 +05:00
app Ошибка должна записываться в логи, но это не произходит, ищу причину 2025-11-06 11:44:37 +05:00
Dockerfile python from 3.14 to 3.13 2025-11-06 16:16:25 +05:00
Jenkinsfile Проверка работаспасобности в логах Jenkins 2025-11-06 10:41:37 +05:00
README.md Добавление логирование, еще не для всех случаев и обработка ошибок при передачив БД 2025-11-05 17:00:05 +05:00
docker-compose.yaml проверка контейнера 2025-11-06 13:17:11 +05:00
requirements.txt добавление нужных модулей 2025-09-03 14:37:34 +05:00

README.md

About

  • Получаем и парсим данные с https://formats.saby.ru/
  • Выполняем валидацию данных для БД
  • Отправляем данные в БД oracle
  • Планировщик настроенный на определеное время. Повторящий все процессы описанные в About сверху вниз.

Usage

Боевой запуск через main.py
Тестовый запуск чере test.py. В test.py не выполняется подключение к БД, выполяется лишь подготовка данных. Благодоря этому не имеет значение где запщуен код. Можно полностью отследить процесс парсинга и валидации.

How it's works

Запуск кода осущетсвляется через main.py или test.py
Важно: в test.py не выполняется 4 и 5 шаг.

1. Получение данных с сайта.

C перва запускается скрипт parse_saby.py

result_dict_data = parse_saby.process_reports_parse()

Основным модулем для забора нужных данных является bs4 с классом BeautifulSoup. BeautifulSoup представляет объект html страницы, это позволяет обращаеться по тэгам, что бы достать нужные данные. Модуль возвращает 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.

5. Планировщик заданий.

scheduler.launch_the_scheduler()

Планировщик работает в фоновом режиме, пока не наступит заданое время. Когда наступает заданое время запукает main.py. Время запуска по умолчанию 6 часов 0 минут.
Время можно изменить например на 9:30 следующим образом:

scheduler.launch_the_scheduler(h=9, m=30)