From a0718c637ea7a480984ffe60f7ad741cba680c54 Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Wed, 7 Jun 2023 01:33:05 +0200 Subject: [PATCH] Add downloading translator books --- src/app/services/downloader.py | 2 +- src/app/services/library_client.py | 25 +++++++++++++++++++++++++ src/app/services/task_creator.py | 2 ++ src/app/services/task_manager.py | 1 + 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/app/services/downloader.py b/src/app/services/downloader.py index d3729a7..5c61d4e 100644 --- a/src/app/services/downloader.py +++ b/src/app/services/downloader.py @@ -148,7 +148,7 @@ async def create_archive(task_id: uuid.UUID, redis: Redis = TaskiqDepends(get_re item = await LibraryClient.get_sequence(task.object_id) assert item name = item.name - case ObjectType.AUTHOR: + case ObjectType.AUTHOR | ObjectType.TRANSLATOR: item = await LibraryClient.get_author(task.object_id) assert item names = [item.first_name, item.last_name, item.middle_name] diff --git a/src/app/services/library_client.py b/src/app/services/library_client.py index d1ff57a..f72a3c2 100644 --- a/src/app/services/library_client.py +++ b/src/app/services/library_client.py @@ -17,6 +17,11 @@ class AuthorBook(BaseModel): available_types: list[str] +class TranslatorBook(BaseModel): + id: int + available_types: list[str] + + Item = TypeVar("Item", bound=BaseModel) @@ -81,6 +86,26 @@ class LibraryClient: return Page[AuthorBook].parse_raw(response.text) + @staticmethod + async def get_translator_books( + translator_id: int, allowed_langs: list[str], page: int = 1 + ) -> Page[TranslatorBook] | None: + async with httpx.AsyncClient() as client: + response = await client.get( + f"{env_config.LIBRARY_URL}/api/v1/translators/{translator_id}/books", + params={ + "page": page, + "allowed_langs": allowed_langs, + "is_deleted": "false", + }, + headers={"Authorization": env_config.LIBRARY_API_KEY}, + ) + + if response.status_code != 200: + return None + + return Page[TranslatorBook].parse_raw(response.text) + @staticmethod async def get_sequence(sequence_id: int) -> Sequence | None: async with httpx.AsyncClient() as client: diff --git a/src/app/services/task_creator.py b/src/app/services/task_creator.py index 3430186..112a8c7 100644 --- a/src/app/services/task_creator.py +++ b/src/app/services/task_creator.py @@ -27,6 +27,8 @@ class TaskCreator: books_getter = LibraryClient.get_sequence_books case ObjectType.AUTHOR: books_getter = LibraryClient.get_author_books + case ObjectType.TRANSLATOR: + books_getter = LibraryClient.get_translator_books while current_page <= pages_count: book_page = await books_getter(object_id, allowed_langs, page=current_page) diff --git a/src/app/services/task_manager.py b/src/app/services/task_manager.py index c406ea0..e474009 100644 --- a/src/app/services/task_manager.py +++ b/src/app/services/task_manager.py @@ -14,6 +14,7 @@ class TaskStatusEnum(enum.StrEnum): class ObjectType(enum.StrEnum): SEQUENCE = "sequence" AUTHOR = "author" + TRANSLATOR = "translator" class Task(BaseModel):