Fork off project for each user and create in course namespace
This commit is contained in:
parent
562eb155b8
commit
c6b7dc1bc3
1 changed files with 35 additions and 25 deletions
|
@ -87,33 +87,39 @@ def create_course(course_name):
|
||||||
return course
|
return course
|
||||||
|
|
||||||
|
|
||||||
def create_course_admin_group(course):
|
|
||||||
"""Creates an administrative group for the course
|
|
||||||
This group will be added as owner of each student repo"""
|
|
||||||
|
|
||||||
try:
|
|
||||||
subgroup = gl.groups.create({'name': 'admin', 'path': 'admin', 'parent_id': course.id})
|
|
||||||
return subgroup
|
|
||||||
except gitlab.exceptions.GitlabHttpError as e:
|
|
||||||
print(e)
|
|
||||||
|
|
||||||
"""TODO
|
"""TODO
|
||||||
- create admin group for course and add hiwis
|
|
||||||
|
|
||||||
- add users (LDAP) with custom attribute for group, matrikelnummer
|
- add users (LDAP) with custom attribute for group, matrikelnummer
|
||||||
+ if user exists set custom attributes
|
+ if user exists set custom attributes
|
||||||
|
|
||||||
- add users to course
|
|
||||||
|
|
||||||
- create student repos
|
|
||||||
+ fork from common repo
|
|
||||||
+ add admin group to each repo as owner / master
|
|
||||||
|
|
||||||
|
|
||||||
- create search for custom attribute (-> checkout repos for group)
|
- create search for custom attribute (-> checkout repos for group)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def create_course_project(name, course):
|
||||||
|
|
||||||
|
try:
|
||||||
|
gl.projects.create(
|
||||||
|
{'name': name,
|
||||||
|
'namespace_id': course.id,
|
||||||
|
'visibility': 'internal'
|
||||||
|
})
|
||||||
|
except gitlab.exceptions.GitlabHttpError as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
|
||||||
|
def setup_user_project(user, base, course):
|
||||||
|
"""Create user projects as forks from course/solutions
|
||||||
|
in namespace of course and add user as developer (NOT master)
|
||||||
|
user should not be able to modify protected TAG or force-push on protected branch
|
||||||
|
users can later invite other users into their projects"""
|
||||||
|
|
||||||
|
fork = course.projects.list(name=user)
|
||||||
|
if len(fork) == 0:
|
||||||
|
fork = base.forks.create({'name': user, 'namespace': base.namspace})
|
||||||
|
fork.members.create({'user_id': user, 'access_level': gitlab.DEVELOPER_ACCESS})
|
||||||
|
|
||||||
|
return fork
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description='Import groups and users from data source')
|
parser = argparse.ArgumentParser(description='Import groups and users from data source')
|
||||||
|
@ -126,15 +132,19 @@ if __name__ == '__main__':
|
||||||
type, _ = guess_type(args.source[0])
|
type, _ = guess_type(args.source[0])
|
||||||
course = args.course[0]
|
course = args.course[0]
|
||||||
|
|
||||||
print(type)
|
course = create_course(course)
|
||||||
|
course_project = create_course_project('solutions', course)
|
||||||
|
course_project = create_course_project('exercises', course)
|
||||||
|
|
||||||
|
users = None
|
||||||
|
|
||||||
if type == 'text/csv':
|
if type == 'text/csv':
|
||||||
|
|
||||||
course = create_course(course)
|
|
||||||
admins = create_course_admin_group(course)
|
|
||||||
# TODO get functions from API and add hiwis to admins
|
# TODO get functions from API and add hiwis to admins
|
||||||
#users = parse_users_csv(args.source[0], args.encoding[0])
|
users = parse_users_csv(args.source[0], args.encoding[0])
|
||||||
|
|
||||||
elif type == None:
|
elif type == None:
|
||||||
|
|
||||||
print('MIME type not recognized')
|
print('MIME type not recognized')
|
||||||
|
|
||||||
|
for user, group in users:
|
||||||
|
setup_user_project(user, course)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue