79 lines
4.6 KiB
Markdown
79 lines
4.6 KiB
Markdown
# 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)
|
||
```
|
||
|
||
|
||
|