Fix get_book

This commit is contained in:
2022-12-07 21:01:21 +01:00
parent 57f45d8329
commit 867177e106
2 changed files with 18 additions and 14 deletions

View File

@@ -110,16 +110,14 @@ async def cache_file_by_book_id(
) -> Optional[CachedFile]: ) -> Optional[CachedFile]:
r_client: aioredis.Redis = ctx["redis"] r_client: aioredis.Redis = ctx["redis"]
try: get_book_retry = 3 if by_request else 1
book = await get_book(book_id) book = await get_book(book_id, get_book_retry)
except httpx.ConnectError:
if book is None:
if by_request: if by_request:
return None return None
raise Retry(defer=15) raise Retry(defer=15)
if book is None:
return None
if file_type not in book.available_types: if file_type not in book.available_types:
return None return None

View File

@@ -48,7 +48,11 @@ class BookDetail(Book):
AUTH_HEADERS = {"Authorization": env_config.LIBRARY_API_KEY} AUTH_HEADERS = {"Authorization": env_config.LIBRARY_API_KEY}
async def get_book(book_id: int) -> Optional[BookDetail]: async def get_book(book_id: int, retry: int = 3) -> Optional[BookDetail]:
if retry == 0:
return None
try:
async with httpx.AsyncClient(timeout=2 * 60) as client: async with httpx.AsyncClient(timeout=2 * 60) as client:
response = await client.get( response = await client.get(
f"{env_config.LIBRARY_URL}/api/v1/books/{book_id}", headers=AUTH_HEADERS f"{env_config.LIBRARY_URL}/api/v1/books/{book_id}", headers=AUTH_HEADERS
@@ -58,6 +62,8 @@ async def get_book(book_id: int) -> Optional[BookDetail]:
return None return None
return BookDetail.parse_obj(response.json()) return BookDetail.parse_obj(response.json())
except (httpx.ConnectError, httpx.ReadError, httpx.ReadTimeout):
return await get_book(book_id, retry=retry - 1)
async def get_books(page: int, page_size: int) -> Page[Book]: async def get_books(page: int, page_size: int) -> Page[Book]: