[virtualcommons-svn] commit/vcweb: alllee: adding test coverage + fixing issues with get_daily_carb
Status: Beta
Brought to you by:
alllee
From: Bitbucket <com...@bi...> - 2011-08-08 20:40:20
|
1 new changeset in vcweb: http://bitbucket.org/virtualcommons/vcweb/changeset/2a9f5b4fcc30/ changeset: 2a9f5b4fcc30 user: alllee date: 2011-08-08 22:40:08 summary: adding test coverage + fixing issues with get_daily_carbon_savings, wiring up round_started handler for lighterprints to be signaled when the experiment begins. affected #: 4 files (1.7 KB) --- a/vcweb/forestry/models.py Mon Aug 08 11:48:58 2011 -0700 +++ b/vcweb/forestry/models.py Mon Aug 08 13:40:08 2011 -0700 @@ -111,7 +111,8 @@ # initialize group and participant data values experiment.initialize_parameters( group_parameters=(regrowth_parameter, group_harvest_parameter, resource_level_parameter), - participant_parameters=[harvest_decision_parameter]) + participant_parameters=[harvest_decision_parameter] + ) ''' during a practice or regular round, set up resource levels and participant harvest decision parameters --- a/vcweb/lighterprints/fixtures/initial_data.json Mon Aug 08 11:48:58 2011 -0700 +++ b/vcweb/lighterprints/fixtures/initial_data.json Mon Aug 08 13:40:08 2011 -0700 @@ -37,7 +37,7 @@ "date_created": "2011-07-07 15:13:03", "duration": 0, "experiment_configuration": 4, - "instructions": "Welcome to the sanitation experiment.", + "instructions": "Welcome to the Lighter Footprints experiment.", "last_modified": "2011-07-07 15:13:03", "round_type": "REGULAR", "sequence_number": 1 @@ -46,6 +46,30 @@ "pk": 44 }, { + "fields": { + "name":"activity_performed", + "experiment_metadata": [ "lighterprints" ], + "creator": 1, + "type": "int", + "date_created": "2011-01-01 15:13:03", + "scope": "participant" + }, + "model": "core.parameter", + "pk": 9 + }, + { + "fields": { + "name":"carbon_footprint_level", + "experiment_metadata": [ "lighterprints" ], + "creator": 1, + "type": "int", + "date_created": "2011-01-01 15:13:07", + "scope": "group" + }, + "model": "core.parameter", + "pk": 10 + }, + { "pk": 4, "model": "lighterprints.activity", "fields": { --- a/vcweb/lighterprints/models.py Mon Aug 08 11:48:58 2011 -0700 +++ b/vcweb/lighterprints/models.py Mon Aug 08 13:40:08 2011 -0700 @@ -4,6 +4,7 @@ from vcweb.core.models import (Experiment, ExperimentMetadata, Experimenter, GroupRoundDataValue, ParticipantRoundDataValue, Parameter) from django.dispatch import receiver +from decimal import Decimal import datetime import logging @@ -56,7 +57,6 @@ def get_lighterprints_experiment_metadata(): return ExperimentMetadata.objects.get(namespace='lighterprints') -@simplecache def create_activity_performed_parameter(experimenter=None): if experimenter is None: experimenter = Experimenter.objects.get(pk=1) @@ -69,6 +69,10 @@ def get_activity_performed_parameter(): return Parameter.objects.get(name='activity_performed') +@simplecache +def get_carbon_footprint_level_parameter(): + return Parameter.objects.get(name='carbon_footprint_level') + def get_active_experiments(): return Experiment.objects.filter(experiment_metadata=get_lighterprints_experiment_metadata(), status__in=('ACTIVE', 'ROUND_IN_PROGRESS')) @@ -114,21 +118,37 @@ def update_active_experiments(sender, time=None, **kwargs): for experiment in get_active_experiments(): # calculate total carbon savings and decide if they move on to the next level - for group in experiment.groups.all(): - grdv = GroupRoundDataValue.objects.get(group=group, name='carbon_footprint_level') + for group in experiment.group_set.all(): + grdv = GroupRoundDataValue.objects.get(group=group, parameter__name='carbon_footprint_level') if should_advance_level(group, grdv.value): # advance group level grdv.value = min(grdv.value + 1, 3) grdv.save() +@receiver(signals.round_started) +def round_started_handler(sender, experiment=None, **kwargs): + if sender != get_lighterprints_experiment_metadata().pk: + logger.debug("received invalid signal from sender %s", sender) + return + # FIXME: See if we can push this logic up to core.. + logger.debug("initializing lighter prints") + experiment.initialize_parameters( + group_parameters = [get_carbon_footprint_level_parameter()], + participant_parameters = [get_activity_performed_parameter()] + ) def get_daily_carbon_savings(group): # grab all of yesterday's participant data values today = datetime.date.today() yesterday = today - datetime.timedelta(1) - participant_data_values = group.get_participant_data_values().filter(date_created__gte=yesterday) - participant_data_values.aggregate(total=Sum('value')) - return participant_data_values['total'] + total_savings = Decimal(0.0) + for activity_performed_dv in group.get_participant_data_values(parameter_name='activity_performed').filter(date_created__gte=yesterday): + logger.debug("%s", activity_performed_dv) + activity = Activity.objects.get(pk=activity_performed_dv.value) + total_savings += activity.savings + #total = participant_data_values.aggregate(total=Sum('int_value'))['total'] + logger.debug("total carbon savings: %s", total_savings) + return total_savings def should_advance_level(group, level): --- a/vcweb/lighterprints/tests.py Mon Aug 08 11:48:58 2011 -0700 +++ b/vcweb/lighterprints/tests.py Mon Aug 08 13:40:08 2011 -0700 @@ -31,13 +31,16 @@ e.start_round() current_round_data = e.current_round_data activity_performed_parameter = create_activity_performed_parameter() - logger.debug("activity performed parameter: %s", activity_performed_parameter) # initialize participant carbon savings for participant_group_relationship in ParticipantGroupRelationship.objects.filter(group__experiment=e): for activity in Activity.objects.all(): - activity_performed = participant_group_relationship.participant_data_value_set.create(round_data=current_round_data, parameter=activity_performed_parameter, experiment=e) + activity_performed = participant_group_relationship.participant_data_value_set.get(round_data=current_round_data, parameter=activity_performed_parameter, experiment=e) activity_performed.value = activity.id activity_performed.save() + logger.debug("all activities performed: %s", + participant_group_relationship.participant_data_value_set.all()) + update_active_experiments(self) + class DoActivityTest(BaseTest): def test_view(self): 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. |