Source code for action0.github.models.milestone

"""The milestone model (:py:class:`Milestone`)."""

from __future__ import annotations

from dataclasses import dataclass
from datetime import datetime
from typing import Any

from .issue import IssueState
from .timestamps import timestamp


[docs] @dataclass class Milestone: """ An issue milestone. This is GitHub's ``milestone`` schema, reduced to the commonly used fields. A milestone shares the issue open/closed state vocabulary (:py:class:`~action0.github.models.issue.IssueState`). """ id: int """The numeric milestone id (globally unique).""" number: int """The milestone number (unique per repository) — what issue filters and updates refer to.""" title: str """The title, e.g. ``"v1.0"``.""" state: IssueState """Whether the milestone is open or closed.""" html_url: str """The web URL.""" description: str | None = None """The description, if set.""" open_issues: int = 0 """The number of open issues assigned to the milestone.""" closed_issues: int = 0 """The number of closed issues assigned to the milestone.""" due_on: datetime | None = None """The due date, if one was set.""" created_at: datetime | None = None """When the milestone was created."""
[docs] @classmethod def from_json(cls, data: Any) -> Milestone: """ Build a milestone from one decoded JSON object. :param data: the decoded JSON object :return: the milestone """ return cls( id=data["id"], number=data["number"], title=data["title"], state=IssueState(data["state"]), html_url=data["html_url"], description=data.get("description"), open_issues=data.get("open_issues", 0), closed_issues=data.get("closed_issues", 0), due_on=timestamp(data.get("due_on")), created_at=timestamp(data.get("created_at")), )