Skip to content

Commit

Permalink
Refactor models and add activity retrieval to client
Browse files Browse the repository at this point in the history
Refactored data models to use optional types and default values for better robustness and flexibility. Enhanced the client by adding a method to retrieve activity data for issues, supporting filtration by categories and fields.
  • Loading branch information
meanmail committed Jan 15, 2025
1 parent e10c723 commit 066b0bb
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 7 deletions.
14 changes: 14 additions & 0 deletions youtrack/youtrack/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import structlog
from httpx import Response

from youtrack.youtrack.models.activity import YouTrackActivityItem
from youtrack.youtrack.models.comment import YouTrackComment
from youtrack.youtrack.models.issue import YouTrackIssue
from youtrack.youtrack.models.user import YouTrackUser
Expand Down Expand Up @@ -58,6 +59,19 @@ def get_user(self, user_id: str) -> YouTrackUser:
response.raise_for_status()
return YouTrackUser(**response.json())

def get_activities(
self, issue_id: str, categories: Iterable[str], fields: Iterable[str]
) -> tuple[YouTrackActivityItem, ...]:
"""Get activities for an issue."""
url = f"issues/{issue_id}/activities"
params = {
"categories": ",".join(categories),
"fields": ",".join(fields),
}
response = self.get(url, params=params)
response.raise_for_status()
return tuple(YouTrackActivityItem(**activity) for activity in response.json())

def get(self, endpoint: str, params: dict[str, str] | None = None) -> Response:
"""Send request to YouTrack API."""
response = httpx.get(f"{self._api_url}/{endpoint}", headers=self._headers, params=params)
Expand Down
4 changes: 2 additions & 2 deletions youtrack/youtrack/models/activity.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@


class YouTrackActivityItem(BaseModel):
timestamp: MillisecondsDatetime
fixed_state: int | None = None
id: str
timestamp: MillisecondsDatetime | None = None
11 changes: 6 additions & 5 deletions youtrack/youtrack/models/issue.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@ class YouTrackCustomField(BaseModel):


class YouTrackIssue(BaseModel):
id_readable: str = Field(alias="idReadable")
summary: str
created: MillisecondsDatetime
updated: MillisecondsDatetime
custom_fields: list[YouTrackCustomField] = Field(alias="customFields")
id = str
id_readable: str | None = Field(alias="idReadable", default=None)
summary: str | None = None
created: MillisecondsDatetime | None = None
updated: MillisecondsDatetime | None = None
custom_fields: list[YouTrackCustomField] = Field(alias="customFields", default_factory=list)

0 comments on commit 066b0bb

Please sign in to comment.