diff --git a/gitlab-create-student-depots.py b/gitlab-create-student-depots.py index 40c9d49..d81a0f7 100644 --- a/gitlab-create-student-depots.py +++ b/gitlab-create-student-depots.py @@ -13,7 +13,6 @@ import gitlab import sys GITLAB_URL='https://gitlab.telecom-paris.fr' -PRIVATE_TOKEN=sys.argv[3] if len(sys.argv) > 3 else '' def readNames(fileName): result = [] @@ -33,6 +32,7 @@ def readNames(fileName): return result def lookupUser(email, gitlab): + """ Return the first found user; throw if not found """ return gitlab.users.list(search=email)[0] def createProject(name, groupId, gitlab): @@ -43,16 +43,14 @@ def addProjectMember(project, userId, accessLevel): return project.members.create({'user_id': userId, 'access_level': accessLevel}) -def makeProjectsInGroupId(groupId, csvFile): - api = gitlab.Gitlab(GITLAB_URL, PRIVATE_TOKEN) +def makeProjectsInGroupId(groupId, csvFile, token, options={}): + print(groupId, csvFile, options); return + api = gitlab.Gitlab(GITLAB_URL, token) for (lastName, firstName, email) in readNames(csvFile): try: -# if email.endswith('@telecom-paris.fr'): -# email = email.split('@')[0] + "@telecom-paristech.fr" user = lookupUser(email, api) - print("::: Creating project for {} {} <{}>…".format( - lastName, firstName, email, user.id)) - print("::: Found {} ({})".format(user.name, user.id)) + print("::: Creating project for {} {} <{}> -- {} ({})…".format( + lastName, firstName, email, user.name, user.id)) project = createProject('{} {}'.format(lastName, firstName), groupId, api) member = addProjectMember(project, user.id, @@ -64,15 +62,29 @@ def makeProjectsInGroupId(groupId, csvFile): print >> sys.stderr, "!!! Error creating project for {}: {}".format(email, e) if __name__ == '__main__': - if len(sys.argv) != 4: - print("*** Usage: python {} ".format(sys.argv[0])) - print("*** csv: a CSV file exported from Synapses.") - print("*** The first three columns are assumed to be ") - print("*** last name, first name, email address.") - print("*** groupId: The GitLab id where all the projects will") - print("*** be added.") - print("*** token: A GitLab API token as created at ") - print("*** {}/-/profile/personal_access_tokens".format(GITLAB_URL)) - print("*** Be sure to enable API scope.") - sys.exit(1) - makeProjectsInGroupId(sys.argv[2], sys.argv[1]) + import argparse + + # print("*** Usage: python {} ".format(sys.argv[0])) + # print("*** csv: a CSV file exported from Synapses.") + # print("*** The first three columns are assumed to be ") + # print("*** last name, first name, email address.") + # print("*** groupId: The GitLab id where all the projects will") + # print("*** be added.") + # print("*** token: A GitLab API token as created at ") + # print("*** {}/-/profile/personal_access_tokens".format(GITLAB_URL)) + # print("*** Be sure to enable API scope.") + # sys.exit(1) + + def parse_args(): + parser = argparse.ArgumentParser(description="Create GitLab repositories") + parser.add_argument("csv", help="CSV file as exported from Synapses. The first three columns are assumed to be last name, first name, email address.") + parser.add_argument("groupId", help="The GitLab id where all projects will be added.") + parser.add_argument("-t", "--token", help="GitLab API token as created at {}/-/profile/personal_access_tokens".format(GITLAB_URL)) + # TODO: parser.add_argument("--extract-groups", help="Extract groups from the fourth column in the CSV file", action="store_true") + + args = parser.parse_args() + + return args + + args = parse_args() + makeProjectsInGroupId(args.groupId, args.csv, args.token, args)