Skip to content

Commit de82a24

Browse files
committed
Added some caching to methods which are called very often when showing the meeting schedule edit view.
- Legacy-Id: 12133
1 parent fa94b93 commit de82a24

1 file changed

Lines changed: 37 additions & 30 deletions

File tree

ietf/meeting/models.py

Lines changed: 37 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -632,11 +632,13 @@ def base_url(self):
632632
# return self.url_edit("")
633633

634634
def owner_email(self):
635-
emails = self.owner.email_set.all()
636-
if len(emails)>0:
637-
return emails[0].address
638-
else:
639-
return "noemail"
635+
if not hasattr(self, '_cached_owner_email'):
636+
email = self.owner.email_set.all().order_by('primary').first()
637+
if email:
638+
self._cached_owner_email = email.address
639+
else:
640+
self._cached_owner_email = "noemail"
641+
return self._cached_owner_email
640642

641643
@property
642644
def visible_token(self):
@@ -822,33 +824,38 @@ def slottype(self):
822824
return ""
823825

824826
def json_url(self):
825-
return "/meeting/%s/agenda/%s/%s/session/%u.json" % (self.schedule.meeting.number,
826-
self.schedule.owner_email(),
827-
self.schedule.name, self.id)
827+
if not hasattr(self, '_cached_json_url'):
828+
self._cached_json_url = "/meeting/%s/agenda/%s/%s/session/%u.json" % (
829+
self.schedule.meeting.number,
830+
self.schedule.owner_email(),
831+
self.schedule.name, self.id )
832+
return self._cached_json_url
828833

829834
def json_dict(self, host_scheme):
830-
ss = dict()
831-
ss['assignment_id'] = self.id
832-
ss['href'] = urljoin(host_scheme, self.json_url())
833-
ss['timeslot_id'] = self.timeslot.id
834-
835-
efset = self.session.timeslotassignments.filter(schedule=self.schedule).order_by("timeslot__time")
836-
if efset.count() > 1:
837-
# now we know that there is some work to do finding the extendedfrom_id.
838-
# loop through the list of items
839-
previous = None
840-
for efss in efset:
841-
if efss.pk == self.pk:
842-
extendedfrom = previous
843-
break
844-
previous = efss
845-
if extendedfrom is not None:
846-
ss['extendedfrom_id'] = extendedfrom.id
847-
848-
if self.session:
849-
ss['session_id'] = self.session.id
850-
ss["pinned"] = self.pinned
851-
return ss
835+
if not hasattr(self, '_cached_json_dict'):
836+
ss = dict()
837+
ss['assignment_id'] = self.id
838+
ss['href'] = urljoin(host_scheme, self.json_url())
839+
ss['timeslot_id'] = self.timeslot.id
840+
841+
efset = self.session.timeslotassignments.filter(schedule=self.schedule).order_by("timeslot__time")
842+
if efset.count() > 1:
843+
# now we know that there is some work to do finding the extendedfrom_id.
844+
# loop through the list of items
845+
previous = None
846+
for efss in efset:
847+
if efss.pk == self.pk:
848+
extendedfrom = previous
849+
break
850+
previous = efss
851+
if extendedfrom is not None:
852+
ss['extendedfrom_id'] = extendedfrom.id
853+
854+
if self.session:
855+
ss['session_id'] = self.session.id
856+
ss["pinned"] = self.pinned
857+
self._cached_json_dict = ss
858+
return self._cached_json_dict
852859

853860
def slug(self):
854861
"""Return sensible id string for session, e.g. suitable for use as HTML anchor."""

0 commit comments

Comments
 (0)