comparison piecrust/data/pagedata.py @ 874:f4608e2e80ce

data: Optimize page data creation. `datetime.strftime` was pretty costly so it's no lazily-computed in some places, and replaced with some better alternative elsewhere.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 15 Jun 2017 07:31:50 -0700
parents 08e02c2a2a1a
children d6d35b2efd04
comparison
equal deleted inserted replaced
873:93ea115027fc 874:f4608e2e80ce
160 super().__init__(page) 160 super().__init__(page)
161 self._ctx = ctx 161 self._ctx = ctx
162 162
163 def _load(self): 163 def _load(self):
164 page = self._page 164 page = self._page
165 set_val = self._setValue
166
165 dt = page.datetime 167 dt = page.datetime
166 for k, v in page.source_metadata.items(): 168 for k, v in page.source_metadata.items():
167 self._setValue(k, v) 169 set_val(k, v)
168 self._setValue('url', self._page.getUri(self._ctx.sub_num)) 170 set_val('url', page.getUri(self._ctx.sub_num))
169 self._setValue('timestamp', time.mktime(dt.timetuple())) 171 set_val('timestamp', time.mktime(dt.timetuple()))
170 self._setValue('datetime', { 172 set_val('datetime', {
171 'year': dt.year, 'month': dt.month, 'day': dt.day, 173 'year': dt.year, 'month': dt.month, 'day': dt.day,
172 'hour': dt.hour, 'minute': dt.minute, 'second': dt.second}) 174 'hour': dt.hour, 'minute': dt.minute, 'second': dt.second})
173 date_format = page.app.config.get('site/date_format')
174 if date_format:
175 self._setValue('date', page.datetime.strftime(date_format))
176 175
176 self._mapLoader('date', _load_date)
177
178
179 def _load_date(data, name):
180 page = data._page
181 date_format = page.app.config.get('site/date_format')
182 if date_format:
183 return page.datetime.strftime(date_format)
184 return None