Добавление логирование, еще не для всех случаев и обработка ошибок при передачив БД
parent
d5113bb9b0
commit
bca541a42d
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
# How it's works
|
||||
Запуск кода осущетсвляется через main.py или test.py
|
||||
Важно: в test.py не выполняется 4 и 5 шаг.
|
||||
**Важно:** в test.py не выполняется 4 и 5 шаг.
|
||||
|
||||
## 1. Получение данных с сайта.
|
||||
C перва запускается скрипт parse_saby.py
|
||||
|
|
@ -32,11 +32,11 @@ result_dict_data = [{128513: ('fns', 'Уведомление о налогах
|
|||
```
|
||||
list_data = parse_data_in_list(result_dict_data)
|
||||
```
|
||||
Легкий парсиннг, для преобразование, нужное в дальнейшем.
|
||||
Легкий парсиннг для преобразование, нужное в дальнейшем.
|
||||
|
||||
## 3. validate_data() and validation.py
|
||||
## 3. Валидация данных
|
||||
```
|
||||
list_data_validated = validate_data(list_data)
|
||||
list_data_validated = DataValid.validate_data(list_data)
|
||||
```
|
||||
Тут из листа по листу передаем данные в класс DataValid из модуля validation.py.
|
||||
DataValid наследуется от класса BaseModul модуля pydantic.
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import working_database
|
|||
import parse_saby
|
||||
from validation import DataValid
|
||||
import scheduler
|
||||
import write_error_to_log
|
||||
|
||||
print("Запуск main.py")
|
||||
|
||||
|
|
@ -20,6 +21,8 @@ def parse_data_in_list(dict_data: dict) -> list:
|
|||
result.append([key_id, *value_data])
|
||||
return result
|
||||
|
||||
print("Очиcтка лог файла")
|
||||
write_error_to_log.clear_to_log()
|
||||
|
||||
print("1/5. Запуск парсинга сайта")
|
||||
result_dict_data = parse_saby.process_reports_parse()
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
|
||||
import write_error_to_log
|
||||
|
||||
def parse_html(url: str):
|
||||
"""
|
||||
|
|
@ -182,6 +182,7 @@ def process_reports_parse(url_formats = 'https://formats.saby.ru'):
|
|||
print_report_data(dict_result_title, name_title)
|
||||
except Exception as e:
|
||||
print(f"Ошибка при обработке отчета {report_title}: {str(e)}")
|
||||
error_message = f"ERROR-PARSE_SABY: {e} DATA: {report_title}"
|
||||
continue
|
||||
return dict_result
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ from os import environ
|
|||
import hvac
|
||||
import hvac.exceptions
|
||||
from oracledb import Error, create_pool, init_oracle_client
|
||||
import write_error_to_log
|
||||
|
||||
init_oracle_client()
|
||||
|
||||
|
|
@ -89,15 +90,25 @@ class SimpleDB:
|
|||
for dict_argument_bd in list_data:
|
||||
print("Отправляемые аргрументы: ", dict_argument_bd)
|
||||
print("Типы данных: ", *map(type, dict_argument_bd.values()))
|
||||
cursor.callproc('P_RK_GOVERNMENT_REPORTS_INSERS', [
|
||||
dict_argument_bd['id'],
|
||||
dict_argument_bd['organ'],
|
||||
dict_argument_bd['names'],
|
||||
dict_argument_bd['date_from'],
|
||||
dict_argument_bd['date_to'], # Может быть None
|
||||
dict_argument_bd['ver'],
|
||||
])
|
||||
except Error as e:
|
||||
raise Error(f'Ошибка при отправке данных в БД: {e}')
|
||||
try:
|
||||
cursor.callproc('P_RK_GOVERNMENT_REPORTS_INSERS', [
|
||||
dict_argument_bd['id'],
|
||||
dict_argument_bd['organ'],
|
||||
dict_argument_bd['names'],
|
||||
dict_argument_bd['date_from'],
|
||||
dict_argument_bd['date_to'], # Может быть None
|
||||
dict_argument_bd['ver'],
|
||||
])
|
||||
except Error as e:
|
||||
# Проверка является ли запись дублирующей
|
||||
if 'ORA-00001' in str(e): continue
|
||||
# В остальных случаях запись ошибки и пропуск данных.
|
||||
else:
|
||||
error_message = f"ERROR_DB-WRITE: {e} DATA: {dict_argument_bd}"
|
||||
# Запись логов
|
||||
write_error_to_log.write_to_log(error_message)
|
||||
continue
|
||||
except Exception as e:
|
||||
error_message = f"ERROR_DB-GLOBAL: {e}"
|
||||
write_error_to_log.write_to_log(error_message)
|
||||
raise Error(f'Неожиданная ошибка: {e}')
|
||||
|
|
|
|||
Loading…
Reference in New Issue