diff --git a/github/Team.py b/github/Team.py
index 18d9f7ee..38b605ed 100644
--- a/github/Team.py
+++ b/github/Team.py
@@ -38,164 +38,142 @@
# along with PyGithub. If not, see . #
# #
################################################################################
+from __future__ import annotations
-from typing import Any, Dict
+from typing import TYPE_CHECKING, Any
from deprecated import deprecated
-import github.GithubObject
import github.NamedUser
import github.Organization
import github.PaginatedList
import github.Repository
import github.TeamDiscussion
+from github import Consts
from github.GithubException import UnknownObjectException
+from github.GithubObject import Attribute, CompletableGithubObject, NotSet, Opt
-from . import Consts
+if TYPE_CHECKING:
+ from github.Membership import Membership
+ from github.NamedUser import NamedUser
+ from github.Organization import Organization
+ from github.PaginatedList import PaginatedList
+ from github.Permissions import Permissions
+ from github.Repository import Repository
+ from github.TeamDiscussion import TeamDiscussion
-class Team(github.GithubObject.CompletableGithubObject):
+class Team(CompletableGithubObject):
"""
This class represents Teams. The reference can be found here https://docs.github.com/en/rest/reference/teams
"""
+ def _initAttributes(self) -> None:
+ self._id: Attribute[int] = NotSet
+ self._members_count: Attribute[int] = NotSet
+ self._members_url: Attribute[str] = NotSet
+ self._name: Attribute[str] = NotSet
+ self._description: Attribute[str] = NotSet
+ self._permission: Attribute[str] = NotSet
+ self._repos_count: Attribute[int] = NotSet
+ self._repositories_url: Attribute[str] = NotSet
+ self._slug: Attribute[str] = NotSet
+ self._url: Attribute[str] = NotSet
+ self._organization: Attribute[github.Organization.Organization] = NotSet
+ self._privacy: Attribute[str] = NotSet
+ self._parent: Attribute[github.Team.Team] = NotSet
+ self._html_url: Attribute[str] = NotSet
+
def __repr__(self) -> str:
return self.get__repr__({"id": self._id.value, "name": self._name.value})
@property
- def id(self):
- """
- :type: integer
- """
+ def id(self) -> int:
self._completeIfNotSet(self._id)
return self._id.value
@property
- def members_count(self):
- """
- :type: integer
- """
+ def members_count(self) -> int:
self._completeIfNotSet(self._members_count)
return self._members_count.value
@property
- def members_url(self):
- """
- :type: string
- """
+ def members_url(self) -> str:
self._completeIfNotSet(self._members_url)
return self._members_url.value
@property
- def name(self):
- """
- :type: string
- """
+ def name(self) -> str:
self._completeIfNotSet(self._name)
return self._name.value
@property
- def description(self):
- """
- :type: string
- """
+ def description(self) -> str:
self._completeIfNotSet(self._description)
return self._description.value
@property
- def permission(self):
- """
- :type: string
- """
+ def permission(self) -> str:
self._completeIfNotSet(self._permission)
return self._permission.value
@property
- def repos_count(self):
- """
- :type: integer
- """
+ def repos_count(self) -> int:
self._completeIfNotSet(self._repos_count)
return self._repos_count.value
@property
- def repositories_url(self):
- """
- :type: string
- """
+ def repositories_url(self) -> str:
self._completeIfNotSet(self._repositories_url)
return self._repositories_url.value
@property
- def slug(self):
- """
- :type: string
- """
+ def slug(self) -> str:
self._completeIfNotSet(self._slug)
return self._slug.value
@property
- def url(self):
- """
- :type: string
- """
+ def url(self) -> str:
self._completeIfNotSet(self._url)
return self._url.value
@property
- def organization(self):
- """
- :type: :class:`github.Organization.Organization`
- """
+ def organization(self) -> Organization:
self._completeIfNotSet(self._organization)
return self._organization.value
@property
- def privacy(self):
- """
- :type: string
- """
+ def privacy(self) -> str:
self._completeIfNotSet(self._privacy)
return self._privacy.value
@property
- def parent(self):
- """
- :type: string
- """
+ def parent(self) -> Team:
self._completeIfNotSet(self._parent)
return self._parent.value
@property
- def html_url(self):
- """
- :type: string
- """
+ def html_url(self) -> str:
self._completeIfNotSet(self._html_url)
return self._html_url.value
- def add_to_members(self, member):
+ def add_to_members(self, member: NamedUser) -> None:
"""
This API call is deprecated. Use `add_membership` instead.
https://docs.github.com/en/rest/reference/teams#add-or-update-team-membership-for-a-user-legacy
:calls: `PUT /teams/{id}/members/{user} `_
- :param member: :class:`github.NamedUser.NamedUser`
- :rtype: None
"""
assert isinstance(member, github.NamedUser.NamedUser), member
headers, data = self._requester.requestJsonAndCheck("PUT", f"{self.url}/members/{member._identity}")
- def add_membership(self, member, role=github.GithubObject.NotSet):
+ def add_membership(self, member: NamedUser, role: Opt[str] = NotSet) -> None:
"""
:calls: `PUT /teams/{id}/memberships/{user} `_
- :param member: :class:`github.Nameduser.NamedUser`
- :param role: string
- :rtype: None
"""
assert isinstance(member, github.NamedUser.NamedUser), member
- assert role is github.GithubObject.NotSet or isinstance(role, str), role
- if role is not github.GithubObject.NotSet:
+ assert role is NotSet or isinstance(role, str), role
+ if role is not NotSet:
assert role in ["member", "maintainer"]
put_parameters = {
"role": role,
@@ -208,11 +186,9 @@ class Team(github.GithubObject.CompletableGithubObject):
"PUT", f"{self.url}/memberships/{member._identity}", input=put_parameters
)
- def get_team_membership(self, member):
+ def get_team_membership(self, member: str | NamedUser) -> Membership:
"""
:calls: `GET /orgs/{org}/memberships/team/{team_id}/{username} `_
- :param member: string or :class:`github.NamedUser.NamedUser`
- :rtype: :class:`github.Membership.Membership`
"""
assert isinstance(member, str) or isinstance(member, github.NamedUser.NamedUser), member
if isinstance(member, github.NamedUser.NamedUser):
@@ -220,24 +196,20 @@ class Team(github.GithubObject.CompletableGithubObject):
headers, data = self._requester.requestJsonAndCheck("GET", f"{self.url}/memberships/{member}")
return github.Membership.Membership(self._requester, headers, data, completed=True)
- def add_to_repos(self, repo):
+ def add_to_repos(self, repo: Repository) -> None:
"""
:calls: `PUT /teams/{id}/repos/{org}/{repo} `_
- :param repo: :class:`github.Repository.Repository`
- :rtype: None
"""
assert isinstance(repo, github.Repository.Repository), repo
headers, data = self._requester.requestJsonAndCheck("PUT", f"{self.url}/repos/{repo._identity}")
- def get_repo_permission(self, repo):
+ def get_repo_permission(self, repo: Repository) -> Permissions | None:
"""
:calls: `GET /teams/{id}/repos/{org}/{repo} `_
- :param repo: string or :class:`github.Repository.Repository`
- :rtype: None or :class:`github.Permissions.Permissions`
"""
assert isinstance(repo, github.Repository.Repository) or isinstance(repo, str), repo
if isinstance(repo, github.Repository.Repository):
- repo = repo._identity
+ repo = repo._identity # type: ignore
try:
headers, data = self._requester.requestJsonAndCheck(
"GET",
@@ -253,7 +225,7 @@ class Team(github.GithubObject.CompletableGithubObject):
Team.set_repo_permission() is deprecated, use Team.update_team_repository() instead.
"""
)
- def set_repo_permission(self, repo, permission):
+ def set_repo_permission(self, repo: Repository, permission: str) -> None:
"""
:calls: `PUT /teams/{id}/repos/{org}/{repo} `_
:param repo: :class:`github.Repository.Repository`
@@ -269,18 +241,16 @@ class Team(github.GithubObject.CompletableGithubObject):
"PUT", f"{self.url}/repos/{repo._identity}", input=put_parameters
)
- def update_team_repository(self, repo, permission):
+ def update_team_repository(self, repo: Repository, permission: str) -> bool:
"""
:calls: `PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo} `_
- :param repo: string or :class:`github.Repository.Repository`
- :param permission: string
- :rtype: bool
"""
assert isinstance(repo, github.Repository.Repository) or isinstance(repo, str), repo
assert isinstance(permission, str), permission
- repo_url_param = repo
if isinstance(repo, github.Repository.Repository):
repo_url_param = repo._identity
+ else:
+ repo_url_param = repo
put_parameters = {
"permission": permission,
}
@@ -291,48 +261,36 @@ class Team(github.GithubObject.CompletableGithubObject):
)
return status == 204
- def delete(self):
+ def delete(self) -> None:
"""
:calls: `DELETE /teams/{id} `_
- :rtype: None
"""
headers, data = self._requester.requestJsonAndCheck("DELETE", self.url)
def edit(
self,
- name,
- description=github.GithubObject.NotSet,
- permission=github.GithubObject.NotSet,
- privacy=github.GithubObject.NotSet,
- ):
+ name: str,
+ description: Opt[str] = NotSet,
+ permission: Opt[str] = NotSet,
+ privacy: Opt[str] = NotSet,
+ ) -> None:
"""
:calls: `PATCH /teams/{id} `_
- :param name: string
- :param description: string
- :param permission: string
- :param privacy: string
- :rtype: None
"""
assert isinstance(name, str), name
- assert description is github.GithubObject.NotSet or isinstance(description, str), description
- assert permission is github.GithubObject.NotSet or isinstance(permission, str), permission
- assert privacy is github.GithubObject.NotSet or isinstance(privacy, str), privacy
- post_parameters = {
- "name": name,
- }
- if description is not github.GithubObject.NotSet:
- post_parameters["description"] = description
- if permission is not github.GithubObject.NotSet:
- post_parameters["permission"] = permission
- if privacy is not github.GithubObject.NotSet:
- post_parameters["privacy"] = privacy
+ assert description is NotSet or isinstance(description, str), description
+ assert permission is NotSet or isinstance(permission, str), permission
+ assert privacy is NotSet or isinstance(privacy, str), privacy
+ post_parameters = NotSet.remove_unset_items(
+ {"name": name, "description": description, "permission": permission, "privacy": privacy}
+ )
+
headers, data = self._requester.requestJsonAndCheck("PATCH", self.url, input=post_parameters)
self._useAttributes(data)
- def get_teams(self):
+ def get_teams(self) -> PaginatedList[Team]:
"""
:calls: `GET /teams/{id}/teams `_
- :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.Team.Team`
"""
return github.PaginatedList.PaginatedList(
github.Team.Team,
@@ -341,10 +299,9 @@ class Team(github.GithubObject.CompletableGithubObject):
None,
)
- def get_discussions(self):
+ def get_discussions(self) -> PaginatedList[TeamDiscussion]:
"""
:calls: `GET /teams/{id}/discussions `_
- :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.TeamDiscussion.TeamDiscussion`
"""
return github.PaginatedList.PaginatedList(
github.TeamDiscussion.TeamDiscussion,
@@ -354,15 +311,13 @@ class Team(github.GithubObject.CompletableGithubObject):
headers={"Accept": Consts.mediaTypeTeamDiscussionsPreview},
)
- def get_members(self, role=github.GithubObject.NotSet):
+ def get_members(self, role: Opt[str] = NotSet) -> PaginatedList[NamedUser]:
"""
:calls: `GET /teams/{id}/members `_
- :param role: string
- :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.NamedUser.NamedUser`
"""
- assert role is github.GithubObject.NotSet or isinstance(role, str), role
- url_parameters = dict()
- if role is not github.GithubObject.NotSet:
+ assert role is NotSet or isinstance(role, str), role
+ url_parameters: dict[str, Any] = {}
+ if role is not NotSet:
assert role in ["member", "maintainer", "all"]
url_parameters["role"] = role
return github.PaginatedList.PaginatedList(
@@ -372,19 +327,17 @@ class Team(github.GithubObject.CompletableGithubObject):
url_parameters,
)
- def get_repos(self):
+ def get_repos(self) -> PaginatedList[Repository]:
"""
:calls: `GET /teams/{id}/repos `_
- :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.Repository.Repository`
"""
return github.PaginatedList.PaginatedList(
github.Repository.Repository, self._requester, f"{self.url}/repos", None
)
- def invitations(self):
+ def invitations(self) -> PaginatedList[NamedUser]:
"""
:calls: `GET /teams/{id}/invitations `_
- :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.NamedUser.NamedUser`
"""
return github.PaginatedList.PaginatedList(
github.NamedUser.NamedUser,
@@ -394,77 +347,51 @@ class Team(github.GithubObject.CompletableGithubObject):
headers={"Accept": Consts.mediaTypeOrganizationInvitationPreview},
)
- def has_in_members(self, member):
+ def has_in_members(self, member: NamedUser) -> bool:
"""
:calls: `GET /teams/{id}/members/{user} `_
- :param member: :class:`github.NamedUser.NamedUser`
- :rtype: bool
"""
assert isinstance(member, github.NamedUser.NamedUser), member
status, headers, data = self._requester.requestJson("GET", f"{self.url}/members/{member._identity}")
return status == 204
- def has_in_repos(self, repo):
+ def has_in_repos(self, repo: Repository) -> bool:
"""
:calls: `GET /teams/{id}/repos/{owner}/{repo} `_
- :param repo: :class:`github.Repository.Repository`
- :rtype: bool
"""
assert isinstance(repo, github.Repository.Repository), repo
status, headers, data = self._requester.requestJson("GET", f"{self.url}/repos/{repo._identity}")
return status == 204
- def remove_membership(self, member):
+ def remove_membership(self, member: NamedUser) -> None:
"""
:calls: `DELETE /teams/{team_id}/memberships/{username} `_
- :param member:
- :return:
"""
assert isinstance(member, github.NamedUser.NamedUser), member
headers, data = self._requester.requestJsonAndCheck("DELETE", f"{self.url}/memberships/{member._identity}")
- def remove_from_members(self, member):
+ def remove_from_members(self, member: NamedUser) -> None:
"""
This API call is deprecated. Use `remove_membership` instead:
https://docs.github.com/en/rest/reference/teams#add-or-update-team-membership-for-a-user-legacy
:calls: `DELETE /teams/{id}/members/{user} `_
- :param member: :class:`github.NamedUser.NamedUser`
- :rtype: None
"""
assert isinstance(member, github.NamedUser.NamedUser), member
headers, data = self._requester.requestJsonAndCheck("DELETE", f"{self.url}/members/{member._identity}")
- def remove_from_repos(self, repo):
+ def remove_from_repos(self, repo: Repository) -> None:
"""
:calls: `DELETE /teams/{id}/repos/{owner}/{repo} `_
- :param repo: :class:`github.Repository.Repository`
- :rtype: None
"""
assert isinstance(repo, github.Repository.Repository), repo
headers, data = self._requester.requestJsonAndCheck("DELETE", f"{self.url}/repos/{repo._identity}")
@property
- def _identity(self):
+ def _identity(self) -> int:
return self.id
- def _initAttributes(self) -> None:
- self._id = github.GithubObject.NotSet
- self._members_count = github.GithubObject.NotSet
- self._members_url = github.GithubObject.NotSet
- self._name = github.GithubObject.NotSet
- self._description = github.GithubObject.NotSet
- self._permission = github.GithubObject.NotSet
- self._repos_count = github.GithubObject.NotSet
- self._repositories_url = github.GithubObject.NotSet
- self._slug = github.GithubObject.NotSet
- self._url = github.GithubObject.NotSet
- self._organization = github.GithubObject.NotSet
- self._privacy = github.GithubObject.NotSet
- self._parent = github.GithubObject.NotSet
- self._html_url = github.GithubObject.NotSet
-
- def _useAttributes(self, attributes: Dict[str, Any]) -> None:
+ def _useAttributes(self, attributes: dict[str, Any]) -> None:
if "id" in attributes: # pragma no branch
self._id = self._makeIntAttribute(attributes["id"])
if "members_count" in attributes: # pragma no branch
diff --git a/github/Team.pyi b/github/Team.pyi
deleted file mode 100644
index fb3771ef..00000000
--- a/github/Team.pyi
+++ /dev/null
@@ -1,70 +0,0 @@
-from typing import Any, Dict, Union
-
-from github.GithubObject import CompletableGithubObject, _NotSetType
-from github.Membership import Membership
-from github.NamedUser import NamedUser
-from github.Organization import Organization
-from github.PaginatedList import PaginatedList
-from github.Permissions import Permissions
-from github.Repository import Repository
-from github.TeamDiscussion import TeamDiscussion
-
-class Team(CompletableGithubObject):
- def __repr__(self) -> str: ...
- @property
- def _identity(self) -> int: ...
- def _initAttributes(self) -> None: ...
- def _useAttributes(self, attributes: Dict[str, Any]) -> None: ...
- def add_membership(self, member: NamedUser, role: Union[str, _NotSetType] = ...) -> None: ...
- def add_to_members(self, member: NamedUser) -> None: ...
- def get_team_membership(self, member: Union[str, NamedUser]) -> Membership: ...
- def add_to_repos(self, repo: Repository) -> None: ...
- def get_repo_permission(self, repo: Repository) -> Union[Permissions, _NotSetType]: ...
- def update_team_repository(self, repo: Repository, permission: str) -> bool: ...
- def delete(self) -> None: ...
- @property
- def description(self) -> str: ...
- def edit(
- self,
- name: str,
- description: Union[str, _NotSetType] = ...,
- permission: Union[str, _NotSetType] = ...,
- privacy: Union[str, _NotSetType] = ...,
- ) -> None: ...
- def get_teams(self) -> PaginatedList[Team]: ...
- def get_discussions(self) -> PaginatedList[TeamDiscussion]: ...
- def get_members(self, role: Union[str, _NotSetType] = ...) -> PaginatedList[NamedUser]: ...
- def get_repos(self) -> PaginatedList[Repository]: ...
- def has_in_members(self, member: NamedUser) -> bool: ...
- def has_in_repos(self, repo: Repository) -> bool: ...
- @property
- def id(self) -> int: ...
- def invitations(self) -> PaginatedList[NamedUser]: ...
- @property
- def members_count(self) -> int: ...
- @property
- def members_url(self) -> str: ...
- @property
- def name(self) -> str: ...
- @property
- def organization(self) -> Organization: ...
- @property
- def permission(self) -> str: ...
- @property
- def privacy(self) -> str: ...
- def remove_from_members(self, member: NamedUser) -> None: ...
- def remove_from_repos(self, repo: Repository) -> None: ...
- def remove_membership(self, member: NamedUser) -> None: ...
- @property
- def repos_count(self) -> int: ...
- @property
- def repositories_url(self) -> str: ...
- def set_repo_permission(self, repo: Repository, permission: str) -> None: ...
- @property
- def slug(self) -> str: ...
- @property
- def url(self) -> str: ...
- @property
- def parent(self) -> Union[Team, _NotSetType]: ...
- @property
- def html_url(self) -> str: ...