From 3d63e222dc8f41709cd3562ae264a3f478abf0f4 Mon Sep 17 00:00:00 2001 From: Trim21 Date: Thu, 31 Aug 2023 17:06:32 +0800 Subject: [PATCH] Merge `Milestone` type stub back to source (#2682) --- github/Milestone.py | 155 +++++++++++++++---------------------------- github/Milestone.pyi | 49 -------------- 2 files changed, 55 insertions(+), 149 deletions(-) delete mode 100644 github/Milestone.pyi 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: ...