Added some caching to methods which are called very often when showing the meeting schedule edit view.

- Legacy-Id: 12133
This commit is contained in:
Henrik Levkowetz 2016-10-13 18:40:26 +00:00
parent fa94b93560
commit de82a244fa

View file

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