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

Improve api token management

Now the token can be placed in ~/gitedu.token or
in env var $GITEDU_TOKEN or
given to command line with "-t" or "--token" argument
parent eee9724f
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python3 #!/usr/bin/env python3
"""
Practical Work Manager (pwm)
Steven Liatti
2020
"""
from argparse import Namespace from argparse import Namespace
import os import os
from typing import Dict, List, Optional from typing import Dict, List, Optional
...@@ -45,17 +51,6 @@ def delete_group(token: str, group_id: str): ...@@ -45,17 +51,6 @@ def delete_group(token: str, group_id: str):
print('Group ' + group_id + ' successfully deleted') print('Group ' + group_id + ' successfully deleted')
def get_project_name(args: Namespace) -> str:
"""
If name is not defined in args, take it from first email.
Split at '@' and take first part.
"""
if args.name:
return args.name
else:
return args.emails.split('@')[0]
def emails_to_ids(emails: List[str], headers: Dict[str, str]) -> List[int]: def emails_to_ids(emails: List[str], headers: Dict[str, str]) -> List[int]:
""" """
Get students ids from their emails Get students ids from their emails
...@@ -220,8 +215,12 @@ def command_create_repository(args): ...@@ -220,8 +215,12 @@ def command_create_repository(args):
""" """
Call create_repository Call create_repository
""" """
if args.name:
name = args.name
else:
name = args.emails.split('@')[0]
create_repository(args.token, args.group_id, args.emails.split( create_repository(args.token, args.group_id, args.emails.split(
','), get_project_name(args), args.import_url, args.expires_at) ','), name, args.import_url, args.expires_at)
def command_clone_all(args): def command_clone_all(args):
...@@ -239,13 +238,13 @@ if __name__ == '__main__': ...@@ -239,13 +238,13 @@ if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Practical Work Manager - \ parser = argparse.ArgumentParser(description='Practical Work Manager - \
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",
help="Create a token here: https://gitedu.hesge.ch/profile/personal_access_tokens")
subparsers = parser.add_subparsers( subparsers = parser.add_subparsers(
metavar='(group_repos | group | repo | clone)') metavar='(group_repos | group | repo | clone)')
parser_group_repos = subparsers.add_parser( parser_group_repos = subparsers.add_parser(
'group_repos', help='Create group and repos associated') 'group_repos', help='Create group and repos associated')
parser_group_repos.add_argument(
"token", metavar="TOKEN", help="Create a token here: https://gitedu.hesge.ch/profile/personal_access_tokens")
parser_group_repos.add_argument( parser_group_repos.add_argument(
"group_name", metavar="GROUP_NAME", help="The group name.") "group_name", metavar="GROUP_NAME", help="The group name.")
parser_group_repos.add_argument( parser_group_repos.add_argument(
...@@ -259,8 +258,6 @@ if __name__ == '__main__': ...@@ -259,8 +258,6 @@ if __name__ == '__main__':
parser_group_repos.set_defaults(func=command_create_group_repos) parser_group_repos.set_defaults(func=command_create_group_repos)
parser_group = subparsers.add_parser('group', help='Create gitlab group') parser_group = subparsers.add_parser('group', help='Create gitlab group')
parser_group.add_argument(
"token", metavar="TOKEN", help="Create a token here: https://gitedu.hesge.ch/profile/personal_access_tokens")
parser_group.add_argument( parser_group.add_argument(
"group_name", metavar="GROUP_NAME", help="The group name.") "group_name", metavar="GROUP_NAME", help="The group name.")
parser_group.add_argument( parser_group.add_argument(
...@@ -268,8 +265,6 @@ if __name__ == '__main__': ...@@ -268,8 +265,6 @@ if __name__ == '__main__':
parser_group.set_defaults(func=command_create_group) parser_group.set_defaults(func=command_create_group)
parser_repo = subparsers.add_parser('repo', help='Create gitlab project') parser_repo = subparsers.add_parser('repo', help='Create gitlab project')
parser_repo.add_argument(
"token", metavar="TOKEN", help="Create a token here: https://gitedu.hesge.ch/profile/personal_access_tokens")
parser_repo.add_argument( parser_repo.add_argument(
"group_id", metavar="GROUP_ID", help="The group id (int) where to store the created new project.") "group_id", metavar="GROUP_ID", help="The group id (int) where to store the created new project.")
parser_repo.add_argument( parser_repo.add_argument(
...@@ -289,8 +284,6 @@ if __name__ == '__main__': ...@@ -289,8 +284,6 @@ if __name__ == '__main__':
help="Clone repositories from a group (with group_id) or forks of a project (with project_id) (default behavior).") help="Clone repositories from a group (with group_id) or forks of a project (with project_id) (default behavior).")
group_clone.add_argument("-f", "--forks", action="store_true", group_clone.add_argument("-f", "--forks", action="store_true",
help="Clone forks of a project (with project_id).") help="Clone forks of a project (with project_id).")
parser_clone.add_argument(
"token", metavar="TOKEN", help="Create a token here: https://gitedu.hesge.ch/profile/personal_access_tokens")
parser_clone.add_argument( parser_clone.add_argument(
"id", metavar="ID", help="The group_id (int) of the projects or the project_id (int) of the forks.") "id", metavar="ID", help="The group_id (int) of the projects or the project_id (int) of the forks.")
parser_clone.add_argument( parser_clone.add_argument(
...@@ -300,4 +293,15 @@ if __name__ == '__main__': ...@@ -300,4 +293,15 @@ if __name__ == '__main__':
parser_clone.set_defaults(func=command_clone_all) parser_clone.set_defaults(func=command_clone_all)
args = parser.parse_args() args = parser.parse_args()
if not args.token:
if os.path.isfile(path := os.environ.get('HOME') + '/.gitedu_token'):
with open(path) as file:
args.token = file.read().strip()
elif os.environ.get('GITEDU_TOKEN'):
args.token = os.environ.get('GITEDU_TOKEN')
else:
print('Error: you must given a token')
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