Skip to content

Commit

Permalink
feat: add bulk operations support
Browse files Browse the repository at this point in the history
  • Loading branch information
danfimov committed Sep 30, 2023
1 parent 46203b6 commit f6936d2
Show file tree
Hide file tree
Showing 3 changed files with 103 additions and 1 deletion.
1 change: 1 addition & 0 deletions examples/get_test_entities.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ async def main() -> None:
await client.get_user(uid=me.uid)
await client.get_users()
await client.get_issue('TRACKER-1')
await client.get_issue_transitions('TRACKER-1')
await client.get_queue('TRACKER')
await client.get_issue_relationships('TRACKER-1')
await client.get_checklist_items("TRACKER-1")
Expand Down
34 changes: 34 additions & 0 deletions ya_tracker_client/domain/entities/bulk_operation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from datetime import datetime

from ya_tracker_client.domain.entities.base import AbstractEntity
from ya_tracker_client.domain.entities.user import UserShort


class BulkOperation(AbstractEntity):
id: str
url: str
created_by: UserShort
created_at: datetime
status: str
status_text: str
execution_chunk_percent: int
execution_issue_percent: int


class BulkMove(AbstractEntity):
queue: str
issues: list[str]
values: dict | None = None
move_all_fields: bool | None = None
initial_status: bool | None = None


class BulkChange(AbstractEntity):
issues: list[str]
values: dict


class BulkChangeStatus(AbstractEntity):
issues: list[str]
transition: str
values: dict | None = None
69 changes: 68 additions & 1 deletion ya_tracker_client/domain/repositories/bulk_operation.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,72 @@
from ya_tracker_client.domain.entities.bulk_operation import BulkChange, BulkChangeStatus, BulkMove, BulkOperation
from ya_tracker_client.domain.repositories.base import EntityRepository


class BulkOperationRepository(EntityRepository):
...
async def bulk_move_issues(
self,
queue_id: str,
issue_ids: list[str],
values: dict | None = None,
move_all_fields: bool | None = None,
initial_status: bool | None = None,
notify: bool = False,
) -> BulkOperation:
"""
YC docs: https://cloud.yandex.com/en/docs/tracker/concepts/bulkchange/bulk-move-issues
"""
raw_response = await self._client.request(
method="POST",
uri="/bulkchange/_move",
payload=BulkMove(
queue=queue_id,
issues=issue_ids,
values=values,
move_all_fields=move_all_fields,
initial_status=initial_status,
).model_dump(exclude_none=True, by_alias=True),
params={"notify": "true" if notify else "false"},
)
return self._decode(raw_response, BulkOperation)

async def bulk_change_issues(
self,
issue_ids: list[str],
values: dict,
notify: bool = False,
) -> BulkOperation:
"""
YC docs: https://cloud.yandex.com/en/docs/tracker/concepts/bulkchange/bulk-update-issues
"""
raw_response = await self._client.request(
method="POST",
uri="/bulkchange/_update",
payload=BulkChange(
issues=issue_ids,
values=values,
).model_dump(exclude_none=True, by_alias=True),
params={"notify": "true" if notify else "false"},
)
return self._decode(raw_response, BulkOperation)

async def bulk_change_issues_statuses(
self,
issue_ids: list[str],
transition_id: str,
values: dict | None = None,
notify: bool = False,
) -> BulkOperation:
"""
YC docs: https://cloud.yandex.com/en/docs/tracker/concepts/bulkchange/bulk-transition
"""
raw_response = await self._client.request(
method="POST",
uri="/bulkchange/_transition",
payload=BulkChangeStatus(
transition=transition_id,
issues=issue_ids,
values=values,
).model_dump(exclude_none=True, by_alias=True),
params={"notify": "true" if notify else "false"},
)
return self._decode(raw_response, BulkOperation)

0 comments on commit f6936d2

Please sign in to comment.