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:
parent
fa94b93560
commit
de82a244fa
|
@ -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."""
|
||||||
|
|
Loading…
Reference in a new issue