ToB企服应用市场:ToB评测及商务社交产业平台

标题: python检测gitlab中某个标签在一个月内添加和移除了多少次 [打印本页]

作者: 万有斥力    时间: 4 天前
标题: python检测gitlab中某个标签在一个月内添加和移除了多少次
可以通过 Python 脚本和 GitLab API 检测一个标签在一个月内被添加和移除的次数。以下是实现的步骤和示例代码:
步骤

示例代码

  1. import requests
  2. from datetime import datetime, timedelta
  3. # 配置 GitLab 信息
  4. GITLAB_URL = "https://gitlab.example.com"  # 替换为你的 GitLab 地址
  5. PROJECT_ID = 12345  # 替换为你的项目 ID
  6. PRIVATE_TOKEN = "your_personal_access_token"  # 替换为你的访问令牌
  7. LABEL_NAME = "example-label"  # 替换为你要检测的标签
  8. def get_events(project_id, start_date, end_date):
  9.     headers = {"PRIVATE-TOKEN": PRIVATE_TOKEN}
  10.     url = f"{GITLAB_URL}/api/v4/projects/{project_id}/events"
  11.     params = {
  12.         "after": start_date,
  13.         "before": end_date,
  14.         "action": "update",  # 标签操作可能是更新事件
  15.     }
  16.     response = requests.get(url, headers=headers, params=params)
  17.     response.raise_for_status()
  18.     return response.json()
  19. def count_label_events(events, label_name):
  20.     added_count = 0
  21.     removed_count = 0
  22.    
  23.     for event in events:
  24.         if "label" in event and event["label"]["name"] == label_name:
  25.             if event["action_name"] == "added":
  26.                 added_count += 1
  27.             elif event["action_name"] == "removed":
  28.                 removed_count += 1
  29.    
  30.     return added_count, removed_count
  31. if __name__ == "__main__":
  32.     # 计算一个月的时间范围
  33.     end_date = datetime.now()
  34.     start_date = end_date - timedelta(days=30)
  35.    
  36.     start_date_str = start_date.strftime("%Y-%m-%d")
  37.     end_date_str = end_date.strftime("%Y-%m-%d")
  38.    
  39.     print(f"Fetching events from {start_date_str} to {end_date_str}...")
  40.     events = get_events(PROJECT_ID, start_date_str, end_date_str)
  41.    
  42.     added, removed = count_label_events(events, LABEL_NAME)
  43.     print(f"Label '{LABEL_NAME}' was added {added} times and removed {removed} times in the past month.")
复制代码
代码说明

运行方式

依赖

确保已安装 requests 库:
  1. pip install requests
复制代码
假如需要实现一个MR的添加和移除标签最多各算一次,以下是实现方法的步骤和示例代码:
1. 预备工作


2. 安装必要的库

需要安装 requests 库,用于调用 GitLab API:
  1. pip install requests
复制代码
3. 示例代码

以下代码实现了检测标签在一个月内添加和移除的次数:
  1. import requests
  2. from datetime import datetime, timedelta
  3. # 配置 GitLab API 信息
  4. GITLAB_URL = "https://gitlab.example.com"  # 替换为你的 GitLab 地址
  5. PRIVATE_TOKEN = "your_private_token"       # 替换为你的访问令牌
  6. PROJECT_ID = "12345"                       # 替换为你的项目 ID
  7. LABEL_NAME = "your_label_name"             # 替换为你要检测的标签名称
  8. def get_merge_requests():
  9.     """
  10.     获取过去一个月的所有 Merge Requests
  11.     """
  12.     one_month_ago = datetime.now() - timedelta(days=30)
  13.     url = f"{GITLAB_URL}/api/v4/projects/{PROJECT_ID}/merge_requests"
  14.     headers = {"PRIVATE-TOKEN": PRIVATE_TOKEN}
  15.     params = {
  16.         "created_after": one_month_ago.isoformat(),
  17.         "state": "all",
  18.     }
  19.     response = requests.get(url, headers=headers, params=params)
  20.     response.raise_for_status()
  21.     return response.json()
  22. def get_label_changes(mr_iid):
  23.     """
  24.     获取某个 Merge Request 的标签变更历史
  25.     """
  26.     url = f"{GITLAB_URL}/api/v4/projects/{PROJECT_ID}/merge_requests/{mr_iid}/resource_label_events"
  27.     headers = {"PRIVATE-TOKEN": PRIVATE_TOKEN}
  28.     response = requests.get(url, headers=headers)
  29.     response.raise_for_status()
  30.     return response.json()
  31. def count_label_changes(label_name):
  32.     """
  33.     统计标签添加和移除次数
  34.     """
  35.     mrs = get_merge_requests()
  36.     add_count = 0
  37.     remove_count = 0
  38.     for mr in mrs:
  39.         label_events = get_label_changes(mr["iid"])
  40.         added = False
  41.         removed = False
  42.         for event in label_events:
  43.             if event["label"]["name"] == label_name:
  44.                 if event["action"] == "add" and not added:
  45.                     add_count += 1
  46.                     added = True
  47.                 elif event["action"] == "remove" and not removed:
  48.                     remove_count += 1
  49.                     removed = True
  50.     return add_count, remove_count
  51. if __name__ == "__main__":
  52.     added, removed = count_label_changes(LABEL_NAME)
  53.     print(f"标签 '{LABEL_NAME}' 在过去一个月内被添加了 {added} 次,移除了 {removed} 次。")
复制代码
4. 代码说明

5. 注意事项


你可以运行这段脚本来统计标签的添加和移除情况。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4