Skip to main content

check-out/check-in staging for Plone

Project description


iterate is a Plone add-on that allows one to utilize a checkin / checkout procedure for content editing. It integrates in versioning, locking, and utilizes Zope technology like adapters and events to allow for easy customization.


  • versioning utilizing cmf editions

  • locking using zope dav locks

  • pluggable behavior for policies via adapters

  • observable behavior via events

  • specialized handling for archetypes references

  • simple, clean integration with the plone user interface

Use Cases

iterate was designed to solve/enable the following use cases.

Collaborative Document Editing Scenario

Workgroup or person working on a document, the ability to checkout and lock a document allows for a editing cycle, without concern of overwrites, and with an audit trail of versions.

Publish/Modify/Review Cycles on a CMS

A common theme in content management, is publishing a web document, and then needing to revise it but not to change the published web content, till the modified document has undergone a review cycle.

Iterate Lifecycle via the User Interface

iterate integrates with the plone user interface mainly through the actions menu. it adds three conditional actions to the menu.. checkout, checkin, and cancel checkout.

checkout form

on this form a user is asked to which location they wish to checkout the current content, the vocabulary of checkouts is overridable via template customization and is currently the current folder, and the user’s home folder. if the content is not yet versioned, versioning is applied and a new version is created before the checkout is performed. an adapter is utilized to perform the checkout mechanics and an object lifecycle event is generated with the baseline ( origin ) and checkout as attributes. the adapter is responsible for effecting a copy of the content to the checkout location and taking a lock on the origin content. whether this form and action are active on a given piece of content depends on the iterate policy adapter found for this content.

checkouts have some system additional properties, versioning and workflow. they can be versioned independently of the baseline, with only changes from the latest version being merged into the baseline on checkin. they can undergoe separate workflows different from the baseline content. (this last feature requires some customization see docs/workflow.rst ).

checkout status form

visually checkouts are distinguished by an extra document icon (next to sendto, and rss links). clicking on this icon will lead to a checkout status page. which allows for looking at information regarding the checkout itself, such as when the checkout was performed and by whom.

checkin form

a user is asked for a checkin message. on checkin the working copy is merged into the baseline, and a new version of the baseline is created, and the baseline is unlocked.

cancel checkout

a confirmation dialog is displayed, if the checkout is canceled the working copy is destroyed, and the baseline is unlocked.


Kapil Thangavelu <>

Benjamin Saller <>

icons from tortoisesvn project ( )


GPL, see license.txt for details


5.0.5 (2024-02-27)

Bug fixes:

  • Hide the to1000 from the advanced view to create a new plone Site [gforcada] (#121)

5.0.4 (2024-02-21)

Bug fixes:

  • Adapt viewlet styles to Plone 6 [pbauer] (#95)

  • Fix handling of relation-fields for working copies of folderish content. [pbauer] (#118)

  • Use the package-permissions to protect views and toolbar-actions. [pbauer] (#120)

5.0.3 (2024-01-19)


  • Update configuration files. [plone devs] (cfffba8c)

5.0.2 (2023-04-14)


  • Update configuration files. [plone devs] (5623f8b3)

5.0.1 (2023-03-22)

Bug fixes:

  • Use proper action icons in Plone 6. [maurits] (#60)

5.0.0 (2023-03-14)

Breaking changes:

  • Drop support for Plone 5.2, Python 2, Archetypes. Removed check and warning for Version 5 is for Plone 6 only. [maurits] (#1)

4.0.3 (2022-05-14)

Bug fixes:

  • Fix a typo in a a call to reindexObject (#101)

4.0.2 (2021-09-08)

Bug fixes:

  • Fixed issue with Publication behavior fields having different values in the baseline and working copy [ericof] (#97)

4.0.1 (2021-06-29)

Bug fixes:

  • Fix checkin/checkout process for containers, since there was an annotation left to “reset” (pos) on checkout and it broke the sections viewlet [sneridagh] (#93)

4.0.0 (2021-06-25)

New features:

  • Add proper support for DX folderish content [sneridagh] (#92)

3.3.16 (2021-06-14)

Bug fixes:

  • Do not break if some custom code provides an alias for Products.Archetypes (#85)

  • Black and pep8 compliance [sneridagh] (#88)

  • Update relations on Check-In WorkingCopy, by trigger an ObjectModifiedEvent event black and flake8 formatting [2silver] (#89)

3.3.15 (2020-09-07)

Bug fixes:

  • Remove relationship between baseline and working copy, when wc is removed. [frapell] (#77)

  • Fixed deprecation warning for ObjectEvent and IObjectEvent. Moved all code from to to avoid confusion with profiles directory. [maurits] (#3130)

3.3.14 (2020-04-20)

Bug fixes:

  • Minor packaging updates. (#1)

3.3.13 (2019-10-12)

Bug fixes:

  • Explicitly load zcml of dependencies, instead of using includeDependencies. [maurits] (#2952)

3.3.12 (2019-06-27)

Bug fixes:

  • Add missing i18n:translate calls [erral] (#73)

3.3.11 (2019-05-04)

Bug fixes:

  • Made removing of versioning behaviors less strict (named vs dotted). [iham] (#71)

3.3.10 (2018-10-31)

Bug fixes:

  • Avoid test setup error for layer that uses AT when it’s not installed [davisagli]

3.3.9 (2018-09-23)

Bug fixes:

  • Some Python 3 fixes. [pbauer]

3.3.8 (2018-06-18)

Bug fixes:

  • Python 3 compatibility. [pbauer]

  • Only test Archetypes support when Archetypes is installed. [davisagli]

3.3.7 (2018-02-05)

Bug fixes:

  • Use get_installer in general upgrade step. [maurits]

3.3.6 (2017-11-24)

Bug fixes:

  • Fix #54: Cancelling a check out from the original deletes the original. [jensens]

3.3.5 (2017-09-08)

Bug fixes:

  • Do not depend on Products.Archetypes anymore. (part 3) [tomgross]

3.3.4 (2017-08-27)

Bug fixes:

  • Do not depend on Products.Archetypes anymore. (part 2) [tomgross]

  • Remove explicit dependency on ZODB3 [tomgross]

3.3.3 (2017-05-31)

Bug fixes:

  • removed “change portal events” permission [kakshay21]

  • Prevent using queryUtility with name=None [pbauer]

3.3.2 (2017-03-23)

New features:

  • Add each field label for the diff view, fix visual diff link and add break [frapell]

Bug fixes:

  • Change IIterateSettings.checkout_workflow_policy to ASCIILine, as required by Products.CMFWorkflowPolicy.

3.3.1 (2017-02-12)

Bug fixes:

  • Fix test in Zope 4. [davisagli]

3.3.0 (2017-01-02)

New features:

  • Do not depend on Products.Archetypes anymore. If Archetypes is present it still registers the adapters. [jensens]

Bug fixes:

  • Do not use unittest2 anymore. [jensens]

  • Cleanup: isort, zca decorators, etc. [jensens]

  • Some more cleanup. [gforcada]

3.2.3 (2016-11-10)

Bug fixes:

  • Add coding header on python files. [gforcada]

  • Hide uninstall profile from being shown on the Plone install (advanced) form. [gforcada]

3.2.2 (2016-09-14)

Bug fixes:

  • Remove broken references when making checkout. Fixes issue 30. [maurits]

3.2.1 (2016-08-17)

Bug fixes:

  • Use zope.interface decorator. [gforcada]

3.2.0 (2016-05-26)

New features:

  • Added uninstall profile. [maurits]

Bug fixes:

  • Removed deprecated actionicons.xml. [maurits]

3.1.7 (2016-05-15)

Bug fixes:

  • no special case that enables checkout via GET [gotcha]

3.1.6 (2016-04-26)


  • Minimal code cleanup. [gforcada]

3.1.5 (2016-03-03)


  • depends on GenericSetup >= 1.8.2 for using a post_handler on registerProfile [iham]

  • Added naming of default GenericSetup profile as “default”. “” also exists to keep compatibility. [iham]

  • Added deprecation warning to GS profile “” [iham]


  • No need to register as Zope2 Product anymore. [iham]

  • Some minor pep8 cleanup. [iham]

3.1.4 (2015-11-16)


  • Keep the default page setting when checking in a document. [maurits]

3.1.3 (2015-09-27)

  • Fix metadata storage for dexterity checkouts [vangheem]

3.1.2 (2015-09-20)

  • Fixed test to pass with recent change that requires the cmf.ModifyPortalContent permission for the content_status_history page. [maurits]

3.1.1 (2015-08-20)

  • Check if object does not have iterate policy. This fixes iterate causing toolbar errors on portal root. [vangheem]

3.1.0 (2015-07-18)

  • Merge into without the behavior implementation. This is for Plone 5 iterate support. [vangheem]

  • Don’t remove acquisition on object for getToolByName call. [tomgross]

3.0.1 (2015-03-12)

  • Add permission names zcml/z3 style and load permission settings explicit when module is loaded, otherwise default roles where not set correctly. [jensens]

  • Ported tests to [bogdan, tomgross]

3.0.0 (2014-10-23)

2.1.13 (2014-04-16)

  • Fix tests to work with auto csrf. [vangheem]

  • Fix tests for latest plone.protect. [vangheem]

2.1.12 (2014-02-19)

  • Information messages can be hidden from user who checked out content when using a placeful workflow, see: [anthonygerrard]

  • Replaced the “Locked” label with “Warning” [rristow]

2.1.11 (2014-01-27)

  • set lock timeout to MAX_TIMEOUT to avoid baseline unwanted unlock after 10 minutes [parruc]

2.1.10 (2013-03-05)

2.1.9 (2013-01-13)

  • Nothing changed yet.

2.1.8 (2012-10-03)

  • Unmark both the baseline and the working copy on checkin so that dexterity content is properly unmarked. [cewing]

2.1.7 (2012-08-04)

  • Allow browser view templates to be defined and thus overridden in ZCML. [rpatterson]

2.1.6 (2012-06-29)

  • Import events from zope.lifecycleevent. [hannosch]

  • Fix permissions check in parent folder working copy locator. [mitchellrj]

2.1.5 (2012-03-16)

  • Don’t declare IIterateAware as an extension of Archetypes’ IReferenceable, because there are other implementations (such as the one for Dexterity) that don’t use Archetypes references. [davisagli]

  • Make sure permissions of working copy workflow get applied when checking out content, fixes [anthonygerrard]

2.1.4 (2011-11-24)

  • Preserve content contents UIDs when checking a folder back in. This prevents breaking linking by UID in the editor. [rossp]

  • Fix a problem with items added to a checked out folder not being visible after checkin. Fixes #12257. [rossp]

  • Preserve the folder order position from the item originally checked out when checking it back in. [rossp]

  • Allow user of check’d out content to also see the checkout info so a contributor can see that he already has a page checked out easily. [vangheem]

2.1.3 (2011-08-31)

2.1.2 - 2011-06-02

  • Include Products.CMFCore for Plone 4.1 compatibility. [thomasdesvenain, WouterVH]

2.1.1 - 2011-05-13

  • Fixed an issue where our subscriber always expected a coci_created attribute to be available at the policy. [erico_andrei]

  • Add [WouterVH]

  • Viewing a working copy or an original of a checkout does not raise AttributeError anymore. Anyway, we log a warning because a Manager should do something about this. Fixes [glenfant]

2.1 - 2011-02-25

  • No changes.

2.1a2 - 2011-02-14

  • Fixed stale catalog entries appearing for references of merged content. [maurits]

  • Fixed minor test failure for _doAddUser. [maurits]

2.1a1 - 2011-01-18

  • Test Products.CMFPlone version to set default permission, keeping 4.0 compatibility - the next release can be 2.0.1 again. [elro]

  • Add autoinclude entry point. [elro]

  • Update permission defaults for Plone 4.1’s Site Administrator role. [elro]

2.0 - 2010-07-18

  • Fixed the info viewlet to show only the date, and not the time. The issue was introduced because ulocalized_time changed its parameters order. This closes [vincentfretin]

  • Update license to GPL version 2 only. [hannosch]

  • Add id=”content” for the content divs. Else theming with deliverance gets harder. [do3cc]

2.0b2 - 2010-06-03

  • Add naive upgrade step that reinstalls the product. [davisagli]

  • Set action icons via icon_expr on the actions, to avoid deprecation warnings in Plone 4. [davisagli]

2.0b1 - 2010-02-17

  • Declare all package dependencies. [hannosch]

  • Updated to follow recent markup conventions. References #9981 [spliter]

1.2.5 - 2010-01-03

1.2.4 - 2008-12-21

  • Added profiles/default/metadata.xml (version 120: lets leave plenty room in case any profile changes are needed on the 1.1 branch). [maurits]

  • Avoid a test dependency on quick installer. [hannosch]

  • Use our own PloneMessageFactory. We don’t depend on CMFPlone anymore. [hannosch]

  • Specified package dependencies. [hannosch]

  • Made the tests independent of default content. [hannosch]

1.2.3 - 2008-11-14

1.2.2 - 2008-11-13

1.2.1 - 2008-11-11

  • Refine permissions fix from 1.2.0 and make tests pass again:

    Don’t require Modify Portal Content (MPC) permission on the original to check out, which was omitted in the fix for 1.2.0.

    Don’t require MPC on the original for canceling of checkout, only require it on the working copy. [nouri]

  • Fix missing internationalization (#8608 thanks to Vincent Fretin) [encolpe]

1.2.0 - 2008-10-24

  • Allow users without modify content permissions (but with the iterate check out permission) to check out items, and only allow them to check in back again only when they have modify content permissions. [nouri]

1.1.5 - 2008-08-18

1.1.0 - 2008-04-20

  • Fixed dodgy test in that was dependent on semantics of default workflow. [optilude]

  • Fixed i18n markup and updated some messages. This closes [hannosch]

  • Updated i18n:domain in templates to the plone domain. There’s no need for a iterate domain. [hannosch]

  • Use README.txt and HISTORY.txt for the package’s long description. [wichert]

  • Remove unneeded initialize method from __init__ [wichert]

1.0 - 2007-08-17

  • First release

Project details

Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution (59.1 kB view hashes)

Uploaded Source

Built Distribution (67.5 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page