Skip to content
Snippets Groups Projects
Verified Commit 05057111 authored by steven.liatti's avatar steven.liatti
Browse files

Start refactoring with better args management -> use stdlib argparse

create_group.py and create_repo_for_students.py done
parent 04619554
Branches
No related tags found
No related merge requests found
#!/usr/bin/env python3
import os
import sys
import json
import requests
import subprocess
import argparse
if len(sys.argv) < 3:
print('Usage: ' + sys.argv[0] + ' <token> <group_name> <visibility>')
exit(1)
parser = argparse.ArgumentParser()
parser.add_argument(
"token", help="Create a token here: https://gitedu.hesge.ch/profile/personal_access_tokens")
parser.add_argument(
"group_name", help="The group name.")
parser.add_argument(
"--visibility", help="Group visibility. By default private.")
args = parser.parse_args()
token = sys.argv[1]
group_name = sys.argv[2]
visibility = 'private'
if len(sys.argv) > 3:
visibility = sys.argv[3]
if args.visibility:
visibility = args.visibility
else:
visibility = 'private'
base_url = 'https://gitedu.hesge.ch/api/v4/'
params = {'path': group_name, 'name': group_name, 'visibility': visibility}
headers = {'PRIVATE-TOKEN': token}
params = {'path': args.group_name,
'name': args.group_name, 'visibility': visibility}
headers = {'PRIVATE-TOKEN': args.token}
group = requests.post(base_url + '/groups', params=params, headers=headers).json()
group = requests.post(base_url + '/groups',
params=params, headers=headers).json()
if 'message' in group:
print('Error in creating group: %s' % group)
exit(1)
print("Group '" + group['name'] + "' with id '" + str(group['id']) + "' and visibility '" + group['visibility'] + "' available at '" + group['web_url'] + "' ;" + str(group['id']))
print("Group '" + group['name'] + "' with id '" + str(group['id']) + "' and visibility '" +
group['visibility'] + "' available at '" + group['web_url'] + "' ;" + str(group['id']))
#!/usr/bin/env python3
import sys
import requests
import string
import random
if len(sys.argv) < 3:
print("Usage: " + sys.argv[0] + " <token> <project_id>")
exit(1)
token = sys.argv[1]
project_id = sys.argv[2]
base_url = "https://githepia.hesge.ch/api/v4/projects"
params = {"simple": "true"}
headers = {"PRIVATE-TOKEN": token}
url = "%s/%s/forks" % (base_url, project_id)
repositories = requests.get(url, params=params, headers=headers).json()
alphabet = string.ascii_uppercase
for repo in repositories:
print("create issue for repository %s" % repo['web_url'])
issues_url = "%s/%s/issues" % (base_url, repo['id'])
random_letter = random.choice(alphabet)
alphabet.replace(random_letter, "")
params = {
"title": "You will be modeling the letter %s" % random_letter
}
new_issue = requests.post(issues_url, params=params, headers=headers)
......@@ -4,59 +4,76 @@ import sys
import json
import requests
import subprocess
import argparse
if len(sys.argv) < 6:
print('Usage: ' + sys.argv[0] + ' <token> <import_url> <group_id> <project_name> <student-mail1,student-mail2,...,student-mailN> <expires_at>')
exit(1)
token = sys.argv[1]
import_url = sys.argv[2]
group_id = sys.argv[3]
# split '@' in the case when project name = student's email
project_name = sys.argv[4].split('@')[0]
parser = argparse.ArgumentParser()
parser.add_argument(
"token", help="Create a token here: https://gitedu.hesge.ch/profile/personal_access_tokens")
parser.add_argument(
"group_id", help="The group id (int) where to store the created new project.")
parser.add_argument(
"emails", help="Emails list of students working in this project, separated by commas (email1,email2).")
parser.add_argument(
"-n", "--name", help="The project name. If blank, take the first student name (from email) as name.")
parser.add_argument("-i", "--import_url",
help="Import the publicly accessible project by URL given here (optional).")
parser.add_argument("-x", "--expires_at",
help="Expiration date to kick off students from this project, at 00:00:00. YYYY-MM-DD format (optional).")
args = parser.parse_args()
base_url = 'https://gitedu.hesge.ch/api/v4'
headers = {'PRIVATE-TOKEN': token}
headers = {'PRIVATE-TOKEN': args.token}
# split '@' in the case when project name = student's email
if args.name:
name = args.name
else:
name = args.emails.split('@')[0]
# Get students ids from their emails
users_emails = sys.argv[5].split(',')
users_emails = args.emails.split(',')
user_ids = []
for email in users_emails:
user_requested = requests.get(base_url + '/users', params={'search': email}, headers=headers).json()
user_requested = requests.get(
base_url + '/users', params={'search': email}, headers=headers).json()
if len(user_requested) == 0:
print('No user %s found, operation aborted' % email)
exit(1)
user_id = user_requested[0]['id']
user_ids.append(user_id)
# Create project from name, basis and group given
params = {'name': project_name, 'import_url': import_url, 'namespace_id': group_id, 'visibility': 'private'}
project = requests.post(base_url + '/projects', params=params, headers=headers).json()
# Create project from name, import_url (if given) and group_id
params = {'name': name, 'namespace_id': args.group_id, 'visibility': 'private'}
if args.import_url:
params['import_url'] = args.import_url
project = requests.post(base_url + '/projects',
params=params, headers=headers).json()
if 'message' in project:
print('Error in creating project: %s' % project)
exit(1)
print("Project '" + project['name'] + "' at '" + project['web_url'] + "' created")
print("Project '" + project['name'] + "' at '" +
project['web_url'] + "' created")
# Allow users with developer access level to push and merge on master
access_level = 30
params = {'name': 'master', 'push_access_level': str(access_level), 'merge_access_level': str(access_level)}
requests.post(base_url + '/projects/' + str(project['id']) + '/protected_branches', params=params, headers=headers).json()
params = {'name': 'master', 'push_access_level': str(
access_level), 'merge_access_level': str(access_level)}
requests.post(base_url + '/projects/' +
str(project['id']) + '/protected_branches', params=params, headers=headers).json()
# Add each student as project's developer (level 30)
for user_id in user_ids:
params = {'user_id': user_id, 'access_level': access_level}
if len(sys.argv) > 6:
expires_at = sys.argv[6]
params['expires_at'] = expires_at
new_user = requests.post(base_url + '/projects/' + str(project['id']) + '/members', params=params, headers=headers).json()
if args.expires_at:
params['expires_at'] = args.expires_at
new_user = requests.post(base_url + '/projects/' + str(
project['id']) + '/members', params=params, headers=headers).json()
if 'message' in new_user:
print('Error in adding user: %s' % new_user)
else:
out = ("Adding '" + new_user['name'] + "' (" + new_user['username'] + ") in '"
+ project['name'] + "' with access level: " + str(new_user['access_level']))
if len(sys.argv) > 6:
+ project['name'] + "' with access level: " + str(new_user['access_level']))
if args.expires_at:
out += ", expires at: " + new_user['expires_at']
print(out)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment