1. 背景
快年底了,領導需要統計每個項目代碼開發人員不定時間內的代碼貢獻數, 並自動導出Excel表。能快速知道哪些開發人員一天一天的在摸魚
2. 分析需求, 上代碼開擼
# coding=utf-8 # author: zhangzihong import time import gitlab import collections import pandas as pd gl = gitlab.Gitlab('http://code.xxx.com/gitlab',private_token='ve9ifEu9ZtAeqWik',timeout=50, api_version='4') start_time = '2020-10-16T00:00:00Z' end_time = '2020-11-16T23:00:00Z' def get_gitlab(): """ gitlab API """ list2 = [] projects=gl.projects.list(owned=True, all=True) num=0 for project in projects: num+=1 print("查看了%d個項目" %num) for branch in project.branches.list(): commits=project.commits.list(all=True,query_parameters={'since': start_time,'until':end_time, 'ref_name': branch.name}) for commit in commits: com = project.commits.get(commit.id) pro={} try: #print(project.path_with_namespace,com.author_name,com.stats["total"]) pro["projectName"]=project.path_with_namespace pro["authorName"]=com.author_name pro["branch"]=branch.name pro["additions"]=com.stats["additions"] pro["deletions"]=com.stats["deletions"] pro["commitNum"]=com.stats["total"] list2.append(pro) except : print("有錯誤, 請檢查") return list2 def data(): """ 數據去重 key split """ ret = {} for ele in get_gitlab(): key = ele["projectName"]+ele["authorName"]+ele["branch"] if key not in ret: ret[key] = ele ret[key]["commitTotal"] = 1 else: ret[key]["additions"] += ele["additions"] ret[key]["deletions"] += ele["deletions"] ret[key]["commitNum"] += ele["commitNum"] ret[key]["commitTotal"] +=1 list1 = [] for key,v in ret.items(): v["項目名"] = v.pop("projectName") v["開發者"] = v.pop("authorName") v["分支"] = v.pop("branch") v["添加代碼行數"] = v.pop("additions") v["刪除代碼行數"] = v.pop("deletions") v["提交總行數"] = v.pop("commitNum") v["提交次數"] = v["commitTotal"] list1.append(v) print(list1) return list1 def csv(csvName): """ csv """ df = pd.DataFrame(data(),columns=["項目名","開發者","分支","添加代碼行數","刪除代碼行數","提交總行數","提交次數"]) df.to_csv(csvName,index=False,encoding="utf_8_sig") if __name__ == "__main__": csv("./gitlab.csv")
結果: