Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Overview

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
True

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

>>> len(group.getAllGroupMemberIds())
0

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()
True
>>> group_name in user2.getGroups()
True
>>> group_name in user3.getGroups()
False

About the group title

Check this out:

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

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')
True

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
True

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
True
>>> get_auto_group_title(self.acl_users, group_name) == new_title
True

It can also be done through ZMI.

Credits

Changelog

0.1b1 - 15feb2010

  • First release.

Release files for collective.autogroup 0.1b1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for collective.autogroup 0.1b1
File Size Uploaded
collective.autogroup-0.1b1.zip 12.4 kB Details

Release files / collective.autogroup-0.1b1.zip

Download URL collective.autogroup-0.1b1.zip
Size 12.4 kB
Tags Source
SHA-256 checksum
How to use checksums
1f41a5351448206b469b2cb02aafa586ac44f946744098c279ee484b0dbf604d
BLAKE2b-256 checksum
How to use checksums
73ace4d24003ccce94d00685ff2a5dc1c841b334c2105cd8f440328e76b54723
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.1b1 This release

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page