【Python-GUI开发】四 python+gitlab自动获取代码文件

目录

1、需要先安装python-gitlab库

2、登录gitlab

3、gitlab文件提取以及正则表达式查找关键字符串


在使用PYQT5进行代码生成时,有时候需要抓取gitlab最新代码中的版本号,以保持最新版本自动显示。

实际尝试有几种解决方案:

(1)模拟bash登录访问

(2)request库方式访问:get请求、post请求

(3)python-gitlab库方式访问

经过分析对比,使用python-gitlab库进行gitlab操作的方式最为合适

1、需要先安装python-gitlab库

pip install python-gitlab

gitlab库的基本使用可以参考python-gitlab官方文档

使用指导:https://python-gitlab.readthedocs.io/en/stable/api-usage.html

接口说明:https://python-gitlab.readthedocs.io/en/stable/api/gitlab.html#module-gitlab

 

2、登录gitlab

            # 服务器地址
            url = 'http://xxxxx.com.cn'
            # 在gitlab--settings中获取Access Token
            accessToken = 'xxxxxxxxxx'
            gl = gitlab.Gitlab(url, accessToken)

url为所使用的gitlab服务器地址

AccessToken为访问该服务器所需要的访问令牌,这个token是在gitlab的用户设置中进行配置的,如下所示:

【Python-GUI开发】四 python+gitlab自动获取代码文件_第1张图片

这里可以设置这个accessToken的权限、有效日期。 

【Python-GUI开发】四 python+gitlab自动获取代码文件_第2张图片 

 特别注意的是:这个AccessToken只会在生成的首次才会显示,需要妥善另行保存,否则后面就无法查看到这个Token值了

 

为了做容错处理,特地加上了try exception结构,保证在Token失效情况下不会出现系统崩溃的问题。

 

3、gitlab文件提取以及正则表达式查找关键字符串

示例代码如下所示 

# gilab包,re包
import gitlab,re

class getGitlabFileVersion:
    # 获得项目:projectID的格式随意,反正我就写了个数字进去
    def getProject(self):
        try:
            # 服务器地址
            url = 'http://xxxxx.com.cn'
            # 在gitlab--settings中获取Access Token
            accessToken = 'xxxxxxxxxx'
            gl = gitlab.Gitlab(url, accessToken)

            print(gl)
            projects = gl.projects.list()
            for project in projects:
                print(project)
            tmp = gl.projects.get(334)
            f = tmp.files.get(file_path='xx/version.c', ref='master')
            content = f.decode()
            content = content.decode()
            print(content)
            ret = re.search("\d"+"."+"\d"+"."+"\d",content)
            print(ret.group())
        except:
            print("err")
            #raise error(e.error_message, e.response_code, e.response_body)

# 测试
obj= getGitlabFileVersion()
obj.getProject()

 

你可能感兴趣的:(python)