使用python-gitlab获取本地gitlab仓库project信息的方法
阅读原文时间:2023年07月05日阅读:1

代码中有注释,直接看代码

#coding:utf8
#!/usr/bin/env python
#@author: 9527

import gitlab
import openpyxl
import datetime

class GitlabInfoget():
def __init__(self,queue02,Url,token):

     #这里传入的是GUI界面的Frame中的队列,可以直接去掉
self.queue02 = queue02

    #配置GitLab服务器访问地址和访问令牌  
    self.Url = Url  
    self.token =token

    #调用登录接口  
    self.gl = gitlab.Gitlab(Url, private\_token=token)

def get\_project\_info(self):  
    #向GUI界面Frame的队列中压入字符串  
    self.queue02.put("正在查询project信息")

    #获取项目信息list  
    projects = self.gl.projects.list(all=True)  
    return projects

def get\_each\_project\_info(self,projects):

    #向GUI界面Frame的队列中压入字符串  
    self.queue02.put("正在处理数据表头")

    #定义行列起始值  
    Info\_row = 1  #行  
    Info\_column = 1  #列

    # 创建一个工作簿  
    self.workbook = openpyxl.Workbook()  
    # 获取当前活动工作表  
    self.sheet = self.workbook.active

    #设定表头  
    write\_in\_excel\_data0 =  \["project名称","project层级",  
                             "projectID","project简介","web地址","成员信息"\]  
    #写入表头信息  
    for data in write\_in\_excel\_data0:  
        # 在第Info\_row行第Info\_column列写入数据  
        self.sheet.cell(row=Info\_row,column=Info\_column, value=data)  
        #换列  
        Info\_column+=1

    #遍历获取到的项目信息  
    for project in projects:  

       #同上
self.queue02.put("\n正在写入第" + str(Info_row) +"个project数据\n")

        #换行  
        Info\_row +=1  
        #重置列起始值  
        Info\_column = 1  #列

        #获取该项目所有成员信息(包括继承)  
        member1 = project.members\_all.list(get\_all=True)

        #project名称  
        projectname = project.name  
        #project名称  
        projectlevel = project.path\_with\_namespace  
        #project的ID  
        projectid = project.id  
        #project简介  
        projectdescription = project.description  
        #web访问地址  
        web\_addr = project.web\_url

        #数据归纳  
        write\_in\_excel\_data1 =  \[str(projectname) , str(projectlevel) ,  
                                 str(projectid) ,str(projectdescription),str(web\_addr)\]

        for data in write\_in\_excel\_data1:  
            # 在第Info\_row行第Info\_column列写入数据  
            self.sheet.cell(row=Info\_row,column=Info\_column, value=data)  
            #换列  
            Info\_column+=1

        #遍历该项目成员信息  
        for member in member1:  
            #获取该成员信息的name,及姓名  
            member1name = member.name  
            #获取该成员信息的username,及姓名  
            member1user = member.username  
            #获取该成员信息的access\_level,即接入权限  
            member1access\_level = member.access\_level

            #数据归纳  
            write\_in\_excel\_data2 =  \[str(member1name),"-",str(member1user),  
                                                "-",str(member1access\_level)\]  
            write\_in\_excel\_data2 = "\\n".join(write\_in\_excel\_data2)

            # 在第Info\_row行第Info\_column列写入数据  
            self.sheet.cell(row=Info\_row, column=Info\_column, value=write\_in\_excel\_data2)  
            #换列  
            Info\_column+=1

    today = datetime.date.today()

    filename\_excel = "gitlab\_projectINFO\_"+str(today) + ".xlsx"

    self.workbook.save(filename\_excel)  

     #同上
self.queue02.put("\n数据已整理存入Excel文件完毕,文件名:" + str(filename_excel)+"\n")

    # 释放连接  
    self.gl.session.close()

    return True

'''
A = GitlabInfoget("192.168.1.1","test-Token")
B = A.get_project_info()
C = A.get_each_project_info(B)
print(C)
'''