diff --git a/scripts/create_group.py b/scripts/create_group.py index 1a55ebe5aae7a43294515d9940c9198d0dfe353c..6a9e3e11afbd5175278b57a5cc696812b9f840db 100755 --- a/scripts/create_group.py +++ b/scripts/create_group.py @@ -1,28 +1,35 @@ #!/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'])) diff --git a/scripts/create_issues.py b/scripts/create_issues.py deleted file mode 100755 index 80a27965f42218f8f6e23908c430a97d93d87da3..0000000000000000000000000000000000000000 --- a/scripts/create_issues.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/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) diff --git a/scripts/create_repo_for_students.py b/scripts/create_repo_for_students.py index 8909d4944bac799e3b54288bb45babc2127a86b7..e67278e43a98bc12e9d3f9666b049bde742df04f 100755 --- a/scripts/create_repo_for_students.py +++ b/scripts/create_repo_for_students.py @@ -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)