[Checkins] SVN: z3c.language.negotiator/trunk/ Cache ONLY for the session setting.
Adam Groszer
agroszer at gmail.com
Fri Oct 1 11:29:16 EDT 2010
Log message for revision 117125:
Cache ONLY for the session setting.
Changed:
U z3c.language.negotiator/trunk/CHANGES.txt
U z3c.language.negotiator/trunk/src/z3c/language/negotiator/app.py
U z3c.language.negotiator/trunk/src/z3c/language/negotiator/tests.py
-=-
Modified: z3c.language.negotiator/trunk/CHANGES.txt
===================================================================
--- z3c.language.negotiator/trunk/CHANGES.txt 2010-10-01 14:44:45 UTC (rev 117124)
+++ z3c.language.negotiator/trunk/CHANGES.txt 2010-10-01 15:29:15 UTC (rev 117125)
@@ -5,7 +5,10 @@
1.1.3 (unreleased)
------------------
-- Nothing changed yet.
+- Cache ONLY for the ``session`` setting. Others turned out as a bad idea.
+ It's pretty straightforward now, we're caching session data lookups because
+ those lookups are sooo slow.
+ Would be better done in z3c.language.session, but there's nothing persistent.
1.1.2 (2010-08-05)
Modified: z3c.language.negotiator/trunk/src/z3c/language/negotiator/app.py
===================================================================
--- z3c.language.negotiator/trunk/src/z3c/language/negotiator/app.py 2010-10-01 14:44:45 UTC (rev 117124)
+++ z3c.language.negotiator/trunk/src/z3c/language/negotiator/app.py 2010-10-01 15:29:15 UTC (rev 117125)
@@ -34,16 +34,16 @@
class Negotiator(persistent.Persistent, contained.Contained):
- """Loacal negotiator implementation.
+ """Local negotiator implementation.
The negotiator let you change the policy, which is a alias
for the lookup mechanism.
'server' -- The server defines the language
- 'session' -- The session defines the language (usefull for testing)
+ 'session' -- The session defines the language (useful for testing)
- 'browser' -- The browser defines the language (usefull for testing)
+ 'browser' -- The browser defines the language (useful for testing)
'browser --> session --> server' -- Left criteria first
@@ -80,7 +80,7 @@
self._policy = policy
return property(get, set)
- def _getLanguage(self, languages, request):
+ def getLanguage(self, languages, request):
"""Returns the language dependent on the policy."""
policyList = self._policy.split(' --> ')
@@ -93,10 +93,21 @@
# the language is handled by a session
elif policy == 'session':
- session = ILanguageSession(request)
- lang = session.getLanguage()
- if lang is not None:
- return lang
+ if self.cacheEnabled:
+ try:
+ cached = request.annotations[LANGUAGE_CACHE_KEY]
+ return cached
+ except KeyError:
+ session = ILanguageSession(request)
+ lang = session.getLanguage()
+ if lang is not None:
+ request.annotations[LANGUAGE_CACHE_KEY] = lang
+ return lang
+ else:
+ session = ILanguageSession(request)
+ lang = session.getLanguage()
+ if lang is not None:
+ return lang
# the language is handled by the browsers language settings
elif policy == 'browser':
@@ -106,30 +117,6 @@
return None
- def getLanguage(self, languages, request):
- if self.cacheEnabled:
- try:
- cached = request.annotations[LANGUAGE_CACHE_KEY]
- if cached in languages:
- return cached
-
- # If the user asked for a specific variation, but we don't
- # have it available we may serve the most generic one,
- # according to the spec (eg: user asks for ('en-us',
- # 'de'), but we don't have 'en-us', then 'en' is preferred
- # to 'de').
- parts = cached.split('-')
- if len(parts) > 1 and parts[0] in languages:
- return parts[0]
-
- #if there's still no match, we have to run through _getLanguage
- except KeyError:
- lang = self._getLanguage(languages, request)
- request.annotations[LANGUAGE_CACHE_KEY] = lang
- return lang
-
- return self._getLanguage(languages, request)
-
def clearCache(self, request):
try:
del request.annotations[LANGUAGE_CACHE_KEY]
Modified: z3c.language.negotiator/trunk/src/z3c/language/negotiator/tests.py
===================================================================
--- z3c.language.negotiator/trunk/src/z3c/language/negotiator/tests.py 2010-10-01 14:44:45 UTC (rev 117124)
+++ z3c.language.negotiator/trunk/src/z3c/language/negotiator/tests.py 2010-10-01 15:29:15 UTC (rev 117125)
@@ -125,7 +125,7 @@
self.negotiator.serverLanguage = u'en'
- self.assertEqual(self.negotiator.getLanguage(('en', 'de'), env), 'de')
+ self.assertEqual(self.negotiator.getLanguage(('en', 'de'), env), 'en')
env = testing.EnvStub(('pt-br','en'))
@@ -133,7 +133,7 @@
self.negotiator.serverLanguage = u'de'
- self.assertEqual(self.negotiator.getLanguage(('en', 'de'), env), 'en')
+ self.assertEqual(self.negotiator.getLanguage(('en', 'de'), env), 'de')
self.negotiator.clearCache(env)
More information about the checkins
mailing list