Source code for gerrit.groups.members
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Author: Jialiang Shi
import logging
import requests
from gerrit.utils.exceptions import (
GroupMemberNotFoundError,
GroupMemberAlreadyExistsError,
GerritAPIException,
)
logger = logging.getLogger(__name__)
[docs]
class GerritGroupMembers:
def __init__(self, group_id, gerrit):
self.id = group_id
self.gerrit = gerrit
self.endpoint = f"/groups/{self.id}/members"
[docs]
def list(self):
"""
Lists the direct members of a Gerrit internal group.
This endpoint is only allowed for Gerrit internal groups;
attempting to call on a non-internal group will return 405 Method Not Allowed.
:return:
"""
result = self.gerrit.get(self.endpoint)
accounts = []
for item in result:
account_id = item.get("_account_id")
accounts.append(self.gerrit.accounts.get(account_id))
return accounts
[docs]
def get(self, account):
"""
Retrieves a group member.
This endpoint is only allowed for Gerrit internal groups;
attempting to call on a non-internal group will return 405 Method Not Allowed.
:param account: account username or id
:return:
"""
try:
result = self.gerrit.get(self.endpoint + f"/{account}")
account_id = result.get("_account_id")
return self.gerrit.accounts.get(account_id)
except requests.exceptions.HTTPError as error:
if error.response.status_code == 404:
message = f"Group member {account} does not exist"
raise GroupMemberNotFoundError(message)
raise GerritAPIException from error
[docs]
def add(self, account):
"""
Adds a user as member to a Gerrit internal group.
This endpoint is only allowed for Gerrit internal groups;
attempting to call on a non-internal group will return 405 Method Not Allowed.
:param account: account username or id
:return:
"""
try:
self.get(account)
message = f"Group member {account} already exists"
logger.error(message)
raise GroupMemberAlreadyExistsError(message)
except GroupMemberNotFoundError:
self.gerrit.put(self.endpoint + f"/{account}")
return self.get(account)
[docs]
def remove(self, account):
"""
Removes a user from a Gerrit internal group.
This endpoint is only allowed for Gerrit internal groups;
attempting to call on a non-internal group will return 405 Method Not Allowed.
:param account: account username or id
:return:
"""
self.get(account)
self.gerrit.delete(self.endpoint + f"/{account}")