Игнор ошибки при валидации
This commit is contained in:
parent
f51a3ca403
commit
e5794029ab
|
@ -4,11 +4,13 @@ import os
|
|||
|
||||
import aiohttp
|
||||
import backoff
|
||||
import pydantic.error_wrappers
|
||||
from environs import load_dotenv
|
||||
|
||||
from models import Abitr
|
||||
from settings import ApiConfig, EtlConfig, MiscSettings
|
||||
from state import State
|
||||
from state import State, BaseStorage
|
||||
from tg_bot import TgBot
|
||||
|
||||
load_dotenv()
|
||||
|
||||
|
@ -39,7 +41,8 @@ class ApiExtractor:
|
|||
@backoff.on_exception(backoff.expo, (aiohttp.ClientResponseError, aiohttp.ClientConnectorError,
|
||||
aiohttp.ServerDisconnectedError), base=2, factor=1,
|
||||
max_value=int(misc_settings.max_wait_size), max_tries=None)
|
||||
async def get_extract_data(self, state: State, iblock_id: int, fields: list = None, **kwargs) -> list[Abitr]:
|
||||
async def get_extract_data(self, state: State, iblock_id: int, storage: BaseStorage, fields: list = None,
|
||||
**kwargs) -> list[Abitr]:
|
||||
|
||||
data = {
|
||||
'iblockId': iblock_id,
|
||||
|
@ -80,7 +83,16 @@ class ApiExtractor:
|
|||
abitr[key] = res[key]['VALUE']
|
||||
if abitr['BENEFITS'] == '' or abitr['BENEFITS'] is None:
|
||||
abitr['BENEFITS'] = 8
|
||||
try:
|
||||
abitrs.append(Abitr(**{key: value for key, value in abitr.items()}))
|
||||
except pydantic.error_wrappers.ValidationError as e:
|
||||
logging.info(f'Ошибка валидации ID {abitr["ID"]} - {str(e)}')
|
||||
tgbot = TgBot()
|
||||
await tgbot.send_notify(f'Ошибка валидации ID {abitr["ID"]} - {str(e)}')
|
||||
state.set_state(f'iblock_{iblock_id}', abitr["ID"])
|
||||
storage.save_state(state.local_state)
|
||||
|
||||
|
||||
if len(abitrs) > 0:
|
||||
logging.info(f'Получено абитуриентов - {len(abitrs)}')
|
||||
return abitrs
|
||||
|
|
|
@ -30,7 +30,7 @@ async def main():
|
|||
|
||||
while True:
|
||||
for iblock_id in api.iblocks:
|
||||
abitrs = await extractor.get_extract_data(iblock_id=int(iblock_id), state=state)
|
||||
abitrs = await extractor.get_extract_data(iblock_id=int(iblock_id), state=state, storage=storage)
|
||||
for abitr in abitrs:
|
||||
await loader.load_data(state=state, abitr=abitr, storage=storage, iblock_id=int(iblock_id))
|
||||
await asyncio.sleep(10)
|
||||
|
|
Loading…
Reference in New Issue
Block a user