ToB企服应用市场:ToB评测及商务社交产业平台
标题:
python检测gitlab中某个标签在一个月内添加和移除了多少次
[打印本页]
作者:
万有斥力
时间:
4 天前
标题:
python检测gitlab中某个标签在一个月内添加和移除了多少次
可以通过 Python 脚本和 GitLab API 检测一个标签在一个月内被添加和移除的次数。以下是实现的步骤和示例代码:
步骤
获取 GitLab API 访问令牌
:在 GitLab 中天生一个 Personal Access Token。
设置时间范围
:确定一个月的时间范围。
调用 GitLab API 获取相干事件
:
使用 /projects/{id}/events 端点获取标签相干的事件(如创建、删除)。
统计事件次数
。
示例代码
import requests
from datetime import datetime, timedelta
# 配置 GitLab 信息
GITLAB_URL = "https://gitlab.example.com" # 替换为你的 GitLab 地址
PROJECT_ID = 12345 # 替换为你的项目 ID
PRIVATE_TOKEN = "your_personal_access_token" # 替换为你的访问令牌
LABEL_NAME = "example-label" # 替换为你要检测的标签
def get_events(project_id, start_date, end_date):
headers = {"PRIVATE-TOKEN": PRIVATE_TOKEN}
url = f"{GITLAB_URL}/api/v4/projects/{project_id}/events"
params = {
"after": start_date,
"before": end_date,
"action": "update", # 标签操作可能是更新事件
}
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
return response.json()
def count_label_events(events, label_name):
added_count = 0
removed_count = 0
for event in events:
if "label" in event and event["label"]["name"] == label_name:
if event["action_name"] == "added":
added_count += 1
elif event["action_name"] == "removed":
removed_count += 1
return added_count, removed_count
if __name__ == "__main__":
# 计算一个月的时间范围
end_date = datetime.now()
start_date = end_date - timedelta(days=30)
start_date_str = start_date.strftime("%Y-%m-%d")
end_date_str = end_date.strftime("%Y-%m-%d")
print(f"Fetching events from {start_date_str} to {end_date_str}...")
events = get_events(PROJECT_ID, start_date_str, end_date_str)
added, removed = count_label_events(events, LABEL_NAME)
print(f"Label '{LABEL_NAME}' was added {added} times and removed {removed} times in the past month.")
复制代码
代码说明
GitLab API
使用 /projects/{id}/events 获取项目内的活动。
需要设置 PRIVATE-TOKEN 作为访问令牌。
时间范围
使用 datetime 模块动态盘算最近一个月的时间范围。
事件过滤
根据事件的 action_name 字段统计标签的添加和移除次数。
输出
终极打印出标签添加和移除的次数。
运行方式
替换 GITLAB_URL、PROJECT_ID 和 PRIVATE_TOKEN 为现实值。
运行脚本。
依赖
确保已安装 requests 库:
pip install requests
复制代码
假如需要实现一个MR的添加和移除标签最多各算一次,以下是实现方法的步骤和示例代码:
1. 预备工作
确保你有访问 GitLab API 的权限,并天生一个访问令牌(Private Token)。
确定 GitLab 项目的 ID 和需要检测的标签名称。
2. 安装必要的库
需要安装 requests 库,用于调用 GitLab API:
pip install requests
复制代码
3. 示例代码
以下代码实现了检测标签在一个月内添加和移除的次数:
import requests
from datetime import datetime, timedelta
# 配置 GitLab API 信息
GITLAB_URL = "https://gitlab.example.com" # 替换为你的 GitLab 地址
PRIVATE_TOKEN = "your_private_token" # 替换为你的访问令牌
PROJECT_ID = "12345" # 替换为你的项目 ID
LABEL_NAME = "your_label_name" # 替换为你要检测的标签名称
def get_merge_requests():
"""
获取过去一个月的所有 Merge Requests
"""
one_month_ago = datetime.now() - timedelta(days=30)
url = f"{GITLAB_URL}/api/v4/projects/{PROJECT_ID}/merge_requests"
headers = {"PRIVATE-TOKEN": PRIVATE_TOKEN}
params = {
"created_after": one_month_ago.isoformat(),
"state": "all",
}
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
return response.json()
def get_label_changes(mr_iid):
"""
获取某个 Merge Request 的标签变更历史
"""
url = f"{GITLAB_URL}/api/v4/projects/{PROJECT_ID}/merge_requests/{mr_iid}/resource_label_events"
headers = {"PRIVATE-TOKEN": PRIVATE_TOKEN}
response = requests.get(url, headers=headers)
response.raise_for_status()
return response.json()
def count_label_changes(label_name):
"""
统计标签添加和移除次数
"""
mrs = get_merge_requests()
add_count = 0
remove_count = 0
for mr in mrs:
label_events = get_label_changes(mr["iid"])
added = False
removed = False
for event in label_events:
if event["label"]["name"] == label_name:
if event["action"] == "add" and not added:
add_count += 1
added = True
elif event["action"] == "remove" and not removed:
remove_count += 1
removed = True
return add_count, remove_count
if __name__ == "__main__":
added, removed = count_label_changes(LABEL_NAME)
print(f"标签 '{LABEL_NAME}' 在过去一个月内被添加了 {added} 次,移除了 {removed} 次。")
复制代码
4. 代码说明
获取 Merge Request 列表:
使用 GET /projects/:id/merge_requests API 获取已往一个月内的所有 MR。
获取标签变更汗青:
使用 GET /projects/:id/merge_requests/:mr_iid/resource_label_events API 获取某个 MR 的标签变更汗青。
统计添加和移除次数:
遍历标签变更事件,根据 action 判定是否为 add 或 remove 操纵,同时确保对同一个 MR 的标签添加或移除只统计一次。
5. 注意事项
假如项目中 MR 较多,可能需要分页处理,可通过 pagination 参数实现。
确保你的 GitLab API URL 和访问权限正确。
你可以运行这段脚本来统计标签的添加和移除情况。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4