41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
"""
|
|
Everything specific to the Gitlab API (via Python GitLab https://python-gitlab.readthedocs.io/en/stable/)
|
|
"""
|
|
|
|
from dateutil import parser
|
|
from gitlab import Gitlab
|
|
|
|
def normalize_repo_name(repo):
|
|
"""
|
|
Bring repo to style xxx/yyy
|
|
"""
|
|
prefix = 'https://gitlab.com/'
|
|
if repo.startswith(prefix):
|
|
repo = repo[len(prefix):]
|
|
suffix = '.git'
|
|
if repo.endswith(suffix):
|
|
repo = repo[:-len(suffix)]
|
|
return repo
|
|
|
|
|
|
def retrieve_repo_info(repos, token=None):
|
|
"""
|
|
|
|
:param repos:
|
|
:param token:
|
|
:return:
|
|
"""
|
|
single_repo = isinstance(repos, str)
|
|
if single_repo:
|
|
repos = (repos,)
|
|
result = []
|
|
gl = Gitlab('https://gitlab.com')
|
|
for repo in repos:
|
|
repo = normalize_repo_name(repo)
|
|
# get project
|
|
p = gl.projects.get(repo)
|
|
e = {'description': p.description, 'created': parser.parse(p.created_at), 'contributors': p.repository_contributors(), 'forks': p.forks_count, 'name': p.name, 'last modified': parser.parse(p.last_activity_at), 'stars': p.star_count, 'languages': p.languages()}
|
|
result.append(e)
|
|
if single_repo:
|
|
result = result[0]
|
|
return result |