Skip to content

Commit

Permalink
feat: add external links support
Browse files Browse the repository at this point in the history
  • Loading branch information
danfimov committed Sep 30, 2023
1 parent d66a81d commit 25f1382
Show file tree
Hide file tree
Showing 5 changed files with 92 additions and 1 deletion.
2 changes: 2 additions & 0 deletions examples/get_test_entities.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ async def main() -> None:
await client.get_attachments_list('TRACKER-1')
await client.get_issue_comments('TRACKER-1')
await client.get_projects_list(expand='queues')
await client.get_external_applications()
await client.get_external_links("TRACKER-1")

await client.stop()

Expand Down
8 changes: 8 additions & 0 deletions ya_tracker_client/domain/entities/external_application.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from ya_tracker_client.domain.entities.base import AbstractEntity


class ExternalApplication(AbstractEntity):
url: str
id: str
type: str
name: str
20 changes: 20 additions & 0 deletions ya_tracker_client/domain/entities/external_link.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from datetime import datetime

from pydantic import Field

from ya_tracker_client.domain.entities.base import AbstractEntity
from ya_tracker_client.domain.entities.external_object import ExternalObject
from ya_tracker_client.domain.entities.issue_relationship import IssueRelationshipType
from ya_tracker_client.domain.entities.user import UserShort


class ExternalLink(AbstractEntity):
url: str
id: int
type: IssueRelationshipType
direction: str = Field(examples=["outward", "inward"])
object: ExternalObject
created_by: UserShort
updated_by: UserShort
created_at: datetime
updated_at: datetime
9 changes: 9 additions & 0 deletions ya_tracker_client/domain/entities/external_object.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from ya_tracker_client.domain.entities.base import AbstractEntity
from ya_tracker_client.domain.entities.external_application import ExternalApplication


class ExternalObject(AbstractEntity):
url: str
id: str
key: str
application: ExternalApplication
54 changes: 53 additions & 1 deletion ya_tracker_client/domain/repositories/external_link.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,57 @@
from ya_tracker_client.domain.entities.external_application import ExternalApplication
from ya_tracker_client.domain.entities.external_link import ExternalLink
from ya_tracker_client.domain.repositories.base import EntityRepository


class ExternalLinkRepository(EntityRepository):
...
async def get_external_applications(self) -> list[ExternalApplication]:
"""
YC docs: https://cloud.yandex.com/en/docs/tracker/concepts/issues/get-applications
"""
raw_response = await self._client.request(
method="GET",
uri="/applications",
)
return self._decode(raw_response, ExternalApplication, plural=True)

async def get_external_links(self, issue_id: str) -> list[ExternalLink]:
"""
YC docs: https://cloud.yandex.com/en/docs/tracker/concepts/issues/get-external-links
"""
raw_response = await self._client.request(
method="GET",
uri=f"/issues/{issue_id}/remotelinks",
)
return self._decode(raw_response, ExternalLink, plural=True)

async def add_external_link(
self,
issue_id: str,
key: str,
origin: str,
relationship: str = "RELATES",
backlink: bool | None = None,
) -> ExternalLink:
"""
YC docs: https://cloud.yandex.com/en/docs/tracker/concepts/issues/add-external-link
"""
raw_response = await self._client.request(
method="POST",
uri=f"/issues/{issue_id}/remotelinks",
payload={
"key": key,
"origin": origin,
"relationship": relationship,
},
params={"backlink": backlink} if backlink is not None else None,
)
return self._decode(raw_response, ExternalLink)

async def delete_external_link(self, issue_id: str, external_link_id: str | int) -> None:
"""
YC docs: https://cloud.yandex.com/en/docs/tracker/concepts/issues/delete-external-link
"""
await self._client.request(
method="DELETE",
uri=f"/issues/{issue_id}/remotelinks/{external_link_id}",
)

0 comments on commit 25f1382

Please sign in to comment.