@@ -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