diff --git a/pwm b/pwm index fd1e8d3b362553722ffbc39260d014482548e3b7..73ed9e902f1c2b6cc09dc020ea8de1d321b37a7f 100644 --- a/pwm +++ b/pwm @@ -2,8 +2,8 @@ """ Practical Work Manager (pwm) -Steven Liatti -2020 +Steven Liatti, Florent Gluck +2020-2022 """ from argparse import Namespace @@ -16,8 +16,9 @@ from requests.models import Response import yaml import json -BASE_URL: str = 'https://gitedu.hesge.ch/api/v4' - +BASE_URL: str = 'https://gitedu.hesge.ch' +BASE_API_URL: str = BASE_URL + '/api/v4' +TOKEN_URL: str = BASE_URL + '/profile/personal_access_tokens' def create_group(token: str, name: str, visibility: str = 'private') -> str: """ @@ -27,7 +28,7 @@ def create_group(token: str, name: str, visibility: str = 'private') -> str: params = {'path': name, 'name': name, 'visibility': visibility} headers = {'PRIVATE-TOKEN': token} - group = requests.post(BASE_URL + '/groups', + group = requests.post(BASE_API_URL + '/groups', params=params, headers=headers).json() if 'message' in group: print('Error in creating group: %s' % group) @@ -44,7 +45,7 @@ def delete_group(token: str, group_id: str): """ headers = {'PRIVATE-TOKEN': token} deleted_group = requests.delete( - BASE_URL + '/groups/' + group_id, headers=headers).json() + BASE_API_URL + '/groups/' + group_id, headers=headers).json() if 'message' in deleted_group: if deleted_group['message'] != '202 Accepted': print('Error in deleting group: %s' % deleted_group) @@ -60,7 +61,7 @@ def emails_to_ids(emails: List[str], headers: Dict[str, str]) -> List[int]: user_ids = [] for email in emails: user_requested = requests.get( - BASE_URL + '/users', params={'search': email}, headers=headers).json() + BASE_API_URL + '/users', params={'search': email}, headers=headers).json() if len(user_requested) == 0: print('No user %s found, operation aborted' % email) exit(1) @@ -79,7 +80,7 @@ def create_repository(token: str, group_id: str, emails: List[str], name: str, i params = {'name': name, 'namespace_id': group_id, 'visibility': 'private'} if import_url: params['import_url'] = import_url - project = requests.post(BASE_URL + '/projects', + project = requests.post(BASE_API_URL + '/projects', params=params, headers=headers).json() if 'message' in project: print('Error in creating project: %s' % project) @@ -91,7 +92,7 @@ def create_repository(token: str, group_id: str, emails: List[str], name: str, i access_level = 30 params = {'name': 'master', 'push_access_level': str( access_level), 'merge_access_level': str(access_level)} - requests.post(BASE_URL + '/projects/' + + requests.post(BASE_API_URL + '/projects/' + str(project['id']) + '/protected_branches', params=params, headers=headers).json() # Get students ids from their emails @@ -102,7 +103,7 @@ def create_repository(token: str, group_id: str, emails: List[str], name: str, i params = {'user_id': user_id, 'access_level': access_level} if expires_at: params['expires_at'] = expires_at - new_user = requests.post(BASE_URL + '/projects/' + str( + new_user = requests.post(BASE_API_URL + '/projects/' + str( project['id']) + '/members', params=params, headers=headers).json() if 'message' in new_user: print('Error in adding user: %s' % new_user) @@ -134,7 +135,7 @@ def get_members(token: str, id: str) -> List: """ Return members list from given id """ - url = BASE_URL + '/projects/' + id + '/members' + url = BASE_API_URL + '/projects/' + id + '/members' headers = {'PRIVATE-TOKEN': token} params = {'simple': 'true', 'order_by': 'name', @@ -152,9 +153,9 @@ def get_projects(token: str, id: str, source: str = 'group') -> List: Return projects list from given id and source ('group' or 'forks') """ if source == 'forks': - url = BASE_URL + '/projects/' + id + '/forks' + url = BASE_API_URL + '/projects/' + id + '/forks' else: - url = BASE_URL + '/groups/' + id + '/projects' + url = BASE_API_URL + '/groups/' + id + '/projects' headers = {'PRIVATE-TOKEN': token} params = {'simple': 'true', 'order_by': 'name', @@ -182,7 +183,7 @@ def clone_all(token: str, id: str, directory: str, until_date: Optional[str], so repositories = get_projects(token, id, source) for repo in repositories: - repo_url = BASE_URL + '/projects/' + str(repo['id']) + '/members' + repo_url = BASE_API_URL + '/projects/' + str(repo['id']) + '/members' members = requests.get(repo_url, headers=headers).json() if 'message' in members: print('Error retrieving members: ' + members['message']) @@ -351,7 +352,7 @@ if __name__ == '__main__': Manage students PW - Create group, projects or clone repositories') parser.set_defaults(func=lambda _: parser.print_help()) parser.add_argument("-t", "--token", metavar="TOKEN", - help="Create a token here: https://gitedu.hesge.ch/profile/personal_access_tokens") + help="Create a token here: " + TOKEN_URL) subparsers = parser.add_subparsers( metavar='(group_repos | group | repo | clone | list)') @@ -441,7 +442,7 @@ if __name__ == '__main__': elif os.environ.get('GITEDU_TOKEN'): args.token = os.environ.get('GITEDU_TOKEN') else: - print('Error: you must give a valid api token. Create a token here: https://gitedu.hesge.ch/profile/personal_access_tokens') + print('Error: you must give a valid api token. Create a token here: ' + TOKEN_URL) exit(1) args.func(args)