Skip to content
Snippets Groups Projects
Commit edcf12dc authored by philip.roeggla's avatar philip.roeggla
Browse files

typo

parent 61323a0a
No related branches found
No related tags found
No related merge requests found
import asyncio
from dataclasses import dataclass from dataclasses import dataclass
import typing import typing
import httpcore
from lxml import etree as lxmletree from lxml import etree as lxmletree
import httpx import httpx
...@@ -16,6 +18,7 @@ class RecordRetriever: ...@@ -16,6 +18,7 @@ class RecordRetriever:
log: list log: list
all_ok: bool all_ok: bool
sleep: float
record_xpath = lxmletree.XPath( record_xpath = lxmletree.XPath(
r'/srw:searchRetrieveResponse/srw:records/srw:record[1]/srw:recordData/marc:record[1]', r'/srw:searchRetrieveResponse/srw:records/srw:record[1]/srw:recordData/marc:record[1]',
...@@ -27,6 +30,7 @@ class RecordRetriever: ...@@ -27,6 +30,7 @@ class RecordRetriever:
self.log = [] self.log = []
self.all_ok = True # so far self.all_ok = True # so far
self.session = session self.session = session
self.sleep = 0.01
@dataclass @dataclass
class Record: class Record:
...@@ -44,21 +48,60 @@ class RecordRetriever: ...@@ -44,21 +48,60 @@ class RecordRetriever:
async def get_record_from_ac_number(self, ac_number: str) -> typing.Optional[Record]: async def get_record_from_ac_number(self, ac_number: str) -> typing.Optional[Record]:
# todo timeout error
response = await self.session.get(url=self.url, params={ try:
'startRecord': 1, await asyncio.sleep(self.sleep)
'maximumRecords': 1, response = await self.session.get(url=self.url, params={
'query': f'alma.local_control_field_009={ac_number}', 'startRecord': 1,
'version': '1.2', 'maximumRecords': 1,
'operation': 'searchRetrieve', 'query': f'alma.local_control_field_009={ac_number}',
'recordSchema': 'marcxml', 'version': '1.2',
}, 'operation': 'searchRetrieve',
timeout=5 'recordSchema': 'marcxml',
) }, timeout=60)
except httpx.ConnectTimeout as timeout:
self.log.append({
'error': 'time_out',
'message': str(timeout),
'ac_number': ac_number,
})
return
except Exception as error:
self.sleep *= 1.3
try:
await asyncio.sleep(self.sleep)
response = await self.session.get(url=self.url, params={
'startRecord': 1,
'maximumRecords': 1,
'query': f'alma.local_control_field_009={ac_number}',
'version': '1.2',
'operation': 'searchRetrieve',
'recordSchema': 'marcxml',
}, timeout=60)
except httpx.ConnectTimeout as timeout:
self.log.append({
'error': 'time_out',
'message': str(timeout),
'ac_number': ac_number,
})
return
except Exception as error:
self.sleep *= 1.3
self.log.append({
'error': 'time_out',
'message': str(error),
'ac_number': ac_number,
})
return
sub_log = { sub_log = {
'ac_number': ac_number, 'ac_number': ac_number,
'status_code': response.status_code, 'status_code': response.status_code,
'url': response.url.full_path,
} }
if response.status_code != 200: if response.status_code != 200:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment