def test_membership(self): membership = Membership() user = User.objects.create_user('Testy McTest', '*****@*****.**', 'testpassword') user.save() group = Group() group.name = "Test Group" group.save() membership.user = User.objects.get(id=user.id) membership.group = Group.objects.get(id=group.id) membership.is_admin = False membership.save() test_membership = Membership.objects.get(id=membership.id) self.assertEquals(test_membership, membership) self.assertEquals(test_membership.user, User.objects.get(id=user.id)) self.assertEquals(test_membership.group, Group.objects.get(id=group.id)) self.assertEquals(test_membership.is_admin, False) membership.delete() group.delete() user.delete()
def add_group(request): # print("checkbox input field") # print(request.POST.getlist('members')) try: g = Group( group_name=request.POST['group_name'], topic=request.POST['topic'], create_date=timezone.now(), creator_username=request.user.username ) g.save() groupMembers = request.POST.getlist('members') for u in groupMembers: # print "user:"******"!", }) else: g.save() return HttpResponseRedirect(reverse('forum:index')) return render()
def create_sample_group_db(self, name, alias, tags, description): sample_group = Group() sample_group.name = name sample_group.alias = alias sample_group.tags = tags sample_group.description = description sample_group.save()
class TeamModelTestCase(TestCase): def setUp(self): self.tournament = Tournament() self.tournament.save() self.group = Group(letter='A') self.group.tournament_id = self.tournament.id self.group.save() self.team = Team(name='Brazil') self.team.group_id = self.group.id def test_model_can_create_team(self): old_count = Team.objects.count() self.team.save() new_count = Team.objects.count() created_team = Team.objects.last() self.assertNotEqual(old_count, new_count) self.assertEquals(self.team.name, created_team.name) self.assertEquals(self.team.points, created_team.points) self.assertEquals(self.team.goals, created_team.goals) self.assertEquals(self.team.position, created_team.position) self.assertEquals(self.team.group.letter, self.group.letter) self.assertEquals(self.team, self.group.teams.get()) def test_model_cannot_create_team_without_name(self): team_without_name = Team() with self.assertRaises(IntegrityError): team_without_name.save() def test_model_cannot_create_team_without_group(self): team_without_group = Team(name='Japan') with self.assertRaises(IntegrityError): team_without_group.save()
def groups(request): """ :param request: :return: """ if not request.user.is_authenticated(): return HttpResponseRedirect(reverse('index')) if not request.user.is_superuser: return HttpResponseRedirect(reverse('index')) error_messages = [] if request.method == 'POST': form = groupAddForm(request.POST) if form.is_valid(): group = form.cleaned_data new_group = Group(name=group['name']) new_group.save() return HttpResponseRedirect(request.get_full_path()) else: for msg_err in form.errors.values(): error_messages.append(msg_err.as_text()) groups = Group.objects.all().order_by('name') groups_inst = [] for group in groups: groups_inst.append((group, Instance.objects.filter(group=group).order_by('name'))) return render(request, 'groups.html', locals())
def groups(request): """ :param request: :return: """ if not request.user.is_authenticated(): return HttpResponseRedirect(reverse('index')) if not request.user.is_superuser: return HttpResponseRedirect(reverse('index')) error_messages = [] if request.method == 'POST': form = groupAddForm(request.POST) if form.is_valid(): group = form.cleaned_data new_group = Group(name=group['name']) new_group.save() return HttpResponseRedirect(request.get_full_path()) else: for msg_err in form.errors.values(): error_messages.append(msg_err.as_text()) groups = Group.objects.all().order_by('name') groups_inst = [] for group in groups: groups_inst.append( (group, Instance.objects.filter(group=group).order_by('name'))) return render(request, 'groups.html', locals())
def test_membership(self): membership = Membership() user = User.objects.create_user("Testy McTest", "*****@*****.**", "testpassword") user.save() group = Group() group.name = "Test Group" group.save() membership.user = User.objects.get(id=user.id) membership.group = Group.objects.get(id=group.id) membership.is_admin = False membership.save() test_membership = Membership.objects.get(id=membership.id) self.assertEquals(test_membership, membership) self.assertEquals(test_membership.user, User.objects.get(id=user.id)) self.assertEquals(test_membership.group, Group.objects.get(id=group.id)) self.assertEquals(test_membership.is_admin, False) membership.delete() group.delete() user.delete()
def form_valid(self, form): group = Group(name=form.cleaned_data['name'], creator_id=self.request.user.id) group.save() GroupUser(group_id=group.id, user_id=self.request.user.id, confirmed=True, is_creator=True).save() for user in form.cleaned_data['users']: GroupUser(group_id=group.id, user_id=user.id, confirmed=False, is_creator=False).save() return HttpResponseRedirect(reverse('groups:index'))
def test_group_size_restriction(self): group = Group() group.group_letter = 'A' teams = [] for i in range(0,6): teams.append(make_phony_team()) group.save() group.teams = teams self.assertRaises(ValidationError, group.save) teams = [] for i in range(0,3): teams.append(make_phony_team()) group.teams = teams self.assertRaises(ValidationError, group.save) teams = [] for i in range(0,4): teams.append(make_phony_team()) group.teams = teams
def test_post(self): post = Post() user = User.objects.create_user('Testy McTest', '*****@*****.**', 'testpassword') user.save() group = Group() group.name = "Test Group" group.save() membership = Membership() membership.user = User.objects.get(id = user.id) membership.group = Group.objects.get(id = group.id) membership.save() post.author = Membership.objects.get(id = membership.id) post.message = "Testing321" post.save() test_post = Post.objects.get(id = post.id) self.assertEquals(test_post, post) self.assertEquals(test_post.author, Membership.objects.get(id = membership.id)) self.assertEquals(test_post.message, "Testing321") post.delete() membership.delete() group.delete() user.delete()
def group_create(request, assignment_id): assignment = get_object_or_404(Assignment, id=assignment_id) # students = assignment.discipline.group.profiles.filter(student=True) students = [] for profile in assignment.discipline.group.profiles.all(): if profile.is_student(): students.append(profile) if request.method == 'POST': form = GroupForm(students, request.POST) if form.is_valid(): g = Group() g.name = form.cleaned_data['name'] g.save() for selected_student in form.cleaned_data['students']: g.profiles.add(Profile.objects.get(pk=selected_student)) g.profiles.add(assignment.discipline.teacher.profile) assignment.group.add(g) return HttpResponseRedirect(reverse("educational:assignment_detail", kwargs={'pk': assignment.pk})) else: form = GroupForm(students) return render(request, 'educational/teacher/group_create.html', {'form': form})
def setUp(self): user_obj = User(email='*****@*****.**', is_lecture=True) user_obj.set_password("randPassword") user_obj.save() group = Group() group.save() lecture_groups = LectureGroups(user=user_obj) lecture_groups.groups_list.add(group) lecture_groups.save()
class MatchModelTestCase(TestCase): def setUp(self): self.phase = Tournament.FIRST_PHASE self.group_letter = 'A' self.team_a_name = 'Brazil' self.team_b_name = 'Germany' self.tournament = Tournament(phase=self.phase) self.tournament.save() self.group = Group(letter=self.group_letter) self.group.tournament_id = self.tournament.id self.group.save() self.team_a_goals = random.randint(0, 10) self.team_b_goals = random.randint(0, 10) self.team_a = Team(name=self.team_a_name) self.team_b = Team(name=self.team_b_name) self.team_a.group_id = self.group.id self.team_b.group_id = self.group.id self.team_a.save() self.team_b.save() def test_model_can_create_match(self): old_count = Match.objects.count() match = Match(away_team=self.team_a, home_team=self.team_b, away_team_goals=self.team_a_goals, home_team_goals=self.team_b_goals, tournament=self.tournament, phase=self.tournament.phase) match.save() new_count = Match.objects.count() created_match = Match.objects.last() self.assertNotEquals(old_count, new_count) self.assertEquals(created_match.phase, self.tournament.phase) self.assertEquals(created_match.away_team.id, self.team_a.id) self.assertEquals(created_match.away_team_goals, self.team_a_goals) self.assertEquals(created_match.home_team.id, self.team_b.id) self.assertEquals(created_match.home_team_goals, self.team_b_goals) self.assertFalse(created_match.played) self.assertIsNone(created_match.winner) def test_model_cannot_create_match_without_teams(self): match_without_teams = Match() with self.assertRaises(IntegrityError): match_without_teams.save() def test_model_can_create_match_without_input_goals(self): expected_amount_goals = 0 match_without_goals = Match(away_team=self.team_a, home_team=self.team_b, tournament=self.tournament, phase=self.tournament.phase) match_without_goals.save() created_match = Match.objects.last() self.assertEquals(created_match.away_team_goals, expected_amount_goals) self.assertEquals(created_match.away_team_goals, expected_amount_goals) self.assertEquals(created_match.phase, self.phase)
def setUp(self): user_obj = User(email='*****@*****.**') user_obj.set_password("randPassword") user_obj.save() group = Group() group.save() student_groups = StudentGroups(user=user_obj) student_groups.groups_list.add(group) student_groups.save()
def test_group_submission_view(self): """ test if group submission can be viewed by group member and non group member """ now = datetime.datetime.now() _, course = create_offering() a1 = NumericActivity(name="Assignment 1", short_name="A1", status="RLS", offering=course, position=2, max_grade=15, due_date=now, group=True) a1.save() a2 = NumericActivity(name="Assignment 2", short_name="A2", status="RLS", offering=course, position=1, max_grade=15, due_date=now, group=True) a2.save() p = Person.objects.get(userid="ggbaker") member = Member(person=p, offering=course, role="INST", career="NONS", added_reason="UNK") member.save() c1 = URL.Component(activity=a1, title="URL Link", position=8) c1.save() c2 = Archive.Component(activity=a1, title="Archive File", position=1, max_size=100000) c2.save() c3 = Code.Component(activity=a1, title="Code File", position=3, max_size=2000, allowed=".py") c3.save() userid1 = "0aaa0" userid2 = "0aaa1" userid3 = "0aaa2" for u in [userid1, userid2,userid3]: p = Person.objects.get(userid=u) m = Member(person=p, offering=course, role="STUD", credits=3, career="UGRD", added_reason="UNK") m.save() m = Member.objects.get(person__userid=userid1, offering=course) g = Group(name="Test Group", manager=m, courseoffering=course) g.save() gm = GroupMember(group=g, student=m, confirmed=True, activity=a1) gm.save() gm = GroupMember(group=g, student=m, confirmed=True, activity=a2) gm.save() m = Member.objects.get(person__userid=userid2, offering=course) gm = GroupMember(group=g, student=m, confirmed=True, activity=a1) gm.save() gm = GroupMember(group=g, student=m, confirmed=True, activity=a2) gm.save() m = Member.objects.get(person__userid=userid3, offering=course) gm = GroupMember(group=g, student=m, confirmed=True, activity=a2) gm.save() client = Client() # login as "0aaa0", member of group : test_group for assignment1 and assgnment2 client.login_user("0aaa0") #submission page for assignment 1 url = reverse('submission.views.show_components', kwargs={'course_slug': course.slug,'activity_slug':a1.slug}) response = basic_page_tests(self, client, url) self.assertContains(response, "This is a group submission. You will submit on behalf of the group Test Group.") self.assertContains(response, "You haven't made a submission for this component.")
def test_group(self): group = Group() group.name = "Test Group" group.save() test_group = Group.objects.get(id=group.id) self.assertEquals(test_group, group) self.assertEquals(test_group.name, "Test Group") self.assertEquals(test_group.date_created, group.date_created) group.delete()
def post(self, request): name = request.POST.get('name') group = Group() group.name = name group.start_date = start_date group.max_students = max_students group.save() print(group) return redirect('/groups/all')
def test_only_displays_GET_on_search(self): first_group = Group() first_group.name = 'Teh empty tag' first_group.alias = 'tehalias' first_group.tags = '' first_group.description = 'Teh empty description' first_group.save() request = HttpRequest() request.method = 'GET' response = home_page(request) self.assertNotIn('Teh empty tag', response.content.decode())
def make_phony_group(): team1 = make_phony_team() team2 = make_phony_team() team3 = make_phony_team() team4 = make_phony_team() group = Group() group.group_letter = 'A' group.save() group.teams = [team1, team2, team3, team4] fixture = Fixture() fixture.home_team = team1 fixture.away_team = team2 fixture.save() group.fixtures.add(fixture) fixture = Fixture() fixture.home_team = team3 fixture.away_team = team4 fixture.save() group.fixtures.add(fixture) fixture = Fixture() fixture.home_team = team1 fixture.away_team = team3 fixture.save() group.fixtures.add(fixture) fixture = Fixture() fixture.home_team = team2 fixture.away_team = team4 fixture.save() group.fixtures.add(fixture) fixture = Fixture() fixture.home_team = team1 fixture.away_team = team4 fixture.save() group.fixtures.add(fixture) fixture = Fixture() fixture.home_team = team2 fixture.away_team = team3 fixture.save() group.fixtures.add(fixture) group.save() return group
def home_page(request): # Home page get is searching for groups if request.method == 'POST': name = request.POST['group_name'] alias = request.POST['group_alias'] tags = request.POST['group_tags'] description = request.POST['group_description'] if verification(request, name, alias, tags, description): return verification(request, name, alias, tags, description) group = Group( name = name, alias = alias, tags = tags, description = description) try: group.full_clean() group.save() except ValidationError: error = "Nao pode-se adicionar um grupo vazio!" return render(request, 'home.html', {'group_description_error_message': error}) #return render(request, 'home.html', { # 'group_success': True, # 'open_popup': True, # 'group_name': group.name, # 'group_tags': group.tags, # 'group_alias': group.alias, # 'group_description': group.description # }) return render(request, 'home.html', { 'group_success': True, 'open_popup': True, 'group_name': name }) if request.method == 'GET': search_tags = request.GET.get('search_group', '') if search_tags != '': found_groups = search_groups(search_tags) return render(request, 'home.html', { 'groups': found_groups }) return render(request, 'home.html', {'form': GroupForm()})
def groupcreate(request): try: if Group.objects.filter(name=request.POST['groupName']): return HttpResponse('小组已存在 ! ') else: policy = qiniu.rs.PutPolicy('mzgroup') uptoken = policy.token() if 'groupImg' in request.FILES: tj=time.time() image=request.FILES['groupImg'] suffix=image.name.split('.')[-1] image=Image.open(image) coordinate=request.POST['coordinate'].split('*') region = (int(round(float(coordinate[0]))+1),int(coordinate[1]),int(coordinate[2]),int(coordinate[3])) cropImg = image.crop(region) cropImg.save(r"/home/tron/Maizhi/templates/picture/group/image/"+str(tj)+'.'+suffix) #dirs ='templates/picture/group/image/'+str(tj) #content = image.read() #if os.path.isfile(dirs): # os.remove(dirs) #fp=open(dirs, 'wb') #fp.write(content) #fp.flush() #fp.close() domain="http://mzgroup.qiniudn.com" ret=qiniu.io.put_file(uptoken,str(tj),r"/home/tron/Maizhi/templates/picture/group/image/"+str(tj)+'.'+suffix) #if ret: # os.remove(dirs) else: filename=None g=Group(name=request.POST['groupName'],introduce=request.POST['groupIntro'],img=str(tj),domain=domain,user_id=request.session['id']) g.save() return render(request,'groups/success.html',{'g':g.id}) except: m=Message.objects.filter(to=request.session['id']).order_by('-time')[0:5] mess=[] for k in m: each=[] name=Info.objects.get(user_id=k.from_id).user_name content=k.content each.append(name) each.append(content) mess.append(each) havent=0 for n in m: if n.status==1: havent+=1 info=Info.objects.get(user_id=request.session['id']) return render(request,'groups/groupCreate.html',{'info':info,'message':mess,'havent':havent})
def post(self, request, *args, **kwargs): data = request.data #create a new group given the name, description, and image serializer = GroupSerializer(data=data) if (serializer.is_valid(raise_exception=True)): group_obj = Group(name=data.get('name'), description=data.get('description'), image=data.get('image')) group_obj.save() #associate the group with the owner and members through Membership owner = request.user if (not Membership.objects.filter(user=owner, group=group_obj).exists()): own_mem_obj = Membership(user=owner, group=group_obj, owner=True) own_mem_obj.save() members = data.get('members', '') members = [item.strip() for item in members.strip().split(',')] for member in members: try: user_obj = User.objects.get(email=member) except User.DoesNotExists: pass if (not Membership.objects.filter(user=user_obj, group=group_obj).exists()): mem_obj = Membership(user=user_obj, group=group_obj, owner=False) mem_obj.save() #notify the group msg_obj = BuddyMessage(user=user_obj, group=group_obj, message=''.join((user_obj.buddycode, ' joined the group')), message_type=settings.MSG_TYPE_JOIN) msg_obj.save() #create an activity for the owner if (not CreateGroup.objects.filter(user=owner, group=group_obj).exists()): activity_obj = CreateGroup(owner=owner, group=group_obj, longitude=owner.longitude, latitude=owner.latitude) activity_obj.save() return Response({"success": True}, status=HTTP_200_OK)
def groups(request): global newsgroup try: username = request.POST['submitted_username'] password = request.POST['submitted_password'] newsgroup = NewsGroup('news.cs.illinois.edu', username, password) except(Exception): return redirect('/') else: groups = newsgroup.getGroups() db_groups = Group.objects.all() for group in groups: if not db_groups.filter(name=group[0]): g = Group(name=group[0], description = group[1]) g.save() return render_to_response('groups/groups.html', {'group_list' : db_groups})
def create(self, request, *args, **kwargs): data = dict(request.data) user = request.user level = Level.safe_get(data.get('level_id')) admin = Member.safe_get(data.get('admin_id')) parent_group = Group.safe_get(data.get('parent_group_id')) group = Group() group.title = data.get('title', '') group.level_id = level.to_dbref() if level else None group.admin_id = admin.to_dbref() if admin else None group.created_at = datetime.utcnow() group.created_by = user.to_dbref() if user.id else None group.parent_group_id = parent_group.id if parent_group else None group.save() response = {"id": str(group.id), "title": group.title} return HTTPResponse(response)
def addgroup(request): if 'groupname' in request.POST: groupname = request.POST['groupname'] # Create the new group group = Group(name=groupname) group.save() # Add the current user to the group # Make sure to use user instead of id b/c not equal member = Member.objects.get(user=User.objects.get(id=request.user.id)) member.groups.add(group) return detail(request, group.id) else: # TODO: Add some sort of error here. Group name is empty. return index(request)
def create_group(name, email, url_root, owner): """ _name_ Name of group _email_ Email address for group (?) _url_root_ acSite _owner_ MCID of user/doctor that controls this group """ u = User() u.mcid = mcid_generator.next_mcid() u.email = email u.set_password(str(u.mcid)) u.first_name = name u.last_name = 'Group' u.rolehack = 'rls' u.acctype = 'GROUP' u.updatetime = 0 u.ccrlogupdatetime = 0 u.save() g = Group() g.grouptypeid = 0 g.name = name g.accid_id = u.mcid g.save() p = Practice() p.providergroupid = g p.practicename = name p.accid_id = u.mcid p.save() p.practiceRlsUrl = urljoin(url_root, 'acct/ws/R.php?pid=%d' % p.practiceid) p.save() g.parentid = p.practiceid g.save() ga = Groupadmin() ga.groupinstanceid = g.groupinstanceid ga.adminaccid = owner ga.save() add_to_group(g, owner) return g, p
def create_course_group(self, request, pk=None): course = self.get_object() group_name = request.data.get('name') group = Group(name=group_name, course=course) group.save() for student in group.students.all(): assign_perm('groups.view_group', student.user, group) # Assign view permission to students in group for assistant in group.course.assistant_set.all(): assign_perm('groups.view_group', assistant.user, group) assign_perm('groups.change_group', assistant.user, group) assign_perm('groups.change_group', group.course.professor.user, group) assign_perm('groups.delete_group', group.course.professor.user, group) assign_perm('groups.view_group', group.course.professor.user, group) return Response(GroupSerializer(group).data)
def handle(self, *args, **options): Group.objects.all().delete() Category.objects.all().delete() Choice.objects.all().delete() Question.objects.all().delete() #сбрасываем автоинкремент чтобы не ловить индекс категории from django.db import connection cursor = connection.cursor() sql = 'ALTER TABLE groups_group AUTO_INCREMENT=1;' cursor.execute(sql) sql = 'ALTER TABLE questions_category AUTO_INCREMENT=1;' cursor.execute(sql) for i in range(0, self.groups_pool_length): group = Group(name=self.groups_prefix + str(i + 1)) group.save() print 'Таблица групп наполнена' for i in range(0, self.categories_pool_length): category = Category(name=self.categories_prefix + str(i + 1)) category.save() print 'Таблица категорий наполнена' import random for i in range(0, self.questions_pool_length): a = random.randint(0, 20) b = random.randint(0, 20) answer = a + b question_text = '%s %s. Введите правильный ответ в выражении %s+%s' % ( self.questions_prefix, i, a, b) question = Question( category=Category.objects.all().order_by('?')[0], question=question_text, answer=str(answer)) question.save() for j in range(3): choice = Choice( question=question, choice_text=answer + (-1)**random.randint(0, 10) * random.randint(1, 3)) choice.save() print 'Таблицы вопросов и выборов наполнены'
def create_group(group_name, articles, num_comments, clone_and_sample): """ Create group from articles (sampling its comments) """ try: group = Group.objects.get(name=group_name) except DoesNotExist: group = Group(name=group_name) if clone_and_sample: group.articles = [ clone_and_sample_comments(art, num_comments) for art in articles ] else: group.articles = articles group.save() return group
def addGroup(request): if request.method == 'GET': return HttpResponse(render(request, 'add_group.html')) elif request.method == 'POST': name = request.POST.get('name') start_date = request.POST.get('startDate') max_students = request.POST.get('maxStudents') group = Group() group.name = name group.start_date = start_date group.max_students = max_students group.save() return redirect('/groups/all')
def handle(self, **options): group_id = options['group_id'] if group_id: group_id = int(group_id) if not group_id: raise Exception("--group_id is required!") group_src = Group.objects.get(id=group_id) group_dst = Group() group_dst.__dict__ = copy.deepcopy(group_src.__dict__) group_dst.id = None group_dst.name += " copy" group_dst.save() for student_src in group_src.students.all(): print "Copy student {0}".format(student_src.get_full_name().encode("utf-8")) group_dst.students.add(student_src)
def handle(self, **options): group_id = options['group_id'] if group_id: group_id = int(group_id) if not group_id: raise Exception("--group_id is required!") group_src = Group.objects.get(id=group_id) group_dst = Group() group_dst.__dict__ = copy.deepcopy(group_src.__dict__) group_dst.id = None group_dst.name += " copy" group_dst.save() for student_src in group_src.students.all(): print "Copy student {0}".format( student_src.get_full_name().encode("utf-8")) group_dst.students.add(student_src)
def group(request): '''Creates a view of group to add a new group reading the user posted data.''' groups = Group.objects.all() if request.method == 'POST': form = GroupForm(request.POST) if form.is_valid(): group_code = form.cleaned_data['group_code'] name = form.cleaned_data['name'] description = form.cleaned_data['description'] try: group = Group() group.group_code = group_code group.name = name group.description = description group.save() except: pass return HttpResponseRedirect(reverse('index')) else: form = GroupForm() return render(request, 'groups/group.html', {'groups' : groups, 'form' : form} )
def setUp(self): lecture = User(email='*****@*****.**', first_name='John', last_name='Snow', is_student=False, is_lecture=True) lecture2 = User(email='*****@*****.**', first_name='Harry', last_name='Potter', is_student=False, is_lecture=True) lecture.set_password("randPassword") lecture.save() lecture2.save() student = User(email='*****@*****.**', first_name='Frodo', last_name='Baggins') student2 = User(email='*****@*****.**', first_name='Titus', last_name='Flavius') student3 = User(email='*****@*****.**', first_name='Philip', last_name='Capet') student.save() student2.save() student3.save() group = Group(course='python', lectures_list=[Lecture(lecture=lecture)], enrolled_list=[Enrolled(student=student, marks_list=[Mark(value=5, max_points=10, for_what="exercise", note=""), Mark(value=2, max_points=10, for_what="quiz", note="")]), Enrolled(student=student2, marks_list=[Mark(value=7, max_points=10, for_what="exercise", note=""), Mark(value=10, max_points=10, for_what="quiz", note="")] )]) group.save()
def create_group(request, pk=None): if pk: group = Group.objects.get(id=pk) else: group = Group() if request.method == "POST": group = GroupModelForm(request.POST, instance=group) if group.is_valid(): created_group = group.save() formset = GroupMemberFormSet(request.POST, instance=created_group) print(formset) if formset.is_valid(): formset.save() print(formset.cleaned_data) return HttpResponseRedirect(reverse('groups')) else: print("formset invalid") print(formset.errors) context = { 'group_form': group, 'formset': formset, } else: print("form invalic") formset = GroupMemberFormSet(instance=Group()) context = { 'group_form': group, 'formset': formset, } else: if pk: group = Group.objects.get(id=pk) group_form = GroupModelForm(instance=group) else: group = Group() group_form = GroupModelForm() formset = GroupMemberFormSet(instance=group) context = { 'group_form': group_form, 'formset': formset, } template = loader.get_template('groups/create_update.html') return HttpResponse(template.render(context, request))
def create_group(request): kwargs = simplejson.loads(request.raw_post_data) gr_name = kwargs['name'] is_pub = kwargs['is_public'] reqs_allowed = kwargs['requests_allowed'] existing_group = Group.objects.filter(name=gr_name) if existing_group.count() == 0: try: gr = Group(name=gr_name, is_public=is_pub, requests_allowed=reqs_allowed) gr.save() mship = Membership(user=request.user, group=gr, is_owner=True, is_admin=True) mship.save() response_dict = {'error': None, 'result': 'Group created!'} except: response_dict = unkown_error_dict() else: response_dict = {'error': 'Group name already exists!', 'result': None} return json_http_response(response_dict)
def group_create_personality_based(request, assignment_id): assignment = get_object_or_404(Assignment, id=assignment_id) # students = assignment.discipline.group.profiles.filter(student=True) students = [] for profile in assignment.discipline.group.profiles.all(): if profile.is_student(): students.append(profile) if request.method == 'POST': form = PersonalityBasedGroupForm(len(students), request.POST) if form.is_valid(): if form.cleaned_data['algorithm'] == '1': groups_members = bruteforce_group_formation(students, form.cleaned_data['number']) elif form.cleaned_data['algorithm'] == '2': groups_members = random_best_group_formation(students, form.cleaned_data['number']) else: groups_members = random_group_formation(students, form.cleaned_data['number']) for i in xrange(len(groups_members)): group = Group() group.name = form.cleaned_data['name'] + ' ' + str(i + 1) group.save() assignment.group.add(group) for member in groups_members[i]: group.profiles.add(member) group.profiles.add(assignment.discipline.teacher.profile) return HttpResponseRedirect(reverse("educational:assignment_detail", kwargs={'pk': assignment.pk})) else: form = PersonalityBasedGroupForm(len(students)) return render(request, 'educational/teacher/group_create_personality_based.html', {'form': form})
def group(request): '''Creates a view of group to add a new group reading the user posted data.''' groups = Group.objects.all() if request.method == 'POST': form = GroupForm(request.POST) if form.is_valid(): group_code = form.cleaned_data['group_code'] name = form.cleaned_data['name'] description = form.cleaned_data['description'] try: group = Group() group.group_code = group_code group.name = name group.description = description group.save() except: pass return HttpResponseRedirect(reverse('index')) else: form = GroupForm() return render(request, 'groups/group.html', { 'groups': groups, 'form': form })
def save(self, force_insert=False, force_update=False, using=None, update_fields=None): if not self.pk: if not self.code: self.code = self.name[:15] group = Group(name=self.name) group.save() group.profiles.add(self.teacher.profile) group.save() self.group = group parent_group = Group(name=u'{0} - {1}'.format(self.name, _(u'Guardians'))) parent_group.save() parent_group.profiles.add(self.teacher.profile) parent_group.save() self.parent_group = parent_group self.group.name = self.name self.group.save() self.parent_group.name = u'{0} - {1}'.format(self.name, _(u'Guardians')) self.parent_group.save() super(Discipline, self).save()
# -*- coding: utf-8 -*- import sys, os from django.core.management import setup_environ sys.path.append(os.getcwd()) import settings_copy as settings setup_environ(settings) from groups.models import Group t = int(raw_input('number of groups you want to add:')) import random def get_rand(s): return s[random.randint(0, len(s) - 1)] for i in range(t): g = Group() g.discount = round(random.random(), 2) g.name = get_rand(('Super', 'Normal', 'Group')) + str(random.randint(0, 100)) g.save() print g
def test_class_1(slug): """ main test course: 20 students, TA, some assignments """ crs = CourseOffering.objects.get(slug=slug) crs.set_labtut(True) crs.set_url("http://www.cs.sfu.ca/CC/165/common/") crs.set_taemail("*****@*****.**") crs.save() for i in range(10): lab = "D1%02i" % (random.randint(1, 4)) p = Person.objects.get(userid="0aaa%i" % (i)) if Member.objects.filter(person=p, offering=crs, role="STUD"): # randomly added by other student-adder: skip continue m = Member(person=p, offering=crs, role="STUD", credits=3, career="UGRD", added_reason="AUTO", labtut_section=lab) m.save() if not Member.objects.filter( person__userid='ggbaker', offering=crs, role='INST'): Member(person=Person.objects.get(userid='ggbaker'), offering=crs, role='INST').save() # create a TA p = Person(emplid=fake_emplid(), userid="0grad1", last_name="Gradstudent", first_name="Douglas", middle_name="", pref_first_name="Doug") p.save() m = Member(person=p, offering=crs, role="TA", credits=0, career="NONS", added_reason="AUTO", labtut_section=None) m.save() # create example activities crs.activity_set.all().update(deleted=True) a1 = NumericActivity(offering=crs, name="Assignment 1", short_name="A1", status="RLS", due_date=crs.semester.start + datetime.timedelta(days=60), percent=10, group=False, max_grade=10, position=1) a1.set_url("http://www.cs.sfu.ca/CC/165/common/a1") a1.save() a2 = NumericActivity(offering=crs, name="Assignment 2", short_name="A2", status="URLS", due_date=crs.semester.start + datetime.timedelta(days=70), percent=10, group=True, max_grade=20, position=2) a2.save() pr = LetterActivity(offering=crs, name="Project", short_name="Proj", status="URLS", due_date=crs.semester.start + datetime.timedelta(days=80), percent=40, group=True, position=3) pr.save() re = LetterActivity(offering=crs, name="Report", short_name="Rep", status="URLS", due_date=crs.semester.start + datetime.timedelta(days=81), percent=10, group=False, position=4) re.save() ex = NumericActivity(offering=crs, name="Final Exam", short_name="Exam", status="URLS", due_date=None, percent=30, group=False, max_grade=90, position=5) ex.save() to = CalNumericActivity(offering=crs, name="Final Percent", short_name="Perc", status="INVI", due_date=None, percent=0, group=False, max_grade=100, formula="[[activitytotal]]", position=6) to.save() to = CalLetterActivity(offering=crs, name="Letter Grade", short_name="Letter", status="INVI", due_date=None, percent=0, group=False, numeric_activity=to, position=6) to.save() # make A1 submittable and markable s = CodeComponent(activity=a1, title="Code File", description="The code you're submitting.", allowed=".py,.java") s.save() s = PDFComponent(activity=a1, title="Report", description="Report on what you did.", specified_filename="report.pdf") s.save() m = ActivityComponent( numeric_activity=a1, max_mark=5, title="Part 1", description="Part 1 was done well and seems to work.", position=1) m.save() m = ActivityComponent( numeric_activity=a1, max_mark=5, title="Part 2", description="Part 2 was done well and seems to work.", position=2) m.save() # create some groups g = Group(name="SomeGroup", courseoffering=crs, manager=Member.objects.get(offering=crs, person__userid="0aaa0", role='STUD')) g.save() for userid in ['0aaa0', '0aaa1', '0aaa5', '0aaa8']: gm = GroupMember(group=g, student=Member.objects.get(offering=crs, person__userid=userid), confirmed=True, activity=a2) gm.save() g = Group(name="AnotherGroup", courseoffering=crs, manager=Member.objects.get(offering=crs, person__userid="0aaa4")) g.save() for userid in ['0aaa4', '0aaa6', '0aaa7', '0aaa2']: gm = GroupMember(group=g, student=Member.objects.get(offering=crs, person__userid=userid), confirmed=True, activity=a2) gm.save() gm = GroupMember(group=g, student=Member.objects.get(offering=crs, person__userid=userid), confirmed=True, activity=pr) gm.save()
def submit(request, course_slug): person = get_object_or_404(Person,userid=request.user.username) course = get_object_or_404(CourseOffering, slug = course_slug) member = Member.objects.exclude(role='DROP').get(person=person, offering=course) error_info=None name = request.POST.get('GroupName') if name: name = name[:30] #Check if group has a unique name if Group.objects.filter(name=name,courseoffering=course): error_info="A group named \"%s\" already exists" % (name) messages.add_message(request, messages.ERROR, error_info) return HttpResponseRedirect(reverse('groups.views.groupmanage', kwargs={'course_slug': course_slug})) #Check if the group name is empty, these two checks may need to be moved to forms later. if name == "": error_info = "Group name cannot be empty: please enter a group name." messages.add_message(request, messages.ERROR, error_info) return HttpResponseRedirect(reverse('groups.views.groupmanage', kwargs={'course_slug': course_slug})) else: # find selected activities selected_act = [] activities = Activity.objects.filter(offering=course, group=True, deleted=False) if not is_course_staff_by_slug(request, course_slug): activities = activities.exclude(status='INVI') for activity in activities: activityForm = ActivityForm(request.POST, prefix=activity.slug) if activityForm.is_valid() and activityForm.cleaned_data['selected'] == True: selected_act.append(activity) # no selected activities: fail. if not selected_act: messages.add_message(request, messages.ERROR, "Group not created: no activities selected.") return HttpResponseRedirect(reverse('groups.views.groupmanage', kwargs={'course_slug': course_slug})) #groupForSemesterForm = GroupForSemesterForm(request.POST) #if groupForSemesterForm.is_valid(): # groupForSemester = groupForSemesterForm.cleaned_data['selected'] groupForSemester = False #validate database integrity before saving anything. #If one student is in a group for an activity, he/she cannot be in another group for the same activity. if is_course_student_by_slug(request, course_slug): isStudentCreatedGroup = True studentList = [] studentList.append(member) elif is_course_staff_by_slug(request, course_slug): isStudentCreatedGroup = False studentList = [] students = Member.objects.select_related('person').filter(offering = course, role = 'STUD') for student in students: studentForm = StudentForm(request.POST, prefix = student.person.userid) if studentForm.is_valid() and studentForm.cleaned_data['selected'] == True: studentList.append(student) #Check if students has already in a group if _validateIntegrity(request,isStudentCreatedGroup, groupForSemester, course, studentList, selected_act) == False: return HttpResponseRedirect(reverse('groups.views.groupmanage', kwargs={'course_slug': course_slug})) #No selected members,group creating will fail. if not studentList: messages.add_message(request, messages.ERROR, "Group not created: no members selected.") return HttpResponseRedirect(reverse('groups.views.groupmanage', kwargs={'course_slug': course_slug})) group = Group(name=name, manager=member, courseoffering=course, groupForSemester = groupForSemester) group.save() #LOG EVENT# l = LogEntry(userid=request.user.username, description="created a new group %s for %s." % (group.name, course), related_object=group ) l.save() if is_course_student_by_slug(request, course_slug): for activity in selected_act: groupMember = GroupMember(group=group, student=member, confirmed=True, activity=activity) groupMember.save() #LOG EVENT# l = LogEntry(userid=request.user.username, description="automatically became a group member of %s for activity %s." % (group.name, groupMember.activity), related_object=groupMember ) l.save() messages.add_message(request, messages.SUCCESS, 'Group Created') return HttpResponseRedirect(reverse('groups.views.groupmanage', kwargs={'course_slug': course_slug})) elif is_course_staff_by_slug(request, course_slug): students = Member.objects.select_related('person').filter(offering = course, role = 'STUD') for student in students: studentForm = StudentForm(request.POST, prefix = student.person.userid) if studentForm.is_valid() and studentForm.cleaned_data['selected'] == True: for activity in selected_act: groupMember = GroupMember(group=group, student=student, confirmed=True, activity=activity) groupMember.save() #LOG EVENT# l = LogEntry(userid=request.user.username, description="added %s as a group member to %s for activity %s." % (student.person.userid,group.name, groupMember.activity), related_object=groupMember ) l.save() n = NewsItem(user=student.person, author=member.person, course=group.courseoffering, source_app="group", title="Added to Group", content="You have been added the group %s." % (group.name), url=reverse('groups.views.groupmanage', kwargs={'course_slug':course.slug}) ) n.save() messages.add_message(request, messages.SUCCESS, 'Group Created') return HttpResponseRedirect(reverse('groups.views.view_group', kwargs={'course_slug': course_slug, 'group_slug': group.slug})) else: return HttpResponseForbidden()
def create_test_offering(): """ main test course: interesting data for grades, marking, submission, groups """ from grades.models import Activity, LetterActivity, CalNumericActivity, CalLetterActivity from submission.models import SubmissionComponent from submission.models.code import CodeComponent from submission.models.pdf import PDFComponent from groups.models import Group, GroupMember from marking.models import ActivityComponent crs = CourseOffering.objects.get(slug=TEST_COURSE_SLUG) crs.set_labtut(True) crs.set_url("http://www.cs.sfu.ca/CC/165/common/") crs.set_taemail("*****@*****.**") crs.save() # create example activities a1 = NumericActivity.objects.get(offering=crs, slug='a1') a2 = NumericActivity(offering=crs, name="Assignment 2", short_name="A2", status="URLS", due_date=crs.semester.start + datetime.timedelta(days=70), percent=10, group=True, max_grade=20, position=2) a2.set_url("http://www.cs.sfu.ca/CC/165/common/a2") a2.save() pr = LetterActivity(offering=crs, name="Project", short_name="Proj", status="URLS", due_date=crs.semester.start + datetime.timedelta(days=80), percent=40, group=True, position=3) pr.save() re = LetterActivity(offering=crs, name="Report", short_name="Rep", status="URLS", due_date=crs.semester.start + datetime.timedelta(days=81), percent=10, group=False, position=4) re.save() ex = NumericActivity(offering=crs, name="Final Exam", short_name="Exam", status="URLS", due_date=None, percent=30, group=False, max_grade=90, position=5) ex.save() to = CalNumericActivity(offering=crs, name="Final Percent", short_name="Perc", status="INVI", due_date=None, percent=0, group=False, max_grade=100, formula="[[activitytotal]]", position=6) to.save() to = CalLetterActivity(offering=crs, name="Letter Grade", short_name="Letter", status="INVI", due_date=None, percent=0, group=False, numeric_activity=to, position=6) to.save() # make A1 submittable and markable s = CodeComponent(activity=a1, title=u"Cöde File", description="The code you're submitting.", allowed=".py,.java") s.save() s = PDFComponent(activity=a1, title="Report", description="Report on what you did.", specified_filename="report.pdf") s.save() m = ActivityComponent( numeric_activity=a1, max_mark=5, title=u"Part ➀", description="Part ➀ was done well and seems to work.", position=1, slug='part-1') m.save() m = ActivityComponent( numeric_activity=a1, max_mark=5, title="Part 2", description="Part 2 was done well and seems to work.", position=2) m.save() # create some groups members = list(Member.objects.filter(offering=crs, role='STUD')) random.shuffle(members) m = members.pop() g = Group(name="SomeGroup", courseoffering=crs, manager=m) g.save() for m in [m, members.pop()]: gm = GroupMember(group=g, student=m, confirmed=True, activity=a2) gm.save() m = members.pop() g = Group(name="AnotherGroup", courseoffering=crs, manager=m) g.save() for m in [m, members.pop(), members.pop()]: gm = GroupMember(group=g, student=m, confirmed=True, activity=a2) gm.save() gm = GroupMember(group=g, student=m, confirmed=True, activity=pr) gm.save() return itertools.chain( Activity.objects.all(), NumericActivity.objects.all(), LetterActivity.objects.all(), CalNumericActivity.objects.all(), CalLetterActivity.objects.all(), SubmissionComponent.objects.all(), CodeComponent.objects.all(), PDFComponent.objects.all(), Group.objects.all(), GroupMember.objects.all(), ActivityComponent.objects.all(), )
def test_group_submission_view(self): """ test if group submission can be viewed by group member and non group member """ now = datetime.datetime.now() _, course = create_offering() a1 = NumericActivity(name="Assignment 1", short_name="A1", status="RLS", offering=course, position=2, max_grade=15, due_date=now, group=True) a1.save() a2 = NumericActivity(name="Assignment 2", short_name="A2", status="RLS", offering=course, position=1, max_grade=15, due_date=now, group=True) a2.save() p = Person.objects.get(userid="ggbaker") member = Member(person=p, offering=course, role="INST", career="NONS", added_reason="UNK") member.save() c1 = URL.Component(activity=a1, title="URL Link", position=8) c1.save() c2 = Archive.Component(activity=a1, title="Archive File", position=1, max_size=100000) c2.save() c3 = Code.Component(activity=a1, title="Code File", position=3, max_size=2000, allowed=".py") c3.save() userid1 = "0aaa0" userid2 = "0aaa1" userid3 = "0aaa2" for u in [userid1, userid2, userid3]: p = Person.objects.get(userid=u) m = Member(person=p, offering=course, role="STUD", credits=3, career="UGRD", added_reason="UNK") m.save() m = Member.objects.get(person__userid=userid1, offering=course) g = Group(name="Test Group", manager=m, courseoffering=course) g.save() gm = GroupMember(group=g, student=m, confirmed=True, activity=a1) gm.save() gm = GroupMember(group=g, student=m, confirmed=True, activity=a2) gm.save() m = Member.objects.get(person__userid=userid2, offering=course) gm = GroupMember(group=g, student=m, confirmed=True, activity=a1) gm.save() gm = GroupMember(group=g, student=m, confirmed=True, activity=a2) gm.save() m = Member.objects.get(person__userid=userid3, offering=course) gm = GroupMember(group=g, student=m, confirmed=True, activity=a2) gm.save() client = Client() # login as "0aaa0", member of group : test_group for assignment1 and assgnment2 client.login_user("0aaa0") #submission page for assignment 1 url = reverse('offering:submission:show_components', kwargs={ 'course_slug': course.slug, 'activity_slug': a1.slug }) response = basic_page_tests(self, client, url) self.assertContains( response, "This is a group activity. You will submit on behalf of the group “Test Group”." ) self.assertContains( response, "You haven't made a submission for this component.")
def submit(request, course_slug): person = get_object_or_404(Person, userid=request.user.username) course = get_object_or_404(CourseOffering, slug=course_slug) member = Member.objects.exclude(role='DROP').get(person=person, offering=course) is_staff = is_course_staff_by_slug(request, course_slug) span = course.group_span_activities() error_info = None name = request.POST.get('GroupName') if name: name = name[:30] #Check if group has a unique name if Group.objects.filter(name=name, courseoffering=course): error_info = "A group named \"%s\" already exists" % (name) messages.add_message(request, messages.ERROR, error_info) return HttpResponseRedirect( reverse('offering:groups:groupmanage', kwargs={'course_slug': course_slug})) #Check if the group name is empty, these two checks may need to be moved to forms later. if name == "": error_info = "Group name cannot be empty: please enter a group name." messages.add_message(request, messages.ERROR, error_info) return HttpResponseRedirect( reverse('offering:groups:groupmanage', kwargs={'course_slug': course_slug})) else: # find selected activities selected_act = [] activities = Activity.objects.filter(offering=course, group=True, deleted=False) if not is_staff: activities = activities.exclude(status='INVI') for activity in activities: activityForm = ActivityForm(request.POST, prefix=activity.slug) if activityForm.is_valid( ) and activityForm.cleaned_data['selected'] == True: selected_act.append(activity) # no selected activities: fail. if not selected_act: messages.add_message(request, messages.ERROR, "Group not created: no activities selected.") return HttpResponseRedirect( reverse('offering:groups:groupmanage', kwargs={'course_slug': course_slug})) # check groups_span_activities restriction if it's set if not span and not is_staff and len(selected_act) > 1: # students cannot violate groups_span_activities restriction, but instructors can messages.add_message( request, messages.ERROR, "Group not created: groups cannot last for more than one activity in this course." ) return HttpResponseRedirect( reverse('offering:groups:groupmanage', kwargs={'course_slug': course_slug})) groupForSemester = False #validate database integrity before saving anything. #If one student is in a group for an activity, he/she cannot be in another group for the same activity. if is_course_student_by_slug(request, course_slug): isStudentCreatedGroup = True studentList = [] studentList.append(member) elif is_course_staff_by_slug(request, course_slug): isStudentCreatedGroup = False studentList = [] students = Member.objects.select_related('person').filter( offering=course, role='STUD') for student in students: studentForm = StudentForm(request.POST, prefix=student.person.userid) if studentForm.is_valid( ) and studentForm.cleaned_data['selected'] == True: studentList.append(student) #Check if students has already in a group if _validateIntegrity(request, isStudentCreatedGroup, groupForSemester, course, studentList, selected_act) == False: return HttpResponseRedirect( reverse('offering:groups:groupmanage', kwargs={'course_slug': course_slug})) #No selected members,group creating will fail. if not studentList: messages.add_message(request, messages.ERROR, "Group not created: no members selected.") return HttpResponseRedirect( reverse('offering:groups:groupmanage', kwargs={'course_slug': course_slug})) group = Group(name=name, manager=member, courseoffering=course, groupForSemester=groupForSemester) group.save() #LOG EVENT# l = LogEntry(userid=request.user.username, description="created a new group %s for %s." % (group.name, course), related_object=group) l.save() if is_course_student_by_slug(request, course_slug): for activity in selected_act: groupMember = GroupMember(group=group, student=member, confirmed=True, activity_id=activity.id) groupMember.save() #LOG EVENT# l = LogEntry( userid=request.user.username, description= "automatically became a group member of %s for activity %s." % (group.name, groupMember.activity), related_object=groupMember) l.save() messages.add_message(request, messages.SUCCESS, 'Group Created') return HttpResponseRedirect( reverse('offering:groups:groupmanage', kwargs={'course_slug': course_slug})) elif is_course_staff_by_slug(request, course_slug): students = Member.objects.select_related('person').filter( offering=course, role='STUD') for student in students: studentForm = StudentForm(request.POST, prefix=student.person.userid) if studentForm.is_valid( ) and studentForm.cleaned_data['selected'] == True: for activity in selected_act: groupMember = GroupMember(group=group, student=student, confirmed=True, activity_id=activity.id) groupMember.save() #LOG EVENT# l = LogEntry( userid=request.user.username, description= "added %s as a group member to %s for activity %s." % (student.person.userid, group.name, groupMember.activity), related_object=groupMember) l.save() n = NewsItem(user=student.person, author=member.person, course=group.courseoffering, source_app="group", title="Added to Group", content="You have been added the group %s." % (group.name), url=reverse( 'offering:groups:groupmanage', kwargs={'course_slug': course.slug})) n.save() messages.add_message(request, messages.SUCCESS, 'Group Created') return HttpResponseRedirect( reverse('offering:groups:view_group', kwargs={ 'course_slug': course_slug, 'group_slug': group.slug })) else: return HttpResponseForbidden()
def test_class_1(slug): """ main test course: 20 students, TA, some assignments """ crs = CourseOffering.objects.get(slug=slug) crs.set_labtut(True) crs.set_url("http://www.cs.sfu.ca/CC/165/common/") crs.set_taemail("*****@*****.**") crs.save() for i in range(10): lab = "D1%02i" % (random.randint(1,4)) p = Person.objects.get(userid="0aaa%i"%(i)) if Member.objects.filter(person=p, offering=crs, role="STUD"): # randomly added by other student-adder: skip continue m = Member(person=p, offering=crs, role="STUD", credits=3, career="UGRD", added_reason="AUTO", labtut_section=lab) m.save() if not Member.objects.filter(person__userid='ggbaker', offering=crs, role='INST'): Member(person=Person.objects.get(userid='ggbaker'), offering=crs, role='INST').save() # create a TA p = Person(emplid=fake_emplid(), userid="0grad1", last_name="Gradstudent", first_name="Douglas", middle_name="", pref_first_name="Doug") p.save() m = Member(person=p, offering=crs, role="TA", credits=0, career="NONS", added_reason="AUTO", labtut_section=None) m.save() # create example activities crs.activity_set.all().update(deleted=True) a1 = NumericActivity(offering=crs, name="Assignment 1", short_name="A1", status="RLS", due_date=crs.semester.start + datetime.timedelta(days=60), percent=10, group=False, max_grade=10, position=1) a1.set_url("http://www.cs.sfu.ca/CC/165/common/a1") a1.save() a2 = NumericActivity(offering=crs, name="Assignment 2", short_name="A2", status="URLS", due_date=crs.semester.start + datetime.timedelta(days=70), percent=10, group=True, max_grade=20, position=2) a2.save() pr = LetterActivity(offering=crs, name="Project", short_name="Proj", status="URLS", due_date=crs.semester.start + datetime.timedelta(days=80), percent=40, group=True, position=3) pr.save() re = LetterActivity(offering=crs, name="Report", short_name="Rep", status="URLS", due_date=crs.semester.start + datetime.timedelta(days=81), percent=10, group=False, position=4) re.save() ex = NumericActivity(offering=crs, name="Final Exam", short_name="Exam", status="URLS", due_date=None, percent=30, group=False, max_grade=90, position=5) ex.save() to = CalNumericActivity(offering=crs, name="Final Percent", short_name="Perc", status="INVI", due_date=None, percent=0, group=False, max_grade=100, formula="[[activitytotal]]", position=6) to.save() to = CalLetterActivity(offering=crs, name="Letter Grade", short_name="Letter", status="INVI", due_date=None, percent=0, group=False, numeric_activity=to, position=6) to.save() # make A1 submittable and markable s = CodeComponent(activity=a1, title="Code File", description="The code you're submitting.", allowed=".py,.java") s.save() s = PDFComponent(activity=a1, title="Report", description="Report on what you did.", specified_filename="report.pdf") s.save() m = ActivityComponent(numeric_activity=a1, max_mark=5, title="Part 1", description="Part 1 was done well and seems to work.", position=1) m.save() m = ActivityComponent(numeric_activity=a1, max_mark=5, title="Part 2", description="Part 2 was done well and seems to work.", position=2) m.save() # create some groups g = Group(name="SomeGroup", courseoffering=crs, manager=Member.objects.get(offering=crs, person__userid="0aaa0", role='STUD')) g.save() for userid in ['0aaa0', '0aaa1', '0aaa5', '0aaa8']: gm = GroupMember(group=g, student=Member.objects.get(offering=crs, person__userid=userid), confirmed=True, activity=a2) gm.save() g = Group(name="AnotherGroup", courseoffering=crs, manager=Member.objects.get(offering=crs, person__userid="0aaa4")) g.save() for userid in ['0aaa4', '0aaa6', '0aaa7', '0aaa2']: gm = GroupMember(group=g, student=Member.objects.get(offering=crs, person__userid=userid), confirmed=True, activity=a2) gm.save() gm = GroupMember(group=g, student=Member.objects.get(offering=crs, person__userid=userid), confirmed=True, activity=pr) gm.save()
class TestInterestApi(APITestCase): def setUp(self): self.club = Club(name="NTNUI") self.club.save() self.group = Group(name="NTNUI Fotball", club=self.club) self.group.save() self.user = User.objects.create_superuser("testuser", email="*****@*****.**", password="******") self.user.save() self.interest = Interest(session_id="c00k13M0n5t3r", group=self.group) self.interest.save() self.factory = APIRequestFactory() self.interests = Interest.objects.all() def test_post_interests(self): request = self.factory.post( "/interest/", { "group": self.group.pk, "session_id": "c00k13" }, format="json", HTTP_ORIGIN="localhost:8000", ) response = get_response(request, create=True) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(response.data.keys(), {"id", "session_id", "group", "created"}) def test_post_used_session_id(self): request = self.factory.post( "/interest/", { "group": self.group.pk, "session_id": "c00k13M0n5t3r" }, format="json", HTTP_ORIGIN="localhost:8000", ) response = get_response(request, create=True) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) def test_post_empty_session_id(self): request = self.factory.post( "/interest/", {"group": self.group.pk}, format="json", HTTP_ORIGIN="localhost:8000", ) response = get_response(request, create=True) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) def test_post_empty_club(self): request = self.factory.post( "/interest/", {"session_id": "no_group"}, format="json", HTTP_ORIGIN="localhost:8000", ) response = get_response(request, create=True) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) def test_get_interests_no_auth(self): request = self.factory.get("/interest/") response = get_response(request) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_get_interests_auth(self): request = self.factory.get("/interest/") response = get_response(request, user=self.user) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data.keys(), {"count", "next", "previous", "results"}) self.assertEqual(len(response.data.get("results")), len(self.interests)) self.assertEqual( response.data.get("results"), InterestSerializer(self.interests, many=True).data, ) def test_get_interest_detail_no_auth(self): request = self.factory.get("/interest/") response = get_response(request, interest_id=self.interest.pk) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_get_interest_detail_auth(self): request = self.factory.get("/interest/") response = get_response(request, user=self.user, interest_id=self.interest.pk) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data, InterestSerializer(self.interest).data) def test_get_non_existing_interest(self): request = self.factory.get("/interest/") response = get_response(request, user=self.user, interest_id="99") self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def test_cannot_save_empty_group(self): group = Group(name = '', alias = '', tags = '', description = '') with self.assertRaises(ValidationError): group.save() group.full_clean()
def groups(request): if request.POST: item = Group(name=request.POST['name']) item.save() object_list = Group.objects.all().order_by("name") return render(request, 'groups/index.html', locals())
def create_test_offering(): """ main test course: interesting data for grades, marking, submission, groups """ from grades.models import Activity, LetterActivity, CalNumericActivity, CalLetterActivity from submission.models import SubmissionComponent from submission.models.code import CodeComponent from submission.models.pdf import PDFComponent from groups.models import Group, GroupMember from marking.models import ActivityComponent crs = CourseOffering.objects.get(slug=TEST_COURSE_SLUG) crs.set_labtut(True) crs.set_url("http://www.cs.sfu.ca/CC/165/common/") crs.set_taemail("*****@*****.**") crs.save() # create example activities a1 = NumericActivity.objects.get(offering=crs, slug='a1') a2 = NumericActivity(offering=crs, name="Assignment 2", short_name="A2", status="URLS", due_date=crs.semester.start + datetime.timedelta(days=70), percent=10, group=True, max_grade=20, position=2) a2.set_url("http://www.cs.sfu.ca/CC/165/common/a2") a2.save() pr = LetterActivity(offering=crs, name="Project", short_name="Proj", status="URLS", due_date=crs.semester.start + datetime.timedelta(days=80), percent=40, group=True, position=3) pr.save() re = LetterActivity(offering=crs, name="Report", short_name="Rep", status="URLS", due_date=crs.semester.start + datetime.timedelta(days=81), percent=10, group=False, position=4) re.save() ex = NumericActivity(offering=crs, name="Final Exam", short_name="Exam", status="URLS", due_date=None, percent=30, group=False, max_grade=90, position=5) ex.save() to = CalNumericActivity(offering=crs, name="Final Percent", short_name="Perc", status="INVI", due_date=None, percent=0, group=False, max_grade=100, formula="[[activitytotal]]", position=6) to.save() to = CalLetterActivity(offering=crs, name="Letter Grade", short_name="Letter", status="INVI", due_date=None, percent=0, group=False, numeric_activity=to, position=6) to.save() # make A1 submittable and markable s = CodeComponent(activity=a1, title="Code File", description="The code you're submitting.", allowed=".py,.java") s.save() s = PDFComponent(activity=a1, title="Report", description="Report on what you did.", specified_filename="report.pdf") s.save() m = ActivityComponent(numeric_activity=a1, max_mark=5, title="Part 1", description="Part 1 was done well and seems to work.", position=1) m.save() m = ActivityComponent(numeric_activity=a1, max_mark=5, title="Part 2", description="Part 2 was done well and seems to work.", position=2) m.save() # create some groups members = list(Member.objects.filter(offering=crs, role='STUD')) random.shuffle(members) m = members.pop() g = Group(name="SomeGroup", courseoffering=crs, manager=m) g.save() for m in [m, members.pop()]: gm = GroupMember(group=g, student=m, confirmed=True, activity=a2) gm.save() m = members.pop() g = Group(name="AnotherGroup", courseoffering=crs, manager=m) g.save() for m in [m, members.pop(), members.pop()]: gm = GroupMember(group=g, student=m, confirmed=True, activity=a2) gm.save() gm = GroupMember(group=g, student=m, confirmed=True, activity=pr) gm.save() return itertools.chain( Activity.objects.all(), NumericActivity.objects.all(), LetterActivity.objects.all(), CalNumericActivity.objects.all(), CalLetterActivity.objects.all(), SubmissionComponent.objects.all(), CodeComponent.objects.all(), PDFComponent.objects.all(), Group.objects.all(), GroupMember.objects.all(), ActivityComponent.objects.all(), )