parse_saby/README.md

79 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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)
```