[virtualcommons-svn] commit/vcweb: alllee: refactoring get_individual_points
Status: Beta
Brought to you by:
alllee
From: <com...@bi...> - 2013-04-01 23:43:33
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/2b6608320663/ Changeset: 2b6608320663 User: alllee Date: 2013-04-02 01:43:14 Summary: refactoring get_individual_points Affected #: 2 files diff -r c8a3785e5b8714bb71cbc4ec50d3252c8169e998 -r 2b6608320663b54339f72ce363e6e3c7f67d9f20 vcweb/lighterprints/models.py --- a/vcweb/lighterprints/models.py +++ b/vcweb/lighterprints/models.py @@ -93,6 +93,13 @@ else: return self.filter(level=level) + def total(self, pks=None, field_name='points', **kwargs): + logger.debug("getting total for pks %s", pks) + if not pks: + return 0 + q = self.filter(pk__in=pks,**kwargs).aggregate(total=Sum(field_name)) + return q['total'] + class ActivityManager(TreeManager, PassThroughManager): def upcoming(self, level=1): current_time = datetime.now().time() @@ -597,9 +604,13 @@ messages.append(msg) return messages -def get_individual_points(participant_group_relationship): - today = date.today() - yesterday = today - timedelta(1) +def get_individual_points(participant_group_relationship, end_date=None): + if end_date is None: + end_date = date.today() + start_date = end_date - timedelta(1) prdvs = ParticipantRoundDataValue.objects.filter(participant_group_relationship=participant_group_relationship, - date_created__range=(yesterday, today), parameter=get_activity_performed_parameter()) - return sum(prdv.value.points for prdv in prdvs) + date_created__range=(start_date, end_date), parameter=get_activity_performed_parameter()) + pks = prdvs.values_list('int_value', flat=True) + return Activity.objects.total(pks=pks) + # FIXME: this creates a query per participant round data value because of the design of foreign key data values. + #return sum(prdv.value.points for prdv in prdvs) diff -r c8a3785e5b8714bb71cbc4ec50d3252c8169e998 -r 2b6608320663b54339f72ce363e6e3c7f67d9f20 vcweb/lighterprints/tests.py --- a/vcweb/lighterprints/tests.py +++ b/vcweb/lighterprints/tests.py @@ -55,7 +55,6 @@ def test_daily_points(self): e = self.experiment e.activate() - e.start_round() current_round_data = e.get_round_data() # initialize participant carbon savings for participant_group_relationship in ParticipantGroupRelationship.objects.filter(group__experiment=e): @@ -75,7 +74,6 @@ def test_group_activity(self): e = self.experiment e.activate() - e.start_round() performed_activities = self.perform_activities() for pgr in ParticipantGroupRelationship.objects.filter(group__experiment=e): (group_activity, chat_messages) = get_group_activity(pgr) @@ -85,7 +83,6 @@ def test_group_activity_email(self): e = self.experiment e.activate() - e.start_round() self.perform_activities() for group in e.group_set.all(): messages = create_group_summary_emails(group, 2) @@ -97,7 +94,6 @@ logger.debug("testing do activity view") e = self.experiment e.activate() - e.start_round() # gets all activities with no params activities = get_available_activities() for participant_group_relationship in ParticipantGroupRelationship.objects.filter(group__experiment=e): @@ -138,10 +134,17 @@ self.assertIsNotNone(json_object['viewModel']); class GroupScoreTest(ActivityTest): + def test_individual_points(self): + e = self.experiment + e.activate() + performed_activities = self.perform_activities() + for pgr in e.participant_group_relationships: + self.assertEqual(get_individual_points(pgr), 0) + self.assertTrue(get_individual_points(pgr, end_date=date.today() + timedelta(1)) > 0) + def test_group_score(self): e = self.experiment e.activate() - e.start_round() performed_activities = self.perform_activities() expected_avg_points_per_person = sum([activity.points for activity in performed_activities]) for group in e.group_set.all(): Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |