Skip to content
Snippets Groups Projects
Commit 1e3b67fb authored by Florent Gluck's avatar Florent Gluck
Browse files

Factorized URLs

parent d48a6282
No related branches found
No related tags found
No related merge requests found
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
""" """
Practical Work Manager (pwm) Practical Work Manager (pwm)
Steven Liatti Steven Liatti, Florent Gluck
2020 2020-2022
""" """
from argparse import Namespace from argparse import Namespace
...@@ -16,8 +16,9 @@ from requests.models import Response ...@@ -16,8 +16,9 @@ from requests.models import Response
import yaml import yaml
import json 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: 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: ...@@ -27,7 +28,7 @@ def create_group(token: str, name: str, visibility: str = 'private') -> str:
params = {'path': name, 'name': name, 'visibility': visibility} params = {'path': name, 'name': name, 'visibility': visibility}
headers = {'PRIVATE-TOKEN': token} headers = {'PRIVATE-TOKEN': token}
group = requests.post(BASE_URL + '/groups', group = requests.post(BASE_API_URL + '/groups',
params=params, headers=headers).json() 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)
...@@ -44,7 +45,7 @@ def delete_group(token: str, group_id: str): ...@@ -44,7 +45,7 @@ def delete_group(token: str, group_id: str):
""" """
headers = {'PRIVATE-TOKEN': token} headers = {'PRIVATE-TOKEN': token}
deleted_group = requests.delete( 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 'message' in deleted_group:
if deleted_group['message'] != '202 Accepted': if deleted_group['message'] != '202 Accepted':
print('Error in deleting group: %s' % deleted_group) 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]: ...@@ -60,7 +61,7 @@ def emails_to_ids(emails: List[str], headers: Dict[str, str]) -> List[int]:
user_ids = [] user_ids = []
for email in emails: for email in emails:
user_requested = requests.get( 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: 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)
...@@ -79,7 +80,7 @@ def create_repository(token: str, group_id: str, emails: List[str], name: str, i ...@@ -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'} params = {'name': name, 'namespace_id': group_id, 'visibility': 'private'}
if import_url: if import_url:
params['import_url'] = 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() 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)
...@@ -91,7 +92,7 @@ def create_repository(token: str, group_id: str, emails: List[str], name: str, i ...@@ -91,7 +92,7 @@ def create_repository(token: str, group_id: str, emails: List[str], name: str, i
access_level = 30 access_level = 30
params = {'name': 'master', 'push_access_level': str( params = {'name': 'master', 'push_access_level': str(
access_level), 'merge_access_level': str(access_level)} 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() str(project['id']) + '/protected_branches', params=params, headers=headers).json()
# Get students ids from their emails # Get students ids from their emails
...@@ -102,7 +103,7 @@ def create_repository(token: str, group_id: str, emails: List[str], name: str, i ...@@ -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} params = {'user_id': user_id, 'access_level': access_level}
if expires_at: if expires_at:
params['expires_at'] = 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() 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)
...@@ -134,7 +135,7 @@ def get_members(token: str, id: str) -> List: ...@@ -134,7 +135,7 @@ def get_members(token: str, id: str) -> List:
""" """
Return members list from given id Return members list from given id
""" """
url = BASE_URL + '/projects/' + id + '/members' url = BASE_API_URL + '/projects/' + id + '/members'
headers = {'PRIVATE-TOKEN': token} headers = {'PRIVATE-TOKEN': token}
params = {'simple': 'true', 'order_by': 'name', params = {'simple': 'true', 'order_by': 'name',
...@@ -152,9 +153,9 @@ def get_projects(token: str, id: str, source: str = 'group') -> List: ...@@ -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') Return projects list from given id and source ('group' or 'forks')
""" """
if source == 'forks': if source == 'forks':
url = BASE_URL + '/projects/' + id + '/forks' url = BASE_API_URL + '/projects/' + id + '/forks'
else: else:
url = BASE_URL + '/groups/' + id + '/projects' url = BASE_API_URL + '/groups/' + id + '/projects'
headers = {'PRIVATE-TOKEN': token} headers = {'PRIVATE-TOKEN': token}
params = {'simple': 'true', 'order_by': 'name', params = {'simple': 'true', 'order_by': 'name',
...@@ -182,7 +183,7 @@ def clone_all(token: str, id: str, directory: str, until_date: Optional[str], so ...@@ -182,7 +183,7 @@ def clone_all(token: str, id: str, directory: str, until_date: Optional[str], so
repositories = get_projects(token, id, source) repositories = get_projects(token, id, source)
for repo in repositories: 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() members = requests.get(repo_url, headers=headers).json()
if 'message' in members: if 'message' in members:
print('Error retrieving members: ' + members['message']) print('Error retrieving members: ' + members['message'])
...@@ -351,7 +352,7 @@ if __name__ == '__main__': ...@@ -351,7 +352,7 @@ if __name__ == '__main__':
Manage students PW - Create group, projects or clone repositories') Manage students PW - Create group, projects or clone repositories')
parser.set_defaults(func=lambda _: parser.print_help()) parser.set_defaults(func=lambda _: parser.print_help())
parser.add_argument("-t", "--token", metavar="TOKEN", 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( subparsers = parser.add_subparsers(
metavar='(group_repos | group | repo | clone | list)') metavar='(group_repos | group | repo | clone | list)')
...@@ -441,7 +442,7 @@ if __name__ == '__main__': ...@@ -441,7 +442,7 @@ if __name__ == '__main__':
elif os.environ.get('GITEDU_TOKEN'): elif os.environ.get('GITEDU_TOKEN'):
args.token = os.environ.get('GITEDU_TOKEN') args.token = os.environ.get('GITEDU_TOKEN')
else: 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) exit(1)
args.func(args) args.func(args)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment