From davisagli at codespeak.net Fri Nov 5 05:14:28 2010 From: davisagli at codespeak.net (davisagli at codespeak.net) Date: Fri, 5 Nov 2010 05:14:28 +0100 (CET) Subject: [kupu-checkins] r78714 - kupu/branch/plone-plip9938-output-filters/kupu/plone/tests Message-ID: <20101105041428.14AC6282BD4@codespeak.net> Author: davisagli Date: Fri Nov 5 05:14:26 2010 New Revision: 78714 Modified: kupu/branch/plone-plip9938-output-filters/kupu/plone/tests/test_outputfilters.py Log: test fix for Plone 3 Modified: kupu/branch/plone-plip9938-output-filters/kupu/plone/tests/test_outputfilters.py ============================================================================== --- kupu/branch/plone-plip9938-output-filters/kupu/plone/tests/test_outputfilters.py (original) +++ kupu/branch/plone-plip9938-output-filters/kupu/plone/tests/test_outputfilters.py Fri Nov 5 05:14:26 2010 @@ -18,8 +18,7 @@ """ % self.portal.folder.gamma.UID() transformed_text = self.portal.portal_transforms.convertTo( 'text/x-html-safe', text, mimetype='text/html', context=self.portal) - self.assertEqual(""" -
+ self.assertEqual("""
My alt text
My alt text
@@ -30,8 +29,7 @@

This is line 1
-       This is line 2
- """, str(transformed_text)) + This is line 2""", str(transformed_text).strip()) # now turn off the settings and make sure the filters are not applied self.kupu.configure_kupu(captioning=True, linkbyuid=True) From davisagli at codespeak.net Fri Nov 5 06:31:06 2010 From: davisagli at codespeak.net (davisagli at codespeak.net) Date: Fri, 5 Nov 2010 06:31:06 +0100 (CET) Subject: [kupu-checkins] r78715 - kupu/branch/plone-plip9938-output-filters/kupu/plone Message-ID: <20101105053106.46E53282B9D@codespeak.net> Author: davisagli Date: Fri Nov 5 06:31:04 2010 New Revision: 78715 Modified: kupu/branch/plone-plip9938-output-filters/kupu/plone/util.py Log: make sure we leave the outputfilters output policy in place if we're uninstalled Modified: kupu/branch/plone-plip9938-output-filters/kupu/plone/util.py ============================================================================== --- kupu/branch/plone-plip9938-output-filters/kupu/plone/util.py (original) +++ kupu/branch/plone-plip9938-output-filters/kupu/plone/util.py Fri Nov 5 06:31:04 2010 @@ -14,6 +14,7 @@ from plone.outputfilters.setuphandlers import unregister_mimetype from plone.outputfilters.setuphandlers import unregister_transform from plone.outputfilters.setuphandlers import unregister_transform_policy +from plone.outputfilters.setuphandlers import register_transform_policy # trying to get rid of some deprecation warnings in a # backwards compatible way @@ -95,6 +96,7 @@ unregister_transform(self, INVERSE_TRANSFORM) unregister_mimetype(self, MT_CAPTIONED) unregister_transform_policy(self, MT_SAFE) + register_transform_policy(self, "text/x-html-safe", "html_to_plone_outputfilters_html") try: From davisagli at codespeak.net Sat Nov 6 02:41:06 2010 From: davisagli at codespeak.net (davisagli at codespeak.net) Date: Sat, 6 Nov 2010 02:41:06 +0100 (CET) Subject: [kupu-checkins] r78784 - kupu/branch/plone-plip9938-output-filters/kupu/plone Message-ID: <20101106014106.93B82282BEC@codespeak.net> Author: davisagli Date: Sat Nov 6 02:41:03 2010 New Revision: 78784 Modified: kupu/branch/plone-plip9938-output-filters/kupu/plone/html2captioned.py Log: don't break for sites without kupu installed Modified: kupu/branch/plone-plip9938-output-filters/kupu/plone/html2captioned.py ============================================================================== --- kupu/branch/plone-plip9938-output-filters/kupu/plone/html2captioned.py (original) +++ kupu/branch/plone-plip9938-output-filters/kupu/plone/html2captioned.py Sat Nov 6 02:41:03 2010 @@ -139,8 +139,10 @@ @property def available(self): - kupu = getToolByName(getSite(), 'kupu_library_tool') - return kupu.getLinkbyuid() + kupu = getToolByName(getSite(), 'kupu_library_tool', None) + if kupu is not None: + return kupu.getLinkbyuid() + return False class ResolveUidsEnabler(object): @@ -148,8 +150,10 @@ @property def available(self): - kupu = getToolByName(getSite(), 'kupu_library_tool') - return kupu.getCaptioning() + kupu = getToolByName(getSite(), 'kupu_library_tool', None) + if kupu is not None: + return kupu.getCaptioning() + return False ATTR_HREF = ATTR_VALUE % 'href' From davisagli at codespeak.net Sat Nov 6 20:05:26 2010 From: davisagli at codespeak.net (davisagli at codespeak.net) Date: Sat, 6 Nov 2010 20:05:26 +0100 (CET) Subject: [kupu-checkins] r78795 - kupu/branch/plone-plip9938-output-filters/Products.kupu Message-ID: <20101106190526.54726282BDB@codespeak.net> Author: davisagli Date: Sat Nov 6 20:05:22 2010 New Revision: 78795 Modified: kupu/branch/plone-plip9938-output-filters/Products.kupu/setup.py Log: depend on plone.outputfilters Modified: kupu/branch/plone-plip9938-output-filters/Products.kupu/setup.py ============================================================================== --- kupu/branch/plone-plip9938-output-filters/Products.kupu/setup.py (original) +++ kupu/branch/plone-plip9938-output-filters/Products.kupu/setup.py Sat Nov 6 20:05:22 2010 @@ -33,6 +33,7 @@ ), install_requires=[ 'setuptools', + 'plone.outputfilters', 'zope.interface', 'zope.schema', 'zope.i18n', From davisagli at codespeak.net Sat Nov 6 20:06:18 2010 From: davisagli at codespeak.net (davisagli at codespeak.net) Date: Sat, 6 Nov 2010 20:06:18 +0100 (CET) Subject: [kupu-checkins] r78796 - in kupu/branch/plone-plip9938-output-filters/kupu/plone: . kupu_plone_layer Message-ID: <20101106190618.EFD87282BDB@codespeak.net> Author: davisagli Date: Sat Nov 6 20:06:17 2010 New Revision: 78796 Modified: kupu/branch/plone-plip9938-output-filters/kupu/plone/__init__.py kupu/branch/plone-plip9938-output-filters/kupu/plone/configure.zcml kupu/branch/plone-plip9938-output-filters/kupu/plone/html2captioned.py kupu/branch/plone-plip9938-output-filters/kupu/plone/kupu_config.pt kupu/branch/plone-plip9938-output-filters/kupu/plone/kupu_plone_layer/kupuUploadImage.py kupu/branch/plone-plip9938-output-filters/kupu/plone/plonedrawers.py Log: update to be more independent of the UUID implementation Modified: kupu/branch/plone-plip9938-output-filters/kupu/plone/__init__.py ============================================================================== --- kupu/branch/plone-plip9938-output-filters/kupu/plone/__init__.py (original) +++ kupu/branch/plone-plip9938-output-filters/kupu/plone/__init__.py Sat Nov 6 20:06:17 2010 @@ -15,6 +15,7 @@ $Id$ """ +from AccessControl import ModuleSecurityInfo from App.Common import package_home from Products.CMFCore.DirectoryView import registerDirectory from Products.CMFCore import utils @@ -33,6 +34,8 @@ registerDirectory('tests', kupu_globals) def initialize(context): + ModuleSecurityInfo('plone.outputfilters.browser.resolveuid').declarePublic('uuidFor') + try: init = utils.ToolInit("kupu Library Tool", tools=(PloneKupuLibraryTool,), Modified: kupu/branch/plone-plip9938-output-filters/kupu/plone/configure.zcml ============================================================================== --- kupu/branch/plone-plip9938-output-filters/kupu/plone/configure.zcml (original) +++ kupu/branch/plone-plip9938-output-filters/kupu/plone/configure.zcml Sat Nov 6 20:06:17 2010 @@ -7,6 +7,7 @@ + Modified: kupu/branch/plone-plip9938-output-filters/kupu/plone/html2captioned.py ============================================================================== --- kupu/branch/plone-plip9938-output-filters/kupu/plone/html2captioned.py (original) +++ kupu/branch/plone-plip9938-output-filters/kupu/plone/html2captioned.py Sat Nov 6 20:06:17 2010 @@ -28,6 +28,7 @@ from zope.app.component.hooks import getSite from plone.outputfilters import apply_filters from plone.outputfilters.interfaces import IFilter +from plone.outputfilters.browser.resolveuid import uuidToObject, uuidFor from plone.outputfilters.filters.resolveuid_and_caption import IImageCaptioningEnabler from plone.outputfilters.filters.resolveuid_and_caption import IResolveUidsEnabler @@ -111,7 +112,7 @@ If not found then tries to fallback to a possible hook (e.g. so you could resolve uids on another system). """ - target = reference_catalog.lookupObject(uid) + target = uuidToObject(uid) if target is not None: return target hook = getattr(context, 'kupu_resolveuid_hook', None) @@ -141,7 +142,7 @@ def available(self): kupu = getToolByName(getSite(), 'kupu_library_tool', None) if kupu is not None: - return kupu.getLinkbyuid() + return kupu.getCaptioning() return False @@ -152,7 +153,7 @@ def available(self): kupu = getToolByName(getSite(), 'kupu_library_tool', None) if kupu is not None: - return kupu.getCaptioning() + return kupu.getLinkbyuid() return False @@ -178,7 +179,6 @@ self.portal = self.url_tool.getPortalObject() self.portal_base = self.url_tool.getPortalPath() self.portal_base_url = self.portal.absolute_url() - self.prefix_length = len(self.portal_base)+1 self.uid_catalog = getToolByName(tool, 'uid_catalog') self.reference_tool = getToolByName(tool, 'reference_catalog') self.portal_catalog = getToolByName(tool, 'portal_catalog') @@ -243,12 +243,6 @@ for f in self.FIELDS: setattr(self, f, state[f]) -# def clearState(self): -# return -# SESSION = self.tool.REQUEST.SESSION -# if SESSION.has_key('kupu_migrator'): -# del SESSION['kupu_migrator'] - def status(self): s = [ '%s=%s' % (f,getattr(self, f, 'unset')) for f in self.FIELDS ] @@ -323,7 +317,7 @@ self._objects = res = [] for uid in uids: - obj = self.reference_tool.lookupObject(uid) + obj = uuidToObject(uid) if self.portal_type==FRAGMENT_TYPE and obj.portal_type!=FRAGMENT_TYPE: try: fldr = obj.cp_container.titles @@ -396,7 +390,7 @@ info = [] changes = [] try: - objuid = aq_base(object).UID + objuid = uuidFor(aq_base(object)) except: return None # only archetypes objects @@ -448,23 +442,25 @@ if not path.startswith(self.portal_base): return None try: - metadata = self.uid_catalog.getMetadataForUID(path[self.prefix_length:]) + indexdata = self.portal_catalog.getIndexDataForUID(path) except KeyError: return None - return metadata.get('UID', None) + return indexdata.get('UID', None) def UIDfromURL(self, url): """Convert an absolute URL to a UID""" if not url.startswith(self.portal_base_url): return None - path = url[len(self.portal_base_url)+1:] + path = self.portal_base + url[len(self.portal_base_url):] if not path: return None try: - metadata = self.uid_catalog.getMetadataForUID(path) + indexdata = self.portal_catalog.getIndexDataForUID(path) except KeyError: - return None - return metadata.get('UID', None) + return + uid = indexdata.get('UID', None) + if uid: + return uid def brainfromurl(self, url): """convert a url to a catalog brain""" @@ -495,7 +491,7 @@ # TODO: should be able to convert uid to brain without # touching the actual object. - obj = self.reference_tool.lookupObject(uid) + obj = uuidToObject(uid) if obj is not None: newurl = obj.absolute_url() return uid, newurl, tail Modified: kupu/branch/plone-plip9938-output-filters/kupu/plone/kupu_config.pt ============================================================================== --- kupu/branch/plone-plip9938-output-filters/kupu/plone/kupu_config.pt (original) +++ kupu/branch/plone-plip9938-output-filters/kupu/plone/kupu_config.pt Sat Nov 6 20:06:17 2010 @@ -73,8 +73,7 @@
+ tal:attributes="action here/absolute_url">
Link options @@ -94,26 +93,11 @@ so that the links remain valid even if the target object is renamed or moved elsewhere on the site. - - - A portal transform to hide the UIDs from client browsers is - currently operating for the fields: - -
-
- - - If you enable this option a transform to hide UIDs and support image - captioning from client browsers will also be enabled - - (see image captioning documentation). - - If the transform does not enable itself automatically you may - need to update your PortalTransforms product. - - + + A portal transform to hide the UIDs from client browsers is + currently operating for the fields: + +
@@ -133,22 +117,7 @@ Images which are linked using UID based links may be automatically captioned. -
- - If you enable this option a transform to hide UIDs and support image - captioning from client browsers will also be enabled - - (see image captioning documentation). - - If the transform does not enable itself automatically you may - need to update your PortalTransforms product. - -
Fields which could support image captioning:
-
-
- Fields which appear to currently support image captioning:
+
Fields which appear to currently support image captioning:
Fields which use kupu but do not support image captioning:
Modified: kupu/branch/plone-plip9938-output-filters/kupu/plone/kupu_plone_layer/kupuUploadImage.py ============================================================================== --- kupu/branch/plone-plip9938-output-filters/kupu/plone/kupu_plone_layer/kupuUploadImage.py (original) +++ kupu/branch/plone-plip9938-output-filters/kupu/plone/kupu_plone_layer/kupuUploadImage.py Sat Nov 6 20:06:17 2010 @@ -8,6 +8,7 @@ from Products.CMFCore.utils import getToolByName from Products.PythonScripts.standard import html_quote, newline_to_br +from plone.outputfilters.browser.resolveuid import uuidFor request = context.REQUEST RESPONSE = request.RESPONSE @@ -96,8 +97,9 @@ return Error("Could not create %s with %s as id and %s as title!", typename,newid, node_prop_title) obj.reindexObject() -if linkbyuid and hasattr(obj, 'UID'): - url = base+'/resolveuid/%s' % obj.UID() +uuid = uuidFor(obj) +if linkbyuid and uuid: + url = base+'/resolveuid/%s' % uuid else: url = obj.absolute_url() Modified: kupu/branch/plone-plip9938-output-filters/kupu/plone/plonedrawers.py ============================================================================== --- kupu/branch/plone-plip9938-output-filters/kupu/plone/plonedrawers.py (original) +++ kupu/branch/plone-plip9938-output-filters/kupu/plone/plonedrawers.py Sat Nov 6 20:06:17 2010 @@ -31,7 +31,8 @@ def getSiteEncoding(context): tool = getToolByName(context, 'plone_utils') return tool.getSiteEncoding() - + +from plone.outputfilters.browser.resolveuid import uuidToObject, uuidFor import html2captioned try: @@ -154,8 +155,7 @@ UID = tool.REQUEST.get('instance', None) if UID is None: return None - reference_tool = getToolByName(tool, 'reference_catalog') - self._instance = reference_tool.lookupObject(UID) + self._instance = uuidToObject(UID) if self.subObject: return self._instance[self.subObject] @@ -173,7 +173,7 @@ """Convert either an object or a brain into an information dictionary.""" def __init__(self, tool, resource_type, portal): self.url_tool = getToolByName(portal, 'portal_url') - self.uid_catalog = getToolByName(portal, 'uid_catalog', None) + self.portal_catalog = getToolByName(portal, 'portal_catalog', None) self.portal_interface = getToolByName(portal, 'portal_interface', None) self.workflow_tool = getToolByName(portal, 'portal_workflow') self.workflow_states = self.wfTitles() @@ -181,7 +181,6 @@ self.coll_types = tool.getResourceType('collection').portal_types self.anchor_types = tool.getResourceType('containsanchors').portal_types self.portal_base = self.url_tool.getPortalPath() - self.prefix_length = len(self.portal_base)+1 self.resource_type = resource_type self.ttool = getToolByName(portal, 'portal_types') @@ -319,14 +318,10 @@ id = None UID = None try: - if self.portal_interface.objectImplements(obj, - 'Products.Archetypes.interfaces.referenceable.IReferenceable'): - UID = getattr(obj.aq_explicit, 'UID', None) - if UID: - UID = UID() - id = UID - - if not id: + UID = uuidFor(obj.aq_explicit) + if UID: + id = UID + else: id = obj.absolute_url(relative=1) portal_type = getattr(obj, 'portal_type','') @@ -408,13 +403,13 @@ # Path for the uid catalog doesn't have the leading '/' path = brain.getPath() UID = None - if path and self.uid_catalog: + if path and self.portal_catalog: try: - metadata = self.uid_catalog.getMetadataForUID(path[self.prefix_length:]) + indexdata = self.portal_catalog.getIndexDataForUID(path) except KeyError: - metadata = None - if metadata: - UID = metadata.get('UID', None) + indexdata = None + if indexdata: + UID = indexdata.get('UID', None) if UID: id = UID @@ -640,7 +635,7 @@ if match: # src=http://someurl/resolveuid/ uid = match.group(1) - obj = reference_tool.lookupObject(uid) + obj = uuidToObject(uid) elif src and '://' in src: # src=http://someurl/somepath/someobject @@ -661,7 +656,7 @@ else: # src= ... src = src.split(' ') # src is a list of uids. - objects = [ reference_tool.lookupObject(uid) for uid in src ] + objects = [ uuidToObject(uid) for uid in src ] objects = [ o for o in objects if o is not None ] return objects @@ -829,25 +824,6 @@ unsupp = [t+'/'+self.getLabelFromWidget(f.widget) for (t,f,pt) in self._getKupuFields() if not self.canCaption(f) ] return str.join(', ', unsupp) - security.declareProtected("View", "transformIsEnabled") - def transformIsEnabled(self): - """Test whether the output transform is enabled for x-html-safe""" - uid_catalog = getToolByName(self, 'uid_catalog', None) - portal_transforms = getToolByName(self, 'portal_transforms', None) - if not uid_catalog or not portal_transforms: - return False - # Find something, anything which has a UID - content = uid_catalog.searchResults(sort_on='', sort_limit=1) - if not content: - return False - uid = content[0].UID # Get an arbitrary used UID. - link = 'resolveuid/%s' % uid - test = '' % link - txfrm = portal_transforms.convertTo('text/x-html-safe', test, mimetype='text/html', context=self) - if hasattr(txfrm, 'getData'): - txfrm = txfrm.getData() - return txfrm and not link in txfrm - security.declareProtected("View", "isUploadSupported") def isUploadSupported(self, context): """Returns True if we can upload the the current folder.""" @@ -936,7 +912,7 @@ """Convert a list of uids (or a single space or newline separated string) to a list of paths""" - uid_catalog = getToolByName(self, 'uid_catalog') + portal_catalog = getToolByName(self, 'portal_catalog') ppath = getToolByName(self, 'portal_url').getPortalPath()[1:]+'/' if isinstance(value, basestring): @@ -944,7 +920,7 @@ if not value: return [] - brains = uid_catalog.searchResults(UID=value) + brains = portal_catalog.searchResults(UID=value) paths = [ppath+b.getPath() for b in brains] return paths