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
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python3 #!/usr/bin/env python3
import os
import sys import sys
import json import json
import requests import requests
import subprocess import subprocess
import argparse
if len(sys.argv) < 3: parser = argparse.ArgumentParser()
print('Usage: ' + sys.argv[0] + ' <token> <group_name> <visibility>') parser.add_argument(
exit(1) "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] if args.visibility:
group_name = sys.argv[2] visibility = args.visibility
else:
visibility = 'private' visibility = 'private'
if len(sys.argv) > 3:
visibility = sys.argv[3]
base_url = 'https://gitedu.hesge.ch/api/v4/' base_url = 'https://gitedu.hesge.ch/api/v4/'
params = {'path': group_name, 'name': group_name, 'visibility': visibility} params = {'path': args.group_name,
headers = {'PRIVATE-TOKEN': token} '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: if 'message' in group:
print('Error in creating group: %s' % group) print('Error in creating group: %s' % group)
exit(1) 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 ...@@ -4,59 +4,76 @@ import sys
import json import json
import requests import requests
import subprocess import subprocess
import argparse
if len(sys.argv) < 6: parser = argparse.ArgumentParser()
print('Usage: ' + sys.argv[0] + ' <token> <import_url> <group_id> <project_name> <student-mail1,student-mail2,...,student-mailN> <expires_at>') parser.add_argument(
exit(1) "token", help="Create a token here: https://gitedu.hesge.ch/profile/personal_access_tokens")
parser.add_argument(
token = sys.argv[1] "group_id", help="The group id (int) where to store the created new project.")
import_url = sys.argv[2] parser.add_argument(
group_id = sys.argv[3] "emails", help="Emails list of students working in this project, separated by commas (email1,email2).")
# split '@' in the case when project name = student's email parser.add_argument(
project_name = sys.argv[4].split('@')[0] "-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' 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 # Get students ids from their emails
users_emails = sys.argv[5].split(',') users_emails = args.emails.split(',')
user_ids = [] user_ids = []
for email in users_emails: 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: if len(user_requested) == 0:
print('No user %s found, operation aborted' % email) print('No user %s found, operation aborted' % email)
exit(1) exit(1)
user_id = user_requested[0]['id'] user_id = user_requested[0]['id']
user_ids.append(user_id) user_ids.append(user_id)
# Create project from name, basis and group given # Create project from name, import_url (if given) and group_id
params = {'name': project_name, 'import_url': import_url, 'namespace_id': group_id, 'visibility': 'private'} params = {'name': name, 'namespace_id': args.group_id, 'visibility': 'private'}
project = requests.post(base_url + '/projects', params=params, headers=headers).json() 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: if 'message' in project:
print('Error in creating project: %s' % project) print('Error in creating project: %s' % project)
exit(1) 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 # Allow users with developer access level to push and merge on master
access_level = 30 access_level = 30
params = {'name': 'master', 'push_access_level': str(access_level), 'merge_access_level': str(access_level)} params = {'name': 'master', 'push_access_level': str(
requests.post(base_url + '/projects/' + str(project['id']) + '/protected_branches', params=params, headers=headers).json() 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) # Add each student as project's developer (level 30)
for user_id in user_ids: for user_id in user_ids:
params = {'user_id': user_id, 'access_level': access_level} params = {'user_id': user_id, 'access_level': access_level}
if len(sys.argv) > 6: if args.expires_at:
expires_at = sys.argv[6] params['expires_at'] = args.expires_at
params['expires_at'] = expires_at new_user = requests.post(base_url + '/projects/' + str(
new_user = requests.post(base_url + '/projects/' + str(project['id']) + '/members', params=params, headers=headers).json() project['id']) + '/members', params=params, headers=headers).json()
if 'message' in new_user: if 'message' in new_user:
print('Error in adding user: %s' % new_user) print('Error in adding user: %s' % new_user)
else: else:
out = ("Adding '" + new_user['name'] + "' (" + new_user['username'] + ") in '" out = ("Adding '" + new_user['name'] + "' (" + new_user['username'] + ") in '"
+ project['name'] + "' with access level: " + str(new_user['access_level'])) + project['name'] + "' with access level: " + str(new_user['access_level']))
if len(sys.argv) > 6: if args.expires_at:
out += ", expires at: " + new_user['expires_at'] out += ", expires at: " + new_user['expires_at']
print(out) print(out)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment