Skip to content

Commit cae4ab0

Browse files
committed
Added caching of Document.href() values.
- Legacy-Id: 12210
1 parent 0656d0d commit cae4ab0

1 file changed

Lines changed: 25 additions & 23 deletions

File tree

ietf/doc/models.py

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -103,32 +103,34 @@ def href(self):
103103
# break things all over the place.
104104
# XXX TODO: move all non-URL 'external_url' values into a field which is
105105
# better named, or regularize the filename based on self.name
106-
validator = URLValidator()
107-
try:
108-
validator(self.external_url)
109-
return self.external_url
110-
except ValidationError:
111-
pass
112-
113-
meeting_related = self.meeting_related()
114-
115-
settings_var = settings.DOC_HREFS
116-
if meeting_related:
117-
settings_var = settings.MEETING_DOC_HREFS
118-
119-
try:
120-
format = settings_var[self.type_id]
121-
except KeyError:
122-
if len(self.external_url):
106+
if not hasattr(self, '_cached_href'):
107+
validator = URLValidator()
108+
try:
109+
validator(self.external_url)
123110
return self.external_url
124-
return None
111+
except ValidationError:
112+
pass
125113

126-
meeting = None
127-
if meeting_related:
128-
doc = self.doc if isinstance(self, DocHistory) else self
129-
meeting = doc.session_set.first().meeting
114+
meeting_related = self.meeting_related()
115+
116+
settings_var = settings.DOC_HREFS
117+
if meeting_related:
118+
settings_var = settings.MEETING_DOC_HREFS
130119

131-
return format.format(doc=self,meeting=meeting)
120+
try:
121+
format = settings_var[self.type_id]
122+
except KeyError:
123+
if len(self.external_url):
124+
return self.external_url
125+
return None
126+
127+
meeting = None
128+
if meeting_related:
129+
doc = self.doc if isinstance(self, DocHistory) else self
130+
meeting = doc.session_set.first().meeting
131+
132+
self._cached_href = format.format(doc=self,meeting=meeting)
133+
return self._cached_href
132134

133135
def set_state(self, state):
134136
"""Switch state type implicit in state to state. This just

0 commit comments

Comments
 (0)