# HG changeset patch # User Christophe de Vienne # Date 1422434815 -3600 # Node ID 1f84295bfe959216eed849fb522f96bed78d3553 # Parent ef74abcf369dd7686fed69772e9cae4dae3e10a9 [webrequest] Lazy-load search_state - The update_search_state function will hit the session data only if __mode is present in the form. - set_search_state keep the same semantics - Direct access to search_state in the session data is changed by an access to the new property. Closes #4875761 diff -r ef74abcf369d -r 1f84295bfe95 web/request.py --- a/web/request.py Thu Mar 12 12:29:25 2015 +0100 +++ b/web/request.py Wed Jan 28 09:46:55 2015 +0100 @@ -155,9 +155,7 @@ #: shared among various components used to publish the request (views, #: controller, application...) self.data = {} - #: search state: 'normal' or 'linksearch' (eg searching for an object - #: to create a relation with another) - self.search_state = ('normal',) + self._search_state = None #: page id, set by htmlheader template self.pageid = None self._set_pageid() @@ -354,21 +352,32 @@ self.session.data.pop(self._msgid, u'') del self._msgid + def _load_search_state(self, searchstate): + if searchstate is None or searchstate == 'normal': + self._search_state = (searchstate or 'normal',) + else: + self._search_state = ('linksearch', searchstate.split(':')) + assert len(self._search_state[-1]) == 4, 'invalid searchstate' + + @property + def search_state(self): + """search state: 'normal' or 'linksearch' (eg searching for an object + to create a relation with another)""" + if self._search_state is None: + searchstate = self.session.data.get('search_state', 'normal') + self._load_search_state(searchstate) + return self._search_state + def update_search_state(self): - """update the current search state""" + """update the current search state if needed""" searchstate = self.form.get('__mode') - if not searchstate: - searchstate = self.session.data.get('search_state', 'normal') - self.set_search_state(searchstate) + if searchstate: + self.set_search_state(searchstate) def set_search_state(self, searchstate): """set a new search state""" - if searchstate is None or searchstate == 'normal': - self.search_state = (searchstate or 'normal',) - else: - self.search_state = ('linksearch', searchstate.split(':')) - assert len(self.search_state[-1]) == 4 self.session.data['search_state'] = searchstate + self._load_search_state(searchstate) def match_search_state(self, rset): """when searching an entity to create a relation, return True if entities in @@ -385,7 +394,7 @@ def update_breadcrumbs(self): """stores the last visisted page in session data""" - searchstate = self.session.data.get('search_state') + searchstate = self.search_state[0] if searchstate == 'normal': breadcrumbs = self.session.data.get('breadcrumbs') if breadcrumbs is None: