Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

Provide a simple API to create automatic groups in Plone.

Project Description


This package provide a simple API to create automatic groups in Plone. Automatic groups are users groups that have its member set automaticaly calculated. The AuthenticatedMembers group is an example automatic group, created by Plone.

Creating an automatic group is simple:

  1. Create a class implementing IMembershipCriteria. This class define a criteria to decied whether an user belongs or not to the group.
  2. Call utils.create_auto_group passing an instance of IMembershipCriteria and other info about the group.

Inside the utils module there are other useful functions.

Example usage

Use case: we want to create an automatic group containing all users whose ID begins with an ‘r’ letter.

First we create a class implementing IMembershipCriteria:

>>> from collective.autogroup.interfaces import IMembershipCriteria
>>> from zope.interface import implements
>>> class MembershipCriteria(object):
...     implements(IMembershipCriteria)
...     def __call__(self, principal):
...         return principal.getId()[0] == 'r'

Now we create the auto group using this criteria:

>>> from Products.CMFCore.utils import getToolByName
>>> from collective.autogroup.utils import create_auto_group
>>> group_name = 'r_users'
>>> group_title = 'Members of r_users'
>>> create_auto_group(
...     acl_users=self.portal.acl_users,
...     criteria=MembershipCriteria(),
...     group_name=group_name,
...     title=group_title,
... )
>>> gtool = getToolByName(self.portal, 'portal_groups')
>>> group = gtool.getGroupById(group_name)
>>> group is not None

The group should be empty for now, since we don’t have any users matching the criteria:

>>> len(group.getAllGroupMemberIds())

Create some users and see what happens:

>>> user1 = self.add_user('ronaldo')
>>> user2 = self.add_user('romario')
>>> user3 = self.add_user('tostao')
>>> sorted(group.getGroupMemberIds())
['romario', 'ronaldo']
>>> group_name in user1.getGroups()
>>> group_name in user2.getGroups()
>>> group_name in user3.getGroups()

About the group title

Check this out:

>>> not group.getProperty('title')

It seems the title of the group is empty, even though we set the title to group_title when we called create_auto_group. It turns out prefs_groups_overview and other Plone templates do not call group.getProperty to get the group title. Even the AuthenticatedUsers group (created by Plone) does not have the title property set:

>>> not gtool.getGroupById('AuthenticatedUsers').getProperty('title')

The prefs_groups_overview template uses the following method to get the group title:

>>> search_results = self.portal.acl_users.searchGroups(id=group_name)
>>> search_results[0]['title'] == group_title

To change the title of an automatic group we should not call group.setProperty, it will not work. The correct way is change the description property of the correspondent PAS plugin (yes, it’s the description property, not title). Fortunately this package provides a function that makes this job easier:

>>> from collective.autogroup.utils import (set_auto_group_title,
...     get_auto_group_title)
>>> new_title = group_title + '_new'
>>> set_auto_group_title(self.acl_users, group_name, new_title)
>>> search_results = self.portal.acl_users.searchGroups(id=group_name)
>>> search_results[0]['title'] == new_title
>>> get_auto_group_title(self.acl_users, group_name) == new_title

It can also be done through ZMI.



0.1b1 - 15feb2010

  • First release.
Release History

Release History

This version
History Node


History Node


Download Files

Download Files

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

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date (12.4 kB) Copy SHA256 Checksum SHA256 Source Feb 15, 2010

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting