diff --git a/ietf/meeting/models.py b/ietf/meeting/models.py index 6a63c36e3..617c04f4c 100644 --- a/ietf/meeting/models.py +++ b/ietf/meeting/models.py @@ -632,11 +632,13 @@ class Schedule(models.Model): # return self.url_edit("") def owner_email(self): - emails = self.owner.email_set.all() - if len(emails)>0: - return emails[0].address - else: - return "noemail" + if not hasattr(self, '_cached_owner_email'): + email = self.owner.email_set.all().order_by('primary').first() + if email: + self._cached_owner_email = email.address + else: + self._cached_owner_email = "noemail" + return self._cached_owner_email @property def visible_token(self): @@ -822,33 +824,38 @@ class SchedTimeSessAssignment(models.Model): return "" def json_url(self): - return "/meeting/%s/agenda/%s/%s/session/%u.json" % (self.schedule.meeting.number, - self.schedule.owner_email(), - self.schedule.name, self.id) + if not hasattr(self, '_cached_json_url'): + self._cached_json_url = "/meeting/%s/agenda/%s/%s/session/%u.json" % ( + self.schedule.meeting.number, + self.schedule.owner_email(), + self.schedule.name, self.id ) + return self._cached_json_url def json_dict(self, host_scheme): - ss = dict() - ss['assignment_id'] = self.id - ss['href'] = urljoin(host_scheme, self.json_url()) - ss['timeslot_id'] = self.timeslot.id + if not hasattr(self, '_cached_json_dict'): + ss = dict() + ss['assignment_id'] = self.id + ss['href'] = urljoin(host_scheme, self.json_url()) + ss['timeslot_id'] = self.timeslot.id - efset = self.session.timeslotassignments.filter(schedule=self.schedule).order_by("timeslot__time") - if efset.count() > 1: - # now we know that there is some work to do finding the extendedfrom_id. - # loop through the list of items - previous = None - for efss in efset: - if efss.pk == self.pk: - extendedfrom = previous - break - previous = efss - if extendedfrom is not None: - ss['extendedfrom_id'] = extendedfrom.id + efset = self.session.timeslotassignments.filter(schedule=self.schedule).order_by("timeslot__time") + if efset.count() > 1: + # now we know that there is some work to do finding the extendedfrom_id. + # loop through the list of items + previous = None + for efss in efset: + if efss.pk == self.pk: + extendedfrom = previous + break + previous = efss + if extendedfrom is not None: + ss['extendedfrom_id'] = extendedfrom.id - if self.session: - ss['session_id'] = self.session.id - ss["pinned"] = self.pinned - return ss + if self.session: + ss['session_id'] = self.session.id + ss["pinned"] = self.pinned + self._cached_json_dict = ss + return self._cached_json_dict def slug(self): """Return sensible id string for session, e.g. suitable for use as HTML anchor."""