# 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. validate_data() and validation.py ``` list_data_validated = 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) ```