[kupu-checkins] r33452 - in kupu/trunk/kupu/plone: . kupu_plone_layer
duncan at codespeak.net
duncan at codespeak.net
Thu Oct 19 13:09:07 CEST 2006
Author: duncan
Date: Thu Oct 19 13:09:04 2006
New Revision: 33452
Modified:
kupu/trunk/kupu/plone/html2captioned.py
kupu/trunk/kupu/plone/kupu_plone_layer/kupu_migration.xml.pt
Log:
CompositePack HTML fragments need special processing in link checking.
Fixed several instances where links were listed as broken but in fact they weren't.
Bad link output now includes links to all the bad links (in case you don't believe the results).
Modified: kupu/trunk/kupu/plone/html2captioned.py
==============================================================================
--- kupu/trunk/kupu/plone/html2captioned.py (original)
+++ kupu/trunk/kupu/plone/html2captioned.py Thu Oct 19 13:09:04 2006
@@ -14,6 +14,7 @@
import re
from cgi import escape
from urlparse import urlsplit, urljoin, urlunsplit
+from urllib import unquote_plus
from Acquisition import aq_base
__revision__ = '$Id$'
@@ -158,6 +159,7 @@
LINK_PATTERN = re.compile(
r'(?P<prefix>\<(?:img\s[^>]*src|a\s[^>]*href)=(?:"?))(?P<href>(?<=")[^"]*|[^ \/>]*)',
re.IGNORECASE)
+FRAGMENT_TYPE = 'CompositePack Fragments'
class Migration:
FIELDS = ('portal_type', 'typename', 'fieldname',
@@ -247,7 +249,10 @@
def mkQuery(self):
query = {}
if self.portal_type:
- query['portal_type'] = self.portal_type
+ if self.portal_type==FRAGMENT_TYPE:
+ query['portal_type'] = 'Navigation Page'
+ else:
+ query['portal_type'] = self.portal_type
if self.paths:
query['path'] = self.paths
query['Language'] = 'all'
@@ -312,9 +317,20 @@
self._objects = res = []
for uid in uids:
obj = self.reference_tool.lookupObject(uid)
- objinfo = self.object_check(obj)
- if objinfo:
- res.append(objinfo)
+ if self.portal_type==FRAGMENT_TYPE:
+ try:
+ fldr = obj.cp_container.titles
+ except:
+ continue
+ else:
+ for o in fldr.objectValues([FRAGMENT_TYPE]):
+ objinfo = self.object_check(o)
+ if objinfo:
+ res.append(objinfo)
+ else:
+ objinfo = self.object_check(obj)
+ if objinfo:
+ res.append(objinfo)
self._continue = True
return True
@@ -332,7 +348,8 @@
if self.action=='check':
if classification=='bad':
- info.append(link)
+ abslink = urljoin(base, link)
+ info.append({'text':link, 'url':abslink})
elif self.action=='touid':
if classification=='internal':
if uid and uid==objuid:
@@ -359,18 +376,22 @@
except:
return None # only archetypes objects
- base = object.absolute_url()
- if getattr(object.aq_explicit, 'isPrincipiaFolderish', 0):
+ baseobj = object
+ if object.portal_type==FRAGMENT_TYPE:
+ baseobj = object.aq_parent.aq_parent.aq_parent
+ base = baseobj.absolute_url()
+ if getattr(baseobj.aq_explicit, 'isPrincipiaFolderish', 0):
base += '/'
+
field = object.getField(self.fieldname)
+ if field is None:
+ return None
+
data = field.getEditAccessor(object)()
__traceback_info__ = (object, data)
newdata = LINK_PATTERN.sub(checklink, data)
if data != newdata and self.commit_changes:
mutator = field.getMutator(object)
- print "set field"
- print repr(newdata)
- print mutator
mutator(newdata)
if info or changes:
@@ -380,11 +401,13 @@
title = object.getId()
if not title:
title = '<object>'
+ if object.portal_type == FRAGMENT_TYPE:
+ title = "%s (%s)" % (baseobj.title_or_id(), title)
if data != newdata:
diffs = htmlchanges(data, changes)
else:
diffs = None
- return dict(title=title, uid = objuid, info=info, url=object.absolute_url_path(),
+ return dict(title=title, uid = objuid, info=info, url=baseobj.absolute_url_path(),
diffs=diffs)
return None
@@ -416,6 +439,7 @@
"""convert a url to a catalog brain"""
if not url.startswith(self.portal_base_url):
return None
+ url = unquote_plus(url)
url = self.portal_base + url[len(self.portal_base_url):]
if isinstance(url, unicode):
url = url.encode('utf8') # ExtendedPathIndex can't cope with unicode paths
@@ -457,12 +481,13 @@
"""
if url.startswith('portal_factory'):
url = url[14:]
+
absurl = urljoin(base, url)
if not absurl.startswith(self.portal_base_url):
return 'external', None, url, ''
- absurl = absurl.strip('/')
scheme, netloc, path, query, fragment = urlsplit(absurl)
+ path = path.strip('/')
tail = urlunsplit(('','','',query,fragment))
absurl = urlunsplit((scheme,netloc,path,'',''))
Modified: kupu/trunk/kupu/plone/kupu_plone_layer/kupu_migration.xml.pt
==============================================================================
--- kupu/trunk/kupu/plone/kupu_plone_layer/kupu_migration.xml.pt (original)
+++ kupu/trunk/kupu/plone/kupu_plone_layer/kupu_migration.xml.pt Thu Oct 19 13:09:04 2006
@@ -126,9 +126,14 @@
tal:condition="m/checkboxes"
tal:attributes="value o/uid" checked="checked" />
<a tal:attributes="href o/url" tal:content="o/title" /></div>
- <blockquote tal:condition="o/info|nothing">
- <div tal:repeat="link o/info" tal:content="link" />
- </blockquote>
+ <ul tal:condition="o/info|nothing">
+ <li tal:repeat="link o/info"
+ tal:define="portal_url context/portal_url">
+ <span tal:content="link/text" />
+ <a target="badlink"
+ tal:attributes="href link/url">link</a>
+ </li>
+ </ul>
<div style="padding-left:1em"
tal:content="structure o/diffs"
tal:condition="o/diffs|nothing" />
More information about the kupu-checkins
mailing list