def update_energy_usage(): """Update the energy usage from WattDepot server.""" challenge_mgr.init() date = datetime.datetime.today() # workaround the issue that wattdepot might not have the latest data yet. date = date - datetime.timedelta(minutes=5) start_time = date.strftime("%Y-%m-%dT00:00:00") end_time = date.strftime("%Y-%m-%dT%H:%M:%S") s = requests.session() s.params = {'startTime': start_time, 'endTime': end_time} for team in Team.objects.all(): usage = get_energy_usage(s, team.name) if usage: try: latest_usage = EnergyUsage.objects.get(team=team, date=date.date()) except ObjectDoesNotExist: latest_usage = EnergyUsage(team=team, date=date.date()) latest_usage.time = date.time() latest_usage.usage = usage latest_usage.save() print 'team %s energy usage updated at %s.' % (team, date)
def testTeamEnergyGoal(self): """Test energy goal""" profile = self.user.get_profile() points = profile.points() goal_settings = EnergyGoalSetting.objects.filter(team=self.team) if not goal_settings: goal_settings = EnergyGoalSetting(team=self.team, goal_percent_reduction=5, goal_points=20, baseline_method="Fixed", manual_entry=True, manual_entry_time=datetime.time(hour=15), ) goal_settings.save() else: goal_settings = goal_settings[0] goal_baseline = EnergyBaselineDaily( team=self.team, day=datetime.date.today().weekday(), usage=150, ) goal_baseline.save() energy_data = EnergyUsage( team=self.team, date=datetime.date.today(), time=datetime.time(hour=15), usage=100, ) energy_data.save() today = datetime.date.today() resource_goal.check_team_resource_goal("energy", self.team, today) profile = Profile.objects.get(user__username="******") self.assertEqual(profile.points(), points, "User that did not complete the setup process should not be awarded points.") profile.setup_complete = True profile.save() energy_data.usage = 150 energy_data.save() EnergyGoal.objects.filter(team=self.team, date=today).delete() resource_goal.check_team_resource_goal("energy", self.team, today) profile = Profile.objects.get(user__username="******") self.assertEqual(profile.points(), points, "Team that failed the goal should not be awarded any points.") energy_data.usage = 100 energy_data.save() EnergyGoal.objects.filter(team=self.team, date=today).delete() resource_goal.check_team_resource_goal("energy", self.team, today) profile = Profile.objects.get(user__username="******") self.assertEqual(profile.points(), points + goal_settings.goal_points, "User that setup their profile should be awarded points.")
def testEnergy(self): """test Energy.""" date = datetime.date.today() EnergyUsage( team=self.team, date=date, time=datetime.time(hour=15), usage=100, ).save() rank = resource_mgr.resource_team_rank_info(self.team, "energy")["rank"] usage = resource_mgr.team_resource_usage(date=date, team=self.team, resource="energy") self.assertEqual(rank, 1, "The team should be first rank.") self.assertEqual(usage, 100, "The team usage is not correct.")
def setup_resource_usages(self): """remove any resource usage before the competition""" today = datetime.datetime.today() for usage in EnergyUsage.objects.filter(date__lte=today): usage.delete() for usage in WaterUsage.objects.filter(date__lte=today): usage.delete() # add initialize data for energy and water for team in Team.objects.all(): WaterUsage(team=team, date=today.date(), time=datetime.time(15), usage=1000).save() EnergyUsage(team=team, date=today.date(), time=datetime.time(15), usage=1000).save() self.stdout.write("created initial resource usages for all teams.\n")