from zope.interface import Interface, implements #, Attribute from Products.CMFCore.utils import getToolByName class ICanonicalURL(Interface): """ Interface for canonical URL API providing.""" def getCanonicalURL(): """Get canonical_url property value.""" #def setCanonicalURL(): #"""Set canonical_url property value.""" #def addCanonicalURL(value): #"""Add canonical_url property value""" #def hasCanonicalURL(): #"""Check if portal has canonical_url property""" class CanonicalURL(object): """ CanonicalURL adapter >>> ICanonicalURL.implementedBy(CanonicalURL) True >>> ICanonicalURL(CanonicalURL(object)) is not None True """ implements(ICanonicalURL) def __init__(self, context): """ init """ self.context = context def getCanonicalURL(self): """Get canonical_url property value """ portal = getToolByName(self.context, 'portal_url').getPortalObject() return portal.getProperty('canonical_url',None) #def setCanonicalURL(self, value): #"""Update canonical_url property value #""" #portal = getToolByName(self, 'portal_url').getPortalObject() #portal.manage_changeProperties(canonical_url=str(value)) #def addCanonicalURL(self, value): #"""Add canonical_url property value #""" #portal = getToolByName(self, 'portal_url').getPortalObject() #if not portal.hasProperty('canonical_url'): #portal.manage_delProperties(ids=['canonical_url']) #portal.manage_addProperty('canonical_url', str(value), 'string') #def hasCanonicalURL(self): #"""Check if portal has canonical_url property #""" #portal = getToolByName(self, 'portal_url').getPortalObject() #return portal.hasProperty('canonical_url') # Register adapter def registerAdapter(): from Products.CMFPlone.interfaces import IPloneBaseTool from zope.component import provideAdapter provideAdapter(CanonicalURL, adapts=[IPloneBaseTool,], provides=ICanonicalURL )