diff --git a/github/Milestone.py b/github/Milestone.py
index 1a0882eb..dc9e4be5 100644
--- a/github/Milestone.py
+++ b/github/Milestone.py
@@ -27,193 +27,148 @@
# along with PyGithub. If not, see . #
# #
################################################################################
+from __future__ import annotations
-from datetime import date
-from typing import Any, Dict
+from datetime import date, datetime
+from typing import Any
import github.GithubObject
import github.Label
import github.NamedUser
import github.PaginatedList
+from github.GithubObject import Attribute, CompletableGithubObject, NotSet, Opt, is_defined
+from github.PaginatedList import PaginatedList
-class Milestone(github.GithubObject.CompletableGithubObject):
+class Milestone(CompletableGithubObject):
"""
This class represents Milestones. The reference can be found here https://docs.github.com/en/rest/reference/issues#milestones
"""
- def __repr__(self):
+ def _initAttributes(self) -> None:
+ self._closed_issues: Attribute[int] = NotSet
+ self._created_at: Attribute[datetime] = NotSet
+ self._creator: Attribute[github.NamedUser.NamedUser] = NotSet
+ self._description: Attribute[str] = NotSet
+ self._due_on: Attribute[datetime] = NotSet
+ self._id: Attribute[int] = NotSet
+ self._labels_url: Attribute[str] = NotSet
+ self._number: Attribute[int] = NotSet
+ self._open_issues: Attribute[int] = NotSet
+ self._state: Attribute[str] = NotSet
+ self._title: Attribute[str] = NotSet
+ self._updated_at: Attribute[datetime] = NotSet
+ self._url: Attribute[str] = NotSet
+
+ def __repr__(self) -> str:
return self.get__repr__({"number": self._number.value, "title": self._title.value})
@property
- def closed_issues(self):
- """
- :type: integer
- """
+ def closed_issues(self) -> int:
self._completeIfNotSet(self._closed_issues)
return self._closed_issues.value
@property
- def created_at(self):
- """
- :type: datetime
- """
+ def created_at(self) -> datetime:
self._completeIfNotSet(self._created_at)
return self._created_at.value
@property
- def creator(self):
- """
- :type: :class:`github.NamedUser.NamedUser`
- """
+ def creator(self) -> github.NamedUser.NamedUser:
self._completeIfNotSet(self._creator)
return self._creator.value
@property
- def description(self):
- """
- :type: string
- """
+ def description(self) -> str:
self._completeIfNotSet(self._description)
return self._description.value
@property
- def due_on(self):
- """
- :type: datetime
- """
+ def due_on(self) -> datetime | None:
self._completeIfNotSet(self._due_on)
return self._due_on.value
@property
- def id(self):
- """
- :type: integer
- """
+ def id(self) -> int:
self._completeIfNotSet(self._id)
return self._id.value
@property
- def labels_url(self):
- """
- :type: string
- """
+ def labels_url(self) -> str:
self._completeIfNotSet(self._labels_url)
return self._labels_url.value
@property
- def number(self):
- """
- :type: integer
- """
+ def number(self) -> int:
self._completeIfNotSet(self._number)
return self._number.value
@property
- def open_issues(self):
- """
- :type: integer
- """
+ def open_issues(self) -> int:
self._completeIfNotSet(self._open_issues)
return self._open_issues.value
@property
- def state(self):
- """
- :type: string
- """
+ def state(self) -> str:
self._completeIfNotSet(self._state)
return self._state.value
@property
- def title(self):
- """
- :type: string
- """
+ def title(self) -> str:
self._completeIfNotSet(self._title)
return self._title.value
@property
- def updated_at(self):
- """
- :type: datetime
- """
+ def updated_at(self) -> datetime:
self._completeIfNotSet(self._updated_at)
return self._updated_at.value
@property
- def url(self):
- """
- :type: string
- """
+ def url(self) -> str:
self._completeIfNotSet(self._url)
return self._url.value
- def delete(self):
+ def delete(self) -> None:
"""
:calls: `DELETE /repos/{owner}/{repo}/milestones/{number} `_
- :rtype: None
"""
headers, data = self._requester.requestJsonAndCheck("DELETE", self.url)
def edit(
- self,
- title,
- state=github.GithubObject.NotSet,
- description=github.GithubObject.NotSet,
- due_on=github.GithubObject.NotSet,
- ):
+ self, title: str, state: Opt[str] = NotSet, description: Opt[str] = NotSet, due_on: Opt[date] = NotSet
+ ) -> None:
"""
:calls: `PATCH /repos/{owner}/{repo}/milestones/{number} `_
- :param title: string
- :param state: string
- :param description: string
- :param due_on: date
- :rtype: None
"""
assert isinstance(title, str), title
- assert state is github.GithubObject.NotSet or isinstance(state, str), state
- assert description is github.GithubObject.NotSet or isinstance(description, str), description
- assert due_on is github.GithubObject.NotSet or isinstance(due_on, date), due_on
- post_parameters = {
- "title": title,
- }
- if state is not github.GithubObject.NotSet:
- post_parameters["state"] = state
- if description is not github.GithubObject.NotSet:
- post_parameters["description"] = description
- if due_on is not github.GithubObject.NotSet:
+ assert state is NotSet or isinstance(state, str), state
+ assert description is NotSet or isinstance(description, str), description
+ assert due_on is NotSet or isinstance(due_on, date), due_on
+ post_parameters = NotSet.remove_unset_items(
+ {
+ "title": title,
+ "state": state,
+ "description": description,
+ }
+ )
+
+ if is_defined(due_on):
post_parameters["due_on"] = due_on.strftime("%Y-%m-%d")
+
headers, data = self._requester.requestJsonAndCheck("PATCH", self.url, input=post_parameters)
self._useAttributes(data)
- def get_labels(self):
+ def get_labels(self) -> PaginatedList[github.Label.Label]:
"""
:calls: `GET /repos/{owner}/{repo}/milestones/{number}/labels `_
- :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.Label.Label`
"""
- return github.PaginatedList.PaginatedList(github.Label.Label, self._requester, f"{self.url}/labels", None)
+ return PaginatedList(github.Label.Label, self._requester, f"{self.url}/labels", None)
@property
- def _identity(self):
+ def _identity(self) -> int:
return self.number
- def _initAttributes(self) -> None:
- self._closed_issues = github.GithubObject.NotSet
- self._created_at = github.GithubObject.NotSet
- self._creator = github.GithubObject.NotSet
- self._description = github.GithubObject.NotSet
- self._due_on = github.GithubObject.NotSet
- self._id = github.GithubObject.NotSet
- self._labels_url = github.GithubObject.NotSet
- self._number = github.GithubObject.NotSet
- self._open_issues = github.GithubObject.NotSet
- self._state = github.GithubObject.NotSet
- self._title = github.GithubObject.NotSet
- self._updated_at = github.GithubObject.NotSet
- self._url = github.GithubObject.NotSet
-
- def _useAttributes(self, attributes: Dict[str, Any]) -> None:
+ def _useAttributes(self, attributes: dict[str, Any]) -> None:
if "closed_issues" in attributes: # pragma no branch
self._closed_issues = self._makeIntAttribute(attributes["closed_issues"])
if "created_at" in attributes: # pragma no branch
diff --git a/github/Milestone.pyi b/github/Milestone.pyi
deleted file mode 100644
index b0f41c8a..00000000
--- a/github/Milestone.pyi
+++ /dev/null
@@ -1,49 +0,0 @@
-from datetime import date, datetime
-from typing import Any, Dict, Optional, Union
-
-from github.GithubObject import CompletableGithubObject, _NotSetType
-from github.Label import Label
-from github.NamedUser import NamedUser
-from github.PaginatedList import PaginatedList
-
-class Milestone(CompletableGithubObject):
- def __repr__(self) -> str: ...
- @property
- def _identity(self) -> int: ...
- def _initAttributes(self) -> None: ...
- def _useAttributes(self, attributes: Dict[str, Any]) -> None: ...
- @property
- def closed_issues(self) -> int: ...
- @property
- def created_at(self) -> datetime: ...
- @property
- def creator(self) -> NamedUser: ...
- def delete(self) -> None: ...
- @property
- def description(self) -> str: ...
- @property
- def due_on(self) -> Optional[datetime]: ...
- def edit(
- self,
- title: str,
- state: Union[_NotSetType, str] = ...,
- description: Union[_NotSetType, str] = ...,
- due_on: Union[date, _NotSetType] = ...,
- ) -> None: ...
- def get_labels(self) -> PaginatedList[Label]: ...
- @property
- def id(self) -> int: ...
- @property
- def labels_url(self) -> str: ...
- @property
- def number(self) -> int: ...
- @property
- def open_issues(self) -> int: ...
- @property
- def state(self) -> str: ...
- @property
- def title(self) -> str: ...
- @property
- def updated_at(self) -> datetime: ...
- @property
- def url(self) -> str: ...