gitlab API使用

gitlab的API官网上很清楚,我封装了几个常用的

# -*- coding:utf-8 -*-

import requests
from common.utils import ServerError


class GitLabAPI(object):
    def __init__(self, headers=None, *args, **kwargs):
        self.headers = headers

    def get_user_id(self, username):
        user_id = None
        res = requests.get("https://gitlab地址/api/v3/users?username=%s"%username, headers=self.headers, verify=False)
        status_code = res.status_code
        if status_code != 200:
            raise ServerError(res.get('message'))
        content = res.json()
        if content:
            user_id = content[0].get('id')
        return user_id

    def get_user_projects(self):
        res = requests.get("https://gitlab地址/api/v3/projects", headers=self.headers, verify=False)
        status_code = res.status_code
        if status_code != 200:
            raise ServerError(res.get('message'))
        content = res.json()
        return content

    def get_user_project_id(self, name):
        """
        :param name: 项目名称 
        :return: 
        """
        project_id = None
        projects = self.get_user_projects()
        if projects:
            for item in projects:
                if item.get('name') == name:
                    project_id = item.get('id')
        return project_id

    def get_project_branchs(self, project_id):
        branchs = []
        res = requests.get("https://gitlab地址/api/v3/projects/%s/repository/branches"%project_id, headers=self.headers, verify=False)
        status_code = res.status_code
        if status_code != 200:
            raise ServerError(res.get('message'))
        content = res.json()
        if content:
            for item in content:
                branchs.append(item.get('name'))
        return branchs

    def get_project_tags(self, project_id):
        tags = []
        res = requests.get("https://gitlab地址/api/v3/projects/%s/repository/tags" % project_id,
                           headers=self.headers, verify=False)
        status_code = res.status_code
        if status_code != 200:
            raise ServerError(res.get('message'))
        content = res.json()
        if content:
            for item in content:
                tag_name = item.get('name')
                commit = item.get('commit')
                info = ''
                if commit:
                    commit_id = commit.get('id')
                    commit_info = commit.get('message')
                    info = "%s * %s"%(commit_id[:9], commit_info)
                tags.append("%s     %s"%(tag_name, info))
        return tags


if __name__ == "__main__":
    headers = {'PRIVATE-TOKEN': 'xxxxxx'} #你的gitlab账户的private token
    api = GitLabAPI(headers=headers)
    content = api.get_user_projects()

    user_id = api.get_user_id('liming')
    print "user_id:", user_id

    project_id = api.get_user_project_id('project1')
    print "project:", project_id

    branchs = api.get_project_branchs('345')
    print "project branchs:", branchs

    tags = api.get_project_tags('345')
    print "project tags:", tags



你可能感兴趣的:(git)