Author: jmorliaguet Date: Sun Jun 18 21:34:19 2006 New Revision: 3456 Modified: cpsskins/branches/paris-sprint-2006/standard/negotiation/__init__.py cpsskins/branches/paris-sprint-2006/standard/negotiation/engine.py cpsskins/branches/paris-sprint-2006/standard/negotiation/interfaces.py cpsskins/branches/paris-sprint-2006/standard/negotiation/page.py cpsskins/branches/paris-sprint-2006/standard/negotiation/page.zcml cpsskins/branches/paris-sprint-2006/standard/negotiation/perspective.py cpsskins/branches/paris-sprint-2006/standard/negotiation/perspective.zcml cpsskins/branches/paris-sprint-2006/standard/negotiation/theme.py cpsskins/branches/paris-sprint-2006/standard/negotiation/theme.zcml cpsskins/branches/paris-sprint-2006/thememanager.py
Log: - added negotiation schemes for local themes, pages and perspectives Modified: cpsskins/branches/paris-sprint-2006/standard/negotiation/__init__.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/negotiation/__init__.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/negotiation/__init__.py Sun Jun 18 21:34:19 2006 @@ -17,3 +17,11 @@ """ __docformat__ = "reStructuredText" +from zope.deferredimport import defineFrom + +defineFrom('cpsskins.standard.negotiation.interfaces', + 'IQueryParameterNegotiationScheme', 'ICookieNegotiationScheme', + 'ILocalNegotiationScheme', 'IDefaultNegotiationScheme', + 'IContextNegotiationScheme', 'IRequestNegotiationScheme', + 'ILocationNegotiationScheme', 'ISessionNegotiationScheme') + Modified: cpsskins/branches/paris-sprint-2006/standard/negotiation/engine.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/negotiation/engine.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/negotiation/engine.py Sun Jun 18 21:34:19 2006 @@ -20,8 +20,7 @@ from zope.interface import implements from cpsskins.browser.negotiation.scheme import NegotiationScheme -from cpsskins.standard.negotiation.interfaces import \ - IRequestNegotiationScheme +from cpsskins.standard.negotiation import IRequestNegotiationScheme class Request(NegotiationScheme): """Look for an engine name as a request annotation. Modified: cpsskins/branches/paris-sprint-2006/standard/negotiation/interfaces.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/negotiation/interfaces.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/negotiation/interfaces.py Sun Jun 18 21:34:19 2006 @@ -47,3 +47,7 @@ """Contextual negotiation. """ +class ILocationNegotiationScheme(INegotiationScheme): + """Location negotiation. + """ + Modified: cpsskins/branches/paris-sprint-2006/standard/negotiation/page.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/negotiation/page.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/negotiation/page.py Sun Jun 18 21:34:19 2006 @@ -21,12 +21,14 @@ from zope.component import queryUtility from cpsskins.browser.negotiation.scheme import NegotiationScheme -from cpsskins.standard.negotiation.interfaces import ( - IQueryParameterNegotiationScheme, ICookieNegotiationScheme, - ILocalNegotiationScheme, IDefaultNegotiationScheme, - IContextNegotiationScheme) - from cpsskins.elements.interfaces import IThemePage +from cpsskins.standard.negotiation import IQueryParameterNegotiationScheme +from cpsskins.standard.negotiation import ICookieNegotiationScheme +from cpsskins.standard.negotiation import ILocalNegotiationScheme +from cpsskins.standard.negotiation import IDefaultNegotiationScheme +from cpsskins.standard.negotiation import IContextNegotiationScheme +from cpsskins.standard.negotiation import ILocationNegotiationScheme +from cpsskins.utils import getThemeManager class QueryParameter(NegotiationScheme): """Look for a page whose name is passed as a URL query parameter: @@ -77,3 +79,13 @@ return self.context return None +class Location(NegotiationScheme): + """Look for a page among locations + """ + implements(ILocationNegotiationScheme) + + def __call__(self): + context = self.context + tmutil = getThemeManager(context) + return tmutil.getLocation(context, root=u'pages') + Modified: cpsskins/branches/paris-sprint-2006/standard/negotiation/page.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/negotiation/page.zcml (original) +++ cpsskins/branches/paris-sprint-2006/standard/negotiation/page.zcml Sun Jun 18 21:34:19 2006 @@ -14,6 +14,11 @@ /> <scheme + class=".page.Location" + interface=".interfaces.ILocationNegotiationScheme" + /> + + <scheme class=".page.Local" interface=".interfaces.ILocalNegotiationScheme" /> Modified: cpsskins/branches/paris-sprint-2006/standard/negotiation/perspective.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/negotiation/perspective.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/negotiation/perspective.py Sun Jun 18 21:34:19 2006 @@ -21,8 +21,19 @@ from zope.interface import implements from cpsskins.browser.negotiation.scheme import NegotiationScheme -from cpsskins.standard.negotiation.interfaces import \ - ISessionNegotiationScheme +from cpsskins.standard.negotiation import ISessionNegotiationScheme +from cpsskins.standard.negotiation import ILocationNegotiationScheme +from cpsskins.utils import getThemeManager + +class Location(NegotiationScheme): + """Look for a perspective among locations + """ + implements(ILocationNegotiationScheme) + + def __call__(self): + context = self.context + tmutil = getThemeManager(context) + return tmutil.getLocation(context, root=u'perspectives') class Session(NegotiationScheme): """Look for a perspective in the session. Modified: cpsskins/branches/paris-sprint-2006/standard/negotiation/perspective.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/negotiation/perspective.zcml (original) +++ cpsskins/branches/paris-sprint-2006/standard/negotiation/perspective.zcml Sun Jun 18 21:34:19 2006 @@ -8,6 +8,11 @@ interface=".interfaces.ISessionNegotiationScheme" /> + <scheme + class=".perspective.Location" + interface=".interfaces.ILocationNegotiationScheme" + /> + </negotiationchain> </configure> Modified: cpsskins/branches/paris-sprint-2006/standard/negotiation/theme.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/negotiation/theme.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/negotiation/theme.py Sun Jun 18 21:34:19 2006 @@ -21,12 +21,15 @@ from zope.interface import implements from cpsskins.browser.negotiation.scheme import NegotiationScheme -from cpsskins.standard.negotiation.interfaces import ( - IQueryParameterNegotiationScheme, ICookieNegotiationScheme, - ILocalNegotiationScheme, IDefaultNegotiationScheme, - IContextNegotiationScheme) +from cpsskins.standard.negotiation import IQueryParameterNegotiationScheme +from cpsskins.standard.negotiation import ICookieNegotiationScheme +from cpsskins.standard.negotiation import ILocalNegotiationScheme +from cpsskins.standard.negotiation import IDefaultNegotiationScheme +from cpsskins.standard.negotiation import IContextNegotiationScheme +from cpsskins.standard.negotiation import ILocationNegotiationScheme from cpsskins.elements.interfaces import ITheme +from cpsskins.utils import getThemeManager class QueryParameter(NegotiationScheme): """Look for a theme whose name is passed as a URL query parameter: @@ -77,3 +80,13 @@ return self.context return None +class Location(NegotiationScheme): + """Look for a theme among locations + """ + implements(ILocationNegotiationScheme) + + def __call__(self): + context = self.context + tmutil = getThemeManager(context) + return tmutil.getLocation(context, root=u'themes') + Modified: cpsskins/branches/paris-sprint-2006/standard/negotiation/theme.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/negotiation/theme.zcml (original) +++ cpsskins/branches/paris-sprint-2006/standard/negotiation/theme.zcml Sun Jun 18 21:34:19 2006 @@ -19,6 +19,11 @@ /> <scheme + class=".theme.Location" + interface=".interfaces.ILocationNegotiationScheme" + /> + + <scheme class=".theme.Default" interface=".interfaces.IDefaultNegotiationScheme" /> Modified: cpsskins/branches/paris-sprint-2006/thememanager.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/thememanager.py (original) +++ cpsskins/branches/paris-sprint-2006/thememanager.py Sun Jun 18 21:34:19 2006 @@ -19,14 +19,14 @@ import logging +from zope.app.container.btree import BTreeContainer from zope.app.container.interfaces import INameChooser from zope.component import getUtility from zope.component.persistentregistry import PersistentComponents -from zope.traversing.api import getName, getParent from zope.interface import implements, Interface from zope.i18nmessageid import MessageFactory from zope.schema import TextLine -from zope.app.container.btree import BTreeContainer +from zope.traversing.api import getName, getParent, getPath from cpsskins.caching import ImageCache, IImageCache from cpsskins.elements.interfaces import IFormattable @@ -135,8 +135,8 @@ def addPerspective(perspective, id): """Add a perspective to the storage""" - def getLocations(context): - """Return the list of locations in a given context""" + def getLocation(context): + """Return the location in a given context""" class ThemeManagementFolder(BTreeContainer, PersistentComponents): """A theme management utility that can contain multiple . @@ -342,8 +342,10 @@ context=self) ################################################################### - # Location + # Locations ################################################################### - def getLocations(self, context): - raise NotImplementedError + def getLocation(self, context, root=u''): + locations = self.getLocationStorage() + path = getPath(context) + return locations.find(path, root) -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins