From b1b9451c1a7a7a8d0109e88df1ac22754127413b Mon Sep 17 00:00:00 2001 From: Kazuhiko Shiozaki <kazuhiko@nexedi.com> Date: Tue, 10 Sep 2013 15:25:54 +0200 Subject: [PATCH] do not store _marker value in cache, especially for the value where loads(dumps(x)) != x. --- product/ERP5Form/PreferenceTool.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/product/ERP5Form/PreferenceTool.py b/product/ERP5Form/PreferenceTool.py index edc34cba8f..2bc38ef635 100644 --- a/product/ERP5Form/PreferenceTool.py +++ b/product/ERP5Form/PreferenceTool.py @@ -66,7 +66,7 @@ class PreferenceMethod(Method): self._preference_cache_id = 'PreferenceTool.CachingMethod.%s' % attribute def __call__(self, instance, default=_marker, *args, **kw): - def _getPreference(*args, **kw): + def _getPreference(default, *args, **kw): # XXX: sql_catalog_id is passed when calling getPreferredArchive # This is inconsistent with regular accessor API, and indicates that # there is a design problem in current archive API. @@ -78,17 +78,14 @@ class PreferenceMethod(Method): # user to mask a non-null global value with a null value. if value not in (_marker, None, '', (), []): return value - return _marker + if default is _marker: + return self._preference_default + return default _getPreference = CachingMethod(_getPreference, id='%s.%s' % (self._preference_cache_id, getSecurityManager().getUser().getId()), cache_factory='erp5_ui_short') - value = _getPreference(*args, **kw) - if value is not _marker: - return value - elif default is _marker: - return self._preference_default - return default + return _getPreference(default, *args, **kw) class PreferenceTool(BaseTool): """ -- 2.30.9