GitLabのProjectに所属しているメンバーの一覧を取得するスクリプト
なぜ
Emails on push
機能で送信したいメールアドレスの一覧を取得したかったからです。
送信先は各Projectの「Integration Settings」の「Recipients」で設定することができます。
職場ではProjectのメンバー全員にpush時のメールを送信するというルールになっているため、その一覧を取得できればコピペで設定できます。
スクリプト
get_member_list.py
import os import sys import json import requests def get_all_user_email_dict(): headers = { 'Private-Token': os.environ['ACCESS_TOKEN'], } params = ( ('page', '1'), ('per_page', '1000'), ) response = requests.get('http://XXXXX/api/v4/users', headers=headers, params=params) data = response.json() path_dict = dict() for row in data: username = json.dumps(row["username"], indent=4).replace("\"", "") path_dict[username] = json.dumps(row["email"], indent=4).replace("\"", "") return path_dict def get_username_list_by_project(project_id): headers = { 'Private-Token': os.environ['ACCESS_TOKEN'], } response = requests.get('http://XXXXX/api/v4/projects/{}/users'.format(project_id), headers=headers) data = response.json() path_list = list() for row in data: path_list.append(json.dumps(row["username"], indent=4).replace("\"", "")) return path_list args = sys.argv project_id = args[1] email_dict = get_all_user_email_dict() username_list = get_username_list_by_project(project_id) for username in username_list: if username in email_dict.keys() and username != "root": print(email_dict[username])
XXXXX
はGitLabのホスト名です。環境に応じたものを入力してください。
import requests
は下記コマンドでインストールできます。
pip3 install requests
解説
get_all_user_email_dict()
すべてのユーザーのusername
をキー、email
を値とするディクショナリを返す関数です。
get_username_list_by_project()
引数で指定したProjectに所属しているメンバーのusername
のリストを返す関数です。
get_username_list_by_project()
で取得したユーザーのusername
に一致するディクショナリのメンバからメールアドレスを取得する、といった流れです。
使い方
python3 get_member_list.py [Project_id]
Project_id
はメンバー一覧を取得したいProjectのIDに置き換えてください。
ProjectのIDはProjectのトップページに表示されています。
Project_id例
感想
メーリングリストを作ろう。