Manage link integrity in Plone

  Add it to your Download Basket!

 Add it to your Watch List!


Rate it!

What's new in 1.4.6:

  • No more dependencies. [hannosch]
  • Remove hard dependency on Archetypes. [davisagli]
Read full changelog
send us
an update
GPL (GNU General Public License) 
Plone Foundation
ROOT \ Internet \ Plone Extensions is a Plone product that tries to integrate PLIP 125, link integrity checking, into Plone. It is making use of the zope3 event system in order to modify Plone itself as little as possible.


The code handles one of the two use cases of PLIP 125, deleting an item. Whenever an object that is referred to by another one via an or tag is going to be deleted, Plone's regular flow of actions is "interrupted" and a confirmation form is presented to the user. If they then decide to indeed delete the object, the original request will be replayed and this time followed through, thereby breaching link integrity of the site.

This process is implemented independently of how the object is deleted (as long as OFS.ObjectManager's _delObject is used ultimatively) and what request is used to do it. A more detailed — albeit slightly outdated — explanation of how this works can be found in NOTES.txt.

The second use case of PLIP 125, which provides better handling of moved items, is implemented by

Using in a WSGI application using repoze.zope2

If you are deploying Plone using repoze.zope2 in a WSGI pipeline, then the stock LinkIntegrity won't work. To make it work, you need the following:

- repoze.zope2 1.0.2 or later
- ZODB 3.8.2 or later

These two will ensure that the "views on exceptions" functionality, which uses, is available.

Next, make sure that the repoze.retry#retry middleware is used, and that it will handle stock Retry exceptions. With repoze.retry 0.9.3 or later, that is the default. With earlier versions, you can configure it explicitly. For example:

paste.app_factory = repoze.obob.publisher:make_obob
repoze.obob.get_root = repoze.zope2.z2bob:get_root
repoze.obob.initializer = repoze.zope2.z2bob:initialize
repoze.obob.helper_factory = repoze.zope2.z2bob:Zope2ObobHelper
zope.conf = /Users/optilude/Development/Plone/Code/Build/uber/plone3.x-repoze/parts/instance-debug/etc/zope.conf

use = egg:repoze.retry#retry
retryable = ZODB.POSException:ConflictError ZPublisher.Publish:Retry

use = egg:repoze.errorlog#errorlog
path = /__error_log__
keep = 50
ignore =

pipeline =

use = egg:Paste#http
host =
port = 8080
threadpool_workers = 1
threadpool_spawn_if_under = 1

Last updated on July 7th, 2012


#link integrity #PLIP 125 #Plone #link #integrity #management

Add your review!