[Checkins] SVN: z3c.language/trunk/src/z3c/language/negotiator/
Remove unused sessionLanguage attribute from local
INegotiator implementation
Roger Ineichen
roger at projekt01.ch
Tue Nov 14 23:43:02 EST 2006
Log message for revision 71125:
Remove unused sessionLanguage attribute from local INegotiator implementation
Added more tests
Added generation
Added generation tests
Changed:
U z3c.language/trunk/src/z3c/language/negotiator/README.txt
U z3c.language/trunk/src/z3c/language/negotiator/app.py
U z3c.language/trunk/src/z3c/language/negotiator/browser/views.py
A z3c.language/trunk/src/z3c/language/negotiator/browser.txt
U z3c.language/trunk/src/z3c/language/negotiator/ftests.py
U z3c.language/trunk/src/z3c/language/negotiator/generations/__init__.py
A z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.py
A z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.txt
A z3c.language/trunk/src/z3c/language/negotiator/generations/tests/
A z3c.language/trunk/src/z3c/language/negotiator/generations/tests/__init__.py
A z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs
A z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.index
A z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.lock
A z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.tmp
A z3c.language/trunk/src/z3c/language/negotiator/generations/tests/test_evolve.py
U z3c.language/trunk/src/z3c/language/negotiator/interfaces.py
A z3c.language/trunk/src/z3c/language/negotiator/testing.py
U z3c.language/trunk/src/z3c/language/negotiator/tests.py
U z3c.language/trunk/src/z3c/language/negotiator/vocabulary.py
-=-
Modified: z3c.language/trunk/src/z3c/language/negotiator/README.txt
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/README.txt 2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/README.txt 2006-11-15 04:43:00 UTC (rev 71125)
@@ -2,76 +2,93 @@
Negotiator
==========
-Setup testbrowser for Negotiator functional tests.
+This package provides a local implementation of a INegotiator defined in
+zope.i18n.interfaces. The negotiator implementation offers soem additional
+usefull attributes which are explained later. This INegotiator is also used
+in the z3c.language.switch package.
- >>> from zope.testbrowser.testing import Browser
- >>> browser = Browser()
- >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
- >>> browser.handleErrors = False
+Let's setup a negotiator:
-Start Zope3 an go to the root.
+ >>> from z3c.language.negotiator import app
+ >>> negotiator = app.Negotiator()
- >>> browser.open('http://localhost/@@contents.html')
- >>> browser.url
- 'http://localhost/@@contents.html'
+Such a negotiator provides the following interfaces:
-Add a negotiator.
+ >>> from zope.i18n.interfaces import INegotiator
+ >>> from z3c.language.negotiator.interfaces import INegotiatorManager
- >>> browser.open('http://localhost/++etc++site/default/@@contents.html?type_name=BrowserAdd__z3c.language.negotiator.app.Negotiator')
- >>> browser.url
- 'http://localhost/++etc++site/default/@@contents.html?type_name=BrowserAdd__z3c.language.negotiator.app.Negotiator'
- >>> browser.getControl(name='new_value').value = ''
- >>> browser.getControl('Apply').click()
- >>> browser.url
- 'http://localhost/++etc++site/default/Negotiator/@@registration.html'
+ >>> INegotiator.providedBy(negotiator)
+ True
+ >>>
+ >>> INegotiatorManager.providedBy(negotiator)
+ True
+ >>>
-And register the added negotiator utility.
+By default a negotiator has the following values:
- >>> browser.handleErrors = False
- >>> "This object isn't yet registered." in browser.contents
- True
- >>> browser.getLink('Registration').click()
- >>> browser.getControl('Register this object').click()
- >>> browser.url
- 'http://localhost/++etc++site/default/Negotiator/@@addRegistration.html'
- >>> browser.getControl(
- ... 'Provided interface').value = ['zope.i18n.interfaces.INegotiator']
- >>> browser.getControl('Register As').value = ''
- >>> browser.getControl('Comment').value = 'A local negotiator'
- >>> browser.getControl('Register', index=1).click()
- >>> browser.url
- 'http://localhost/++etc++site/default/Negotiator/@@registration.html'
+ >>> negotiator.policy
+ 'session --> browser --> server'
-Now we see the edit form of the added and registred negotiator instance called
-Negotiator. Set the language lookup policy to 'server'.
+ >>> negotiator.serverLanguage
+ u'en'
- >>> browser.open('http://localhost/++etc++site/default/Negotiator/'
- ... '@@edit.html')
- >>> browser.getControl(name='field.policy').value = ['server']
+ >>> negotiator.offeredLanguages
+ []
-and set a default server language called 'de'.
+If we set a policy with a wrong value, we will get a ValueError:
- >>> browser.getControl(name='field.serverLanguage').value = 'de'
+ >>> negotiator.policy = u'wrong'
+ Traceback (most recent call last):
+ ...
+ ValueError: ('Not a valid policy name.', u'wrong')
-and save this part.
+Let's add the negotiator to the site root:
- >>> browser.getControl(name='UPDATE_SUBMIT').click()
+ >>> rootFolder['negotiator'] = negotiator
-Now we add a session language via the used sequence list widget.
+And register the negotiator as a utility:
- >>> browser.getControl(name='field.sessionLanguages.add').click()
- >>> browser.getControl(name='field.sessionLanguages.0.').value = 'fr'
+ >>> import zope.component
+ >>> sitemanager = zope.component.getSiteManager(rootFolder)
+ >>> sitemanager.registerUtility(negotiator, INegotiator)
-And we also add a offered language.
+After register the negotiator as a utility, we can use the vocabulary and see
+what offered languages are available:
- >>> browser.getControl(name='field.offeredLanguages.add').click()
- >>> browser.getControl(name='field.offeredLanguages.0.').value = 'de'
+ >>> from z3c.language.negotiator import vocabulary
+ >>> vocab = vocabulary.OfferedLanguagesVocabulary(None)
+ >>> vocab
+ <z3c.language.negotiator.vocabulary.OfferedLanguagesVocabulary object at ...>
-And as last, we save the changes.
+ >>> vocab._terms
+ []
- >>> browser.getControl(name='UPDATE_SUBMIT').click()
+Add some offered languages and check the vocabulary again:
-Now check if the set language is german. See the label at the submit button.
+ >>> negotiator.offeredLanguages = [u'de', u'fr']
+ >>> negotiator.offeredLanguages
+ [u'de', u'fr']
- >>> browser.getControl(name='UPDATE_SUBMIT').value
- 'Abschicken'
+Try to get the utility and ceck the offeredLanguages again:
+
+ >>> util = zope.component.getUtility(INegotiator)
+ >>> util.offeredLanguages
+ [u'de', u'fr']
+
+Now check the vocabulary again:
+
+ >>> vocab = vocabulary.OfferedLanguagesVocabulary(None)
+ >>> vocab._terms[0].value
+ u'de'
+ >>> vocab._terms[0].token
+ 'de'
+ >>> vocab._terms[0].title
+ u'de'
+ >>> vocab._terms[1].value
+ u'fr'
+ >>> vocab._terms[1].token
+ 'fr'
+ >>> vocab._terms[1].title
+ u'fr'
+
+See tests.py for more tests
Modified: z3c.language/trunk/src/z3c/language/negotiator/app.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/app.py 2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/app.py 2006-11-15 04:43:00 UTC (rev 71125)
@@ -20,6 +20,7 @@
import persistent
import zope.interface
+from zope.schema.fieldproperty import FieldProperty
from zope.i18n.interfaces import IUserPreferredLanguages
from zope.i18n.interfaces import INegotiator
from zope.i18n.negotiator import negotiator
@@ -59,59 +60,26 @@
zope.interface.implements(INegotiator, INegotiatorManager)
+ serverLanguage = FieldProperty(INegotiatorManager['serverLanguage'])
+ offeredLanguages = FieldProperty(INegotiatorManager['offeredLanguages'])
+
def __init__(self):
self._policy = 'session --> browser --> server'
- self._serverLanguage = None
- self._sessionLanguages = []
- self._offeredLanguages = []
- def _getLanguagePolicy(self):
- """Returns the language policy."""
- return self._policy
+ @apply
+ def policy():
+ def get(self):
+ """Returns the language policy."""
+ return self._policy
+
+ def set(self, policy):
+ """Set the language policy."""
+ if policy not in language_policies:
+ policies = str(language_policies)
+ raise ValueError('Not a valid policy name.', policy)
+ self._policy = policy
+ return property(get, set)
- def _setLanguagePolicy(self, policy):
- """Set the language policy."""
- if policy not in language_policies:
- policies = str(language_policies)
- msg = "Only %s are valide policy names." % policies
- raise ValueError(msg, policy)
- self._policy = policy
-
- policy = property(_getLanguagePolicy, _setLanguagePolicy)
-
- def _getServerLanguage(self):
- """Returns the language for server policy."""
- return self._serverLanguage
-
- def _setServerLanguage(self, language):
- """Set the language for server policy."""
- self._serverLanguage = language
-
- serverLanguage = property(_getServerLanguage, _setServerLanguage)
-
- def _getSessionLanguages(self):
- """Returns the language for server policy."""
- return self._sessionLanguages
-
- def _setSessionLanguages(self, languages):
- """Set the language for server policy."""
- self._sessionLanguages = languages
-
- sessionLanguages = property(_getSessionLanguages, _setSessionLanguages)
-
- # TODO:
- # perhaps we can make a relation to the translation domains
- # and dymanicly find out what language we support in the domains.
- def _getOfferedLanguages(self):
- """Returns the language for server policy."""
- return self._offeredLanguages
-
- def _setOfferedLanguages(self, languages):
- """Set the language for server policy."""
- self._offeredLanguages = languages
-
- offeredLanguages = property(_getOfferedLanguages, _setOfferedLanguages)
-
def getLanguage(self, languages, request):
"""Returns the language dependent on the policy."""
policyList = self._policy.split(' --> ')
@@ -127,13 +95,13 @@
elif policy == 'session':
session = ILanguageSession(request)
lang = session.getLanguage()
- if lang != None:
+ if lang is not None:
return lang
# the language is handled by the browsers language settings
elif policy == 'browser':
lang = negotiator.getLanguage(languages, request)
- if lang != None:
+ if lang is not None:
return lang
return None
Modified: z3c.language/trunk/src/z3c/language/negotiator/browser/views.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/browser/views.py 2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/browser/views.py 2006-11-15 04:43:00 UTC (rev 71125)
@@ -26,7 +26,6 @@
from z3c.language.negotiator import IOfferedLanguages
-
class NegotiatorView(BrowserView):
implements(IOfferedLanguages)
Added: z3c.language/trunk/src/z3c/language/negotiator/browser.txt
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/browser.txt 2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/browser.txt 2006-11-15 04:43:00 UTC (rev 71125)
@@ -0,0 +1,72 @@
+==========
+Negotiator
+==========
+
+Setup testbrowser for Negotiator functional tests.
+
+ >>> from zope.testbrowser.testing import Browser
+ >>> browser = Browser()
+ >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+ >>> browser.handleErrors = False
+
+Start Zope3 an go to the root.
+
+ >>> browser.open('http://localhost/@@contents.html')
+ >>> browser.url
+ 'http://localhost/@@contents.html'
+
+Add a negotiator.
+
+ >>> browser.open('http://localhost/++etc++site/default/@@contents.html?type_name=BrowserAdd__z3c.language.negotiator.app.Negotiator')
+ >>> browser.url
+ 'http://localhost/++etc++site/default/@@contents.html?type_name=BrowserAdd__z3c.language.negotiator.app.Negotiator'
+ >>> browser.getControl(name='new_value').value = ''
+ >>> browser.getControl('Apply').click()
+ >>> browser.url
+ 'http://localhost/++etc++site/default/Negotiator/@@registration.html'
+
+And register the added negotiator utility.
+
+ >>> browser.handleErrors = False
+ >>> "This object isn't yet registered." in browser.contents
+ True
+ >>> browser.getLink('Registration').click()
+ >>> browser.getControl('Register this object').click()
+ >>> browser.url
+ 'http://localhost/++etc++site/default/Negotiator/@@addRegistration.html'
+ >>> browser.getControl(
+ ... 'Provided interface').value = ['zope.i18n.interfaces.INegotiator']
+ >>> browser.getControl('Register As').value = ''
+ >>> browser.getControl('Comment').value = 'A local negotiator'
+ >>> browser.getControl('Register', index=1).click()
+ >>> browser.url
+ 'http://localhost/++etc++site/default/Negotiator/@@registration.html'
+
+Now we see the edit form of the added and registred negotiator instance called
+Negotiator. Set the language lookup policy to 'server'.
+
+ >>> browser.open('http://localhost/++etc++site/default/Negotiator/'
+ ... '@@edit.html')
+ >>> browser.getControl(name='field.policy').value = ['server']
+
+and set a default server language called 'de'.
+
+ >>> browser.getControl(name='field.serverLanguage').value = 'de'
+
+and save this part.
+
+ >>> browser.getControl(name='UPDATE_SUBMIT').click()
+
+Now we also add a offered language.
+
+ >>> browser.getControl(name='field.offeredLanguages.add').click()
+ >>> browser.getControl(name='field.offeredLanguages.0.').value = 'de'
+
+And as last, we save the changes.
+
+ >>> browser.getControl(name='UPDATE_SUBMIT').click()
+
+Now check if the set language is german. See the label at the submit button.
+
+ >>> browser.getControl(name='UPDATE_SUBMIT').value
+ 'Abschicken'
Property changes on: z3c.language/trunk/src/z3c/language/negotiator/browser.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: z3c.language/trunk/src/z3c/language/negotiator/ftests.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/ftests.py 2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/ftests.py 2006-11-15 04:43:00 UTC (rev 71125)
@@ -25,7 +25,7 @@
def test_suite():
return unittest.TestSuite((
functional.FunctionalDocFileSuite(
- "README.txt",
+ "browser.txt",
optionflags=doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE),
))
Modified: z3c.language/trunk/src/z3c/language/negotiator/generations/__init__.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/generations/__init__.py 2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/generations/__init__.py 2006-11-15 04:43:00 UTC (rev 71125)
@@ -14,7 +14,6 @@
"""
$Id$
"""
-
__docformat__ = "reStructuredText"
from zope.app.generations.generations import SchemaManager
@@ -24,5 +23,5 @@
schemaManager = SchemaManager(
minimum_generation=0,
- generation=0,
+ generation=1,
package_name=pkg)
Added: z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.py 2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.py 2006-11-15 04:43:00 UTC (rev 71125)
@@ -0,0 +1,61 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id$
+"""
+__docformat__ = "reStructuredText"
+
+import zope.component
+from zope.i18n.interfaces import INegotiator
+from zope.app.component import hooks
+from zope.app.generations.utility import findObjectsProviding
+from zope.app.zopeappgenerations import getRootFolder
+from zope.app.component.interfaces import ISite
+
+from z3c.language.negotiator import interfaces
+
+
+def evolve(context):
+ """Evolve the ZODB.
+
+ - Remove sessionLanguage from INegotiator utilities
+
+ - Convert _offeredLangauges attribute to offeredLangauges property
+
+ """
+ root = getRootFolder(context)
+
+ for site in findObjectsProviding(root, ISite):
+ originalSite = hooks.getSite()
+ hooks.setSite(site)
+
+ # check if we got the right object
+ obj = zope.component.queryUtility(INegotiator)
+ if interfaces.INegotiatorManager.providedBy(obj):
+
+ # remove old unused ``sessionLanguages`` attr from all objects
+ delattr(obj, '_sessionLanguages')
+
+ # migrate ``_serverLanguage`` to ``serverLanguage``
+ serverLanguage = getattr(obj, '_serverLanguage')
+ setattr(obj, 'serverLanguage', serverLanguage)
+ delattr(obj, '_serverLanguage')
+
+ # migrate ``_offeredLanguages`` to ``offeredLanguages``
+ offeredLanguages = getattr(obj, '_offeredLanguages')
+ setattr(obj, 'offeredLanguages', offeredLanguages)
+ delattr(obj, '_offeredLanguages')
+
+ # set the site back to the original site
+ hooks.setSite(originalSite)
Property changes on: z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.py
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Added: z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.txt
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.txt 2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.txt 2006-11-15 04:43:00 UTC (rev 71125)
@@ -0,0 +1,58 @@
+=========================
+Evolution to generation 1
+=========================
+
+Let's open the original generation 0 database:
+
+ >>> from z3c.language.negotiator.generations import tests
+ >>> db = getDB('generation-0.fs', package=tests)
+ >>> rootFolder = getDBRoot(db)
+
+Let's get the INegotiator from the test site,
+
+ >>> site = rootFolder['site']
+ >>> sm = site.getSiteManager()
+ >>> default = sm['default']
+ >>> negotiator = default['Negotiator']
+
+Check the old negotiator:
+
+ >>> negotiator._policy
+ 'session --> server'
+
+ >>> negotiator._serverLanguage
+ u'de'
+
+ >>> negotiator._offeredLanguages
+ [u'de', u'en', u'fr']
+
+ >>> negotiator._sessionLanguages
+ [u'de', u'en', u'it']
+
+Evolve to generation 1:
+
+ >>> from z3c.testing import ContextStub
+ >>> context = ContextStub(rootFolder, db)
+ >>> from z3c.language.negotiator.generations.evolve1 import evolve
+ >>> evolve(context)
+
+Check the evolved negotiator:
+
+ >>> negotiator.policy
+ 'session --> server'
+
+ >>> negotiator.serverLanguage
+ u'de'
+
+ >>> negotiator._serverLanguage
+ Traceback (most recent call last):
+ ...
+ AttributeError: 'Negotiator' object has no attribute '_serverLanguage'
+
+ >>> negotiator.offeredLanguages
+ [u'de', u'en', u'fr']
+
+ >>> negotiator._sessionLanguages
+ Traceback (most recent call last):
+ ...
+ AttributeError: 'Negotiator' object has no attribute '_sessionLanguages'
Property changes on: z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/__init__.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/generations/tests/__init__.py 2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/generations/tests/__init__.py 2006-11-15 04:43:00 UTC (rev 71125)
@@ -0,0 +1,17 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id$
+"""
+__docformat__ = "reStructuredText"
Property changes on: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/__init__.py
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Added: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs
===================================================================
(Binary files differ)
Property changes on: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.index
===================================================================
(Binary files differ)
Property changes on: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.index
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.lock
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.lock 2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.lock 2006-11-15 04:43:00 UTC (rev 71125)
@@ -0,0 +1 @@
+4508
Added: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.tmp
===================================================================
Added: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/test_evolve.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/generations/tests/test_evolve.py 2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/generations/tests/test_evolve.py 2006-11-15 04:43:00 UTC (rev 71125)
@@ -0,0 +1,43 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id$
+"""
+__docformat__ = "reStructuredText"
+
+import unittest
+import zope.component
+from zope.testing import doctest
+from zope.testing import doctestunit
+from zope.app.testing import setup
+
+from z3c import testing
+
+docTestPaths = ('../evolve1.txt',)
+
+
+def test_suite():
+ suites = []
+ for filename in docTestPaths:
+ suites.append(doctestunit.DocFileSuite(
+ filename,
+ setUp=testing.setUpGeneration, tearDown=testing.tearDownGeneration,
+ globs = {'getDBRoot': testing.getDBRoot,
+ 'getDB': testing.getDB},
+ optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+ ))
+ return unittest.TestSuite(suites)
+
+if __name__ == '__main__':
+ unittest.main(defaultTest='test_suite')
Property changes on: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/test_evolve.py
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Modified: z3c.language/trunk/src/z3c/language/negotiator/interfaces.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/interfaces.py 2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/interfaces.py 2006-11-15 04:43:00 UTC (rev 71125)
@@ -49,23 +49,14 @@
required=True,
)
- sessionLanguages = zope.schema.List(
- title=_(u"Session languages"),
- description=_(u"A list of available languages in session policy."),
- value_type = zope.schema.TextLine(title=_(u"A i18n language."),
- description=_(u"""A i18n language definition string used in
- sessions.""")),
- required=False,
- )
-
offeredLanguages = zope.schema.List(
title=_(u"Offered languages"),
- description=_(u"""A list of offered languages in the skin for the
- user to select."""),
+ description=_(u"A list of offered languages. Can be used for "
+ "let the user to select languages which are offered in "
+ "a skin."""),
value_type = zope.schema.TextLine(title=_(u"A i18n language."),
- description=_(u"""
- A i18n language definition string offerd in the skin for the
- user to select.""")),
+ description=_(u"A i18n locale string.")),
+ default=[],
required=False,
)
@@ -73,11 +64,20 @@
class IOfferedLanguages(zope.interface.Interface):
def getOfferedLanguages():
- """View for listing available (offered) languages."""
+ """A list of available (offered) languages."""
def hasOfferedLanguages():
- """View for to check if we have i18n session support."""
+ """Retruns a boolean for available offered languages."""
+class IOfferedLanguagesVocabulary(IVocabularyTokenized):
+ """A vocabulary of available (offered) languages."""
+
+
class IAvailableTranslationDomainLanguagesVocabulary(IVocabularyTokenized):
- """Available languages."""
+ """Available translation domain languages.
+
+ If you use this, take care on that you use the right translation domain.
+ So you probably have to implement your own vocabulary for your ``correct``
+ translation domain.
+ """
Added: z3c.language/trunk/src/z3c/language/negotiator/testing.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/testing.py 2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/testing.py 2006-11-15 04:43:00 UTC (rev 71125)
@@ -0,0 +1,109 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+
+"""
+$Id$
+"""
+__docformat__ = 'restructuredtext'
+
+import zope.interface
+import zope.component
+from zope.schema import vocabulary
+from zope.i18n.interfaces import IUserPreferredLanguages
+from zope.publisher.interfaces import IRequest
+from zope.app.authentication.tests import TestClientId
+from zope.app.session.interfaces import IClientId
+from zope.app.session.interfaces import IClientIdManager
+from zope.app.session.interfaces import ISessionDataContainer
+from zope.app.session.http import CookieClientIdManager
+from zope.app.session import session
+
+from z3c import testing
+from z3c.language.session.interfaces import ILanguageSession
+from z3c.language.session.app import LanguageSession
+from z3c.language.negotiator import interfaces
+from z3c.language.negotiator.vocabulary import OfferedLanguagesVocabulary
+
+
+###############################################################################
+#
+# Test component
+#
+###############################################################################
+
+class LanguageSessionStub(object):
+
+ zope.interface.implements(ILanguageSession)
+ zope.component.adapts(IUserPreferredLanguages)
+
+ def __init__(self, request):
+ pass
+
+ def getLanguage(self):
+ return 'fr'
+
+
+class EnvStub(object):
+ zope.interface.implements(IUserPreferredLanguages)
+
+ def __init__(self, langs=()):
+ self.langs = langs
+
+ def getPreferredLanguages(self):
+ return self.langs
+
+
+###############################################################################
+#
+# placeful setup
+#
+###############################################################################
+
+from zope.app.testing import setup
+
+def doctestSetUp(test):
+ site = setup.placefulSetUp(site=True)
+ test.globs['rootFolder'] = site
+
+ # session setup
+ zope.component.provideAdapter(TestClientId, (IRequest,), IClientId)
+ zope.component.provideAdapter(LanguageSession, (IRequest,),
+ ILanguageSession)
+ zope.component.provideUtility(CookieClientIdManager(), IClientIdManager)
+ rsdc = session.RAMSessionDataContainer()
+ zope.component.provideUtility(rsdc, ISessionDataContainer, '')
+
+ # register vocabularies
+ vocabulary.setVocabularyRegistry(None)
+ vocabulary._clear()
+ vr = vocabulary.getVocabularyRegistry()
+
+ vr.register('Offered Languages', OfferedLanguagesVocabulary)
+
+def doctestTearDown(test):
+ setup.placefulTearDown()
+ vocabulary._clear()
+
+
+###############################################################################
+#
+# Public base tests
+#
+###############################################################################
+
+class BaseTestINegotiator(testing.InterfaceBaseTest):
+ """Resuable INegotiator base test."""
+
+ def getTestInterface(self):
+ return interfaces.INegotiator
Property changes on: z3c.language/trunk/src/z3c/language/negotiator/testing.py
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Modified: z3c.language/trunk/src/z3c/language/negotiator/tests.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/tests.py 2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/tests.py 2006-11-15 04:43:00 UTC (rev 71125)
@@ -19,56 +19,29 @@
import unittest
-import zope.interface
import zope.component
-from zope.app.testing import ztapi
+from zope.testing import doctest
+from zope.testing.doctestunit import DocFileSuite
-from zope.i18n.interfaces import IUserPreferredLanguages
+from z3c.language.negotiator import testing
+from z3c.language.negotiator import app
+from z3c.language.negotiator import testing
-from z3c.language.session.interfaces import ILanguageSession
-from z3c.language.negotiator.app import Negotiator
+class NegotiatorBaseTest(testing.BaseTestINegotiator):
-class TestLanguageSession(object):
-
- zope.interface.implements(ILanguageSession)
- zope.component.adapts(IUserPreferredLanguages)
+ def getTestClass(self):
+ return app.Negotiator
- def __init__(self, request):
- pass
- def getLanguage(self):
- return 'fr'
-
-
-class Env(object):
- zope.interface.implements(IUserPreferredLanguages)
-
- def __init__(self, langs=()):
- self.langs = langs
-
- def getPreferredLanguages(self):
- return self.langs
-
-
class NegotiatorTest(zope.component.testing.PlacelessSetup,
unittest.TestCase):
def setUp(self):
super(NegotiatorTest, self).setUp()
- self.negotiator = Negotiator()
- zope.component.provideAdapter(TestLanguageSession)
+ self.negotiator = app.Negotiator()
+ zope.component.provideAdapter(testing.LanguageSessionStub)
- def test__getLanguagePolicy(self):
- default = 'session --> browser --> server'
- self.assertEqual(self.negotiator._getLanguagePolicy(), default)
-
- def test__setLanguagePolicy(self):
- self.negotiator.policy = 'server'
- self.assertEqual(self.negotiator.policy, 'server')
- self.assertRaises(
- ValueError, self.negotiator._setLanguagePolicy, 'undefined')
-
def test_policy(self):
default = 'session --> browser --> server'
self.assertEqual(self.negotiator.policy, default)
@@ -76,19 +49,14 @@
self.assertEqual(self.negotiator.policy, 'server')
def test_serverLanguage(self):
- self.assertEqual(self.negotiator.serverLanguage, None)
- self.negotiator.serverLanguage = 'de'
- self.assertEqual(self.negotiator.serverLanguage, 'de')
+ self.assertEqual(self.negotiator.serverLanguage, u'en')
+ self.negotiator.serverLanguage = u'de'
+ self.assertEqual(self.negotiator.serverLanguage, u'de')
- def test_sessionLanguages(self):
- self.assertEqual(self.negotiator.sessionLanguages, [])
- self.negotiator.sessionLanguages = ['de', 'en']
- self.assertEqual(self.negotiator.sessionLanguages, ['de', 'en'])
-
def test_offeredLanguages(self):
self.assertEqual(self.negotiator.offeredLanguages, [])
- self.negotiator.offeredLanguages = ['de', 'en']
- self.assertEqual(self.negotiator.offeredLanguages, ['de', 'en'])
+ self.negotiator.offeredLanguages = [u'de', u'en']
+ self.assertEqual(self.negotiator.offeredLanguages, [u'de', u'en'])
def test_getLanguages(self):
# first set the default policy to 'browser'
@@ -104,14 +72,20 @@
)
for user_pref_langs, obj_langs, expected in _cases:
- env = Env(user_pref_langs)
+ env = testing.EnvStub(user_pref_langs)
self.assertEqual(self.negotiator.getLanguage(obj_langs, env),
expected)
def test_suite():
return unittest.TestSuite((
+ unittest.makeSuite(NegotiatorBaseTest),
unittest.makeSuite(NegotiatorTest),
+ DocFileSuite('README.txt',
+ setUp=testing.doctestSetUp,
+ tearDown=testing.doctestTearDown,
+ optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+ ),
))
if __name__ == '__main__':
Modified: z3c.language/trunk/src/z3c/language/negotiator/vocabulary.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/vocabulary.py 2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/vocabulary.py 2006-11-15 04:43:00 UTC (rev 71125)
@@ -27,15 +27,32 @@
from zope.app.zapi import getUtility
from zope.app.i18n.interfaces import ILocalTranslationDomain
-from z3c.language.negotiator import \
- IAvailableTranslationDomainLanguagesVocabulary
+from z3c.language.negotiator import interfaces
+class OfferedLanguagesVocabulary(SimpleVocabulary):
+ """A vocabulary of available (offered) languages."""
+ implements(interfaces.IOfferedLanguagesVocabulary)
+
+ def __init__(self, context):
+ terms = []
+
+ # collect offered languages
+ negotiator = getUtility(interfaces.INegotiator)
+ languages = negotiator.offeredLanguages
+
+ for lang in languages:
+ terms.append(SimpleTerm(lang, lang, lang))
+
+ terms.sort(lambda lhs, rhs: cmp(lhs.title, rhs.title))
+ super(OfferedLanguagesVocabulary, self).__init__(terms)
+
+
class AvailableTranslationDomainLanguagesVocabulary(SimpleVocabulary):
"""A vocabular of available languages from a translation domain."""
- implements(IAvailableTranslationDomainLanguagesVocabulary)
+ implements(interfaces.IAvailableTranslationDomainLanguagesVocabulary)
def __init__(self, context, domain='zope'):
terms = []
@@ -52,7 +69,6 @@
terms)
-
class AvailableTranslationDomainLanguagesVocabularyForZ3C(
AvailableTranslationDomainLanguagesVocabulary):
"""AvailableTranslationDomainLanguagesVocabulary for z3c domain."""
@@ -62,4 +78,3 @@
def __init__(self, context, ):
super(AvailableTranslationDomainLanguagesVocabulary,self).__init__(
context, domain='z3c')
-
More information about the Checkins
mailing list