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