diff --git a/main.py b/main.py index ce7f3dacec748bdd78de51ee25fd1150b8e7a752..531a010b6b65a43c793a16223899f9d08fb42c4c 100644 --- a/main.py +++ b/main.py @@ -1,104 +1,144 @@ -from re import I +# from re import I import gitlab import requests import json from json2html import * +import argparse +import os +from dotenv import load_dotenv -# pobieranie listy projektów +parser = argparse.ArgumentParser(description="Get Project, License and Owners from gitlab") -# testowe -# headers = {'PRIVATE-TOKEN': 'glpat-hQFB1vBzz9rQzq8wuhcG'} -# gl = gitlab.Gitlab(url='https://k8s-gitlab.software.geant.org', private_token='glpat-hQFB1vBzz9rQzq8wuhcG') -# gl_user = 'https://k8s-gitlab.software.geant.org/api/v4/users' -# gl_proj = 'https://k8s-gitlab.software.geant.org/api/v4/projects' -# gl_license = 'repository/files/LICENSE?ref=' -# gl_branch = 'repository/branches' -# projects = gl.projects.list() -# (all=True) +parser.add_argument("--production", action='store_true', help="Use for Production") +parser.add_argument("--developer", action='store_true', help="Use for Developer") +args = parser.parse_args() +load_dotenv() -# produkcyjne -headers = {'PRIVATE-TOKEN': 'glpat-P6orz6-t2f3n1BoVDrnr'} -gl = gitlab.Gitlab(url='https://gitlab.geant.org', private_token='glpat-P6orz6-t2f3n1BoVDrnr') -gl_user = 'https://gitlab.geant.org/api/v4/users' -gl_proj = 'https://gitlab.geant.org/api/v4/projects' -gl_license = 'repository/files/LICENSE?ref=' -gl_branch = 'repository/branches' -projects = gl.projects.list(all=True) - -j_project = {} -j_project['projects'] = {} -for project in projects: - print('Project ID: ', project.attributes['id']) - print('Project Name: ', project.attributes['name_with_namespace']) - # print('branch', project.attributes['default_branch']) - print('status', project.attributes['visibility']) - print('aktywny', project.attributes['last_activity_at']) - print('grupa', project.attributes['namespace']['name']) - x = project.attributes['id'] - check_b = gl_proj + '/' + str(x) - check_b_response = requests.get(check_b, headers=headers) - check_b_data = check_b_response.text - check_b_answer = json.loads(check_b_data) - if "default_branch" in check_b_answer: - branch = project.attributes['default_branch'] - # x = project.attributes['id'] - c_link = gl_proj + '/' + str(x) + '/' + gl_license + branch - c_response = requests.get(c_link, headers=headers) - c_data = c_response.text - c_answer = json.loads(c_data) - if "message" in c_answer: - print("License file: ", c_answer['message']) - lic = c_answer['message'] - if "file_name" in c_answer: - print("License file: ", c_answer['file_name']) - lic = c_answer['file_name'] - print('branch', project.attributes['default_branch']) +try: + if args.production: + token = os.getenv('PRODUCTION_TOKEN') + print('produkcyjny') + headers = {'PRIVATE-TOKEN': token} + gl = gitlab.Gitlab(url='https://gitlab.geant.org', private_token=token) + gl_user = 'https://gitlab.geant.org/api/v4/users' + gl_proj = 'https://gitlab.geant.org/api/v4/projects' + gl_license = 'repository/files/LICENSE?ref=' + gl_branch = 'repository/branches' + projects = gl.projects.list(all=True) + elif args.developer: + token = os.getenv('DEVELOPER_TOKEN') + print('testowy') + headers = {'PRIVATE-TOKEN': token} + gl = gitlab.Gitlab(url='https://k8s-gitlab.software.geant.org', private_token=token) + gl_user = 'https://k8s-gitlab.software.geant.org/api/v4/users' + gl_proj = 'https://k8s-gitlab.software.geant.org/api/v4/projects' + gl_license = 'repository/files/LICENSE?ref=' + gl_branch = 'repository/branches' + projects = gl.projects.list(all=True) else: - lic = 'No created repository' - sep = 'T' - full_act = project.attributes['last_activity_at'] - last_act = full_act.split(sep, 1)[0] - # print("ostatnia aktywnosc: ", last_act) - tmp = { - 'project_id': project.attributes['id'], - 'project_name': project.attributes['name_with_namespace'], - 'project_group': project.attributes['namespace']['name'], - 'project_status': project.attributes['visibility'], - 'project_license': lic, - 'project_last_activity': last_act - } - j_project['projects'][x] = {} - j_project['projects'][x] = tmp - j_project['projects'][x]['owners'] = {} - link = (project.attributes['_links']['members'] + '/all') - response = requests.get(link, headers=headers) - data = response.text - owners = json.loads(data) - for owner in owners: - if owner['access_level'] == 50: - print('User ID: ', owner['id']) - print('User Name: ', owner['name']) - print('Access level: ', owner['access_level']) - y = owner['id'] - j_project['projects'][x]['owners'][y] = {} - user = gl.users.get(y) - emails = user.emails.list() - if user.email == user.commit_email: - user_tmp = { - 'owner_id': owner['id'], - 'owner_name': owner['name'], - 'owner_mail': user.email, - } - else: - user_tmp = { - 'owner_id': owner['id'], - 'owner_name': owner['name'], - 'owner_mail': user.email, - 'owner_mail_commit': user.commit_email - } - j_project['projects'][x]['owners'][y] = user_tmp - print(8*"-") + print("No variable, exit") + exit() + + # pobieranie listy projektów + + # # testowe + # headers = {'PRIVATE-TOKEN': 'glpat-hQFB1vBzz9rQzq8wuhcG'} + # gl = gitlab.Gitlab(url='https://k8s-gitlab.software.geant.org', private_token='glpat-hQFB1vBzz9rQzq8wuhcG') + # gl_user = 'https://k8s-gitlab.software.geant.org/api/v4/users' + # gl_proj = 'https://k8s-gitlab.software.geant.org/api/v4/projects' + # gl_license = 'repository/files/LICENSE?ref=' + # gl_branch = 'repository/branches' + # projects = gl.projects.list() + # # (all=True) + + + # produkcyjne + # headers = {'PRIVATE-TOKEN': 'glpat-P6orz6-t2f3n1BoVDrnr'} + # gl = gitlab.Gitlab(url='https://gitlab.geant.org', private_token='glpat-P6orz6-t2f3n1BoVDrnr') + # gl_user = 'https://gitlab.geant.org/api/v4/users' + # gl_proj = 'https://gitlab.geant.org/api/v4/projects' + # gl_license = 'repository/files/LICENSE?ref=' + # gl_branch = 'repository/branches' + # projects = gl.projects.list(all=True) + + j_project = {} + j_project['projects'] = {} + for project in projects: + # print('Project ID: ', project.attributes['id']) + # print('Project Name: ', project.attributes['name_with_namespace']) + # # print('branch', project.attributes['default_branch']) + # print('status', project.attributes['visibility']) + # print('aktywny', project.attributes['last_activity_at']) + # print('grupa', project.attributes['namespace']['name']) + x = project.attributes['id'] + check_b = gl_proj + '/' + str(x) + check_b_response = requests.get(check_b, headers=headers) + check_b_data = check_b_response.text + check_b_answer = json.loads(check_b_data) + if "default_branch" in check_b_answer: + branch = project.attributes['default_branch'] + # x = project.attributes['id'] + c_link = gl_proj + '/' + str(x) + '/' + gl_license + branch + c_response = requests.get(c_link, headers=headers) + c_data = c_response.text + c_answer = json.loads(c_data) + if "message" in c_answer: + # print("License file: ", c_answer['message']) + lic = c_answer['message'] + if "file_name" in c_answer: + # print("License file: ", c_answer['file_name']) + lic = c_answer['file_name'] + # print('branch', project.attributes['default_branch']) + else: + lic = 'No created repository' + sep = 'T' + full_act = project.attributes['last_activity_at'] + last_act = full_act.split(sep, 1)[0] + # print("ostatnia aktywnosc: ", last_act) + tmp = { + 'project_id': project.attributes['id'], + 'project_name': project.attributes['name_with_namespace'], + 'project_group': project.attributes['namespace']['name'], + 'project_status': project.attributes['visibility'], + 'project_license': lic, + 'project_last_activity': last_act + } + j_project['projects'][x] = {} + j_project['projects'][x] = tmp + j_project['projects'][x]['owners'] = {} + link = (project.attributes['_links']['members'] + '/all') + response = requests.get(link, headers=headers) + data = response.text + owners = json.loads(data) + for owner in owners: + if owner['access_level'] == 50: + # print('User ID: ', owner['id']) + # print('User Name: ', owner['name']) + # print('Access level: ', owner['access_level']) + y = owner['id'] + j_project['projects'][x]['owners'][y] = {} + user = gl.users.get(y) + emails = user.emails.list() + if user.email == user.commit_email: + user_tmp = { + 'owner_id': owner['id'], + 'owner_name': owner['name'], + 'owner_mail': user.email, + } + else: + user_tmp = { + 'owner_id': owner['id'], + 'owner_name': owner['name'], + 'owner_mail': user.email, + 'owner_mail_commit': user.commit_email + } + j_project['projects'][x]['owners'][y] = user_tmp + # print(8*"-") +except: + print('Cant connect to GitLab server, check credential') + exit() + new_jproject = json.dumps(j_project, indent=4, ensure_ascii=False) # print(new_jproject) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..2277aec4c490117eeb958eb1841708fd24b001d0 Binary files /dev/null and b/requirements.txt differ