From 7d20f148f3fe0e0408b61f496a9cbb03ed05170c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=90=D0=BD?= =?UTF-8?q?=D1=84=D0=B8=D0=BC=D0=BE=D0=B2?= Date: Sun, 1 Oct 2023 00:30:17 +0300 Subject: [PATCH] feat: macros support --- examples/get_test_entities.py | 1 + .../domain/entities/issue_field.py | 12 +++ ya_tracker_client/domain/entities/macro.py | 24 ++++++ .../domain/repositories/__init__.py | 4 +- .../domain/repositories/macro.py | 77 +++++++++++++++++++ .../domain/repositories/macros.py | 5 -- ya_tracker_client/service/api.py | 4 +- 7 files changed, 118 insertions(+), 9 deletions(-) create mode 100644 ya_tracker_client/domain/entities/issue_field.py create mode 100644 ya_tracker_client/domain/entities/macro.py create mode 100644 ya_tracker_client/domain/repositories/macro.py delete mode 100644 ya_tracker_client/domain/repositories/macros.py diff --git a/examples/get_test_entities.py b/examples/get_test_entities.py index b61d889..bd791b5 100644 --- a/examples/get_test_entities.py +++ b/examples/get_test_entities.py @@ -35,6 +35,7 @@ async def main() -> None: await client.get_projects_list(expand='queues') await client.get_external_applications() await client.get_external_links("TRACKER-1") + await client.get_macros('TRACKER') await client.stop() diff --git a/ya_tracker_client/domain/entities/issue_field.py b/ya_tracker_client/domain/entities/issue_field.py new file mode 100644 index 0000000..b8db869 --- /dev/null +++ b/ya_tracker_client/domain/entities/issue_field.py @@ -0,0 +1,12 @@ +from ya_tracker_client.domain.entities.base import AbstractEntity + + +class IssueFieldShort(AbstractEntity): + url: str + id: str + display: str + + +class IssueFieldChange(AbstractEntity): + field: IssueFieldShort + value: list diff --git a/ya_tracker_client/domain/entities/macro.py b/ya_tracker_client/domain/entities/macro.py new file mode 100644 index 0000000..3229fcd --- /dev/null +++ b/ya_tracker_client/domain/entities/macro.py @@ -0,0 +1,24 @@ +from pydantic import Field + +from ya_tracker_client.domain.entities.base import AbstractEntity +from ya_tracker_client.domain.entities.issue_field import IssueFieldChange +from ya_tracker_client.domain.entities.queue import QueueShort + + +class Macro(AbstractEntity): + url: str + id: int + queue: QueueShort + name: str + body: str + field_changes: list[IssueFieldChange] = Field(default_factory=list) + + +class MacroCreate(AbstractEntity): + name: str + body: str | None = None + field_changes: list[IssueFieldChange] | None = None + + +class MacroEdit(MacroCreate): + pass diff --git a/ya_tracker_client/domain/repositories/__init__.py b/ya_tracker_client/domain/repositories/__init__.py index a557b61..eba9ad6 100644 --- a/ya_tracker_client/domain/repositories/__init__.py +++ b/ya_tracker_client/domain/repositories/__init__.py @@ -8,7 +8,7 @@ from ya_tracker_client.domain.repositories.issue import IssueRepository from ya_tracker_client.domain.repositories.issue_field import IssueFieldRepository from ya_tracker_client.domain.repositories.issue_relationship import IssueRelationshipRepository -from ya_tracker_client.domain.repositories.macros import MacrosRepository +from ya_tracker_client.domain.repositories.macro import MacroRepository from ya_tracker_client.domain.repositories.project import ProjectRepository from ya_tracker_client.domain.repositories.queue import QueueRepository from ya_tracker_client.domain.repositories.user import UserRepository @@ -26,7 +26,7 @@ "IssueFieldRepository", "IssueRelationshipRepository", "IssueRepository", - "MacrosRepository", + "MacroRepository", "ProjectRepository", "QueueRepository", "UserRepository", diff --git a/ya_tracker_client/domain/repositories/macro.py b/ya_tracker_client/domain/repositories/macro.py new file mode 100644 index 0000000..9d84204 --- /dev/null +++ b/ya_tracker_client/domain/repositories/macro.py @@ -0,0 +1,77 @@ +from ya_tracker_client.domain.entities.issue_field import IssueFieldChange +from ya_tracker_client.domain.entities.macro import Macro, MacroCreate, MacroEdit +from ya_tracker_client.domain.repositories.base import EntityRepository + + +class MacroRepository(EntityRepository): + async def get_macros(self, queue_id: str) -> list[Macro]: + """ + YC docs: https://cloud.yandex.com/en/docs/tracker/get-macroses + """ + raw_response = await self._client.request( + method="GET", + uri=f"/queues/{queue_id}/macros", + ) + return self._decode(raw_response, Macro, plural=True) + + async def get_macro(self, queue_id: str, macro_id: str) -> Macro: + """ + YC docs: https://cloud.yandex.com/en/docs/tracker/get-macros + """ + raw_response = await self._client.request( + method="GET", + uri=f"/queues/{queue_id}/macros/{macro_id}", + ) + return self._decode(raw_response, Macro) + + async def create_macro( + self, + queue_id: str, + name: str, + body: str | None = None, + field_changes: list[IssueFieldChange] | None = None, + ) -> Macro: + """ + YC docs: https://cloud.yandex.com/en/docs/tracker/post-macros + """ + raw_response = await self._client.request( + method="POST", + uri=f"/queues/{queue_id}/macros", + payload=MacroCreate( + name=name, + body=body, + field_changes=field_changes, + ).model_dump(exclude_none=True, by_alias=True), + ) + return self._decode(raw_response, Macro) + + async def edit_macro( + self, + queue_id: str, + macro_id: str, + name: str, + body: str | None = None, + field_changes: list[IssueFieldChange] | None = None, + ) -> Macro: + """ + YC docs: https://cloud.yandex.com/en/docs/tracker/patch-macros + """ + raw_response = await self._client.request( + method="PATCH", + uri=f"/queues/{queue_id}/macros/{macro_id}", + payload=MacroEdit( + name=name, + body=body, + field_changes=field_changes, + ).model_dump(exclude_none=True, by_alias=True), + ) + return self._decode(raw_response, Macro) + + async def delete_macro(self, queue_id: str, macro_id: str) -> None: + """ + YC docs: https://cloud.yandex.com/en/docs/tracker/delete-macros + """ + await self._client.request( + method="DELETE", + uri=f"/queues/{queue_id}/macros/{macro_id}", + ) diff --git a/ya_tracker_client/domain/repositories/macros.py b/ya_tracker_client/domain/repositories/macros.py deleted file mode 100644 index 15a88fb..0000000 --- a/ya_tracker_client/domain/repositories/macros.py +++ /dev/null @@ -1,5 +0,0 @@ -from ya_tracker_client.domain.repositories.base import EntityRepository - - -class MacrosRepository(EntityRepository): - ... diff --git a/ya_tracker_client/service/api.py b/ya_tracker_client/service/api.py index dc689b3..d7cfd03 100644 --- a/ya_tracker_client/service/api.py +++ b/ya_tracker_client/service/api.py @@ -9,7 +9,7 @@ IssueFieldRepository, IssueRelationshipRepository, IssueRepository, - MacrosRepository, + MacroRepository, ProjectRepository, QueueRepository, UserRepository, @@ -29,7 +29,7 @@ class YaTrackerClient( IssueFieldRepository, IssueRelationshipRepository, IssueRepository, - MacrosRepository, + MacroRepository, ProjectRepository, QueueRepository, UserRepository,