def size(self): size = 0 for member in self.members: if IPerson.providedBy(member): size = size + 1 elif IGroup.providedBy(member): size = size + len(member.members) return size
def enforceMembershipConstraints(event): """Enforce membership constraints (IBeforeRelationshipEvent subscriber).""" # XXX look through all the IBeforeRelationshipEvent subscribers, # if there are any, and convert them to something different. if not IBeforeRelationshipEvent.providedBy(event): return if event.rel_type != URIMembership: return if ((event.role1, event.role2) != (URIMember, URIGroup) and (event.role1, event.role2) != (URIGroup, URIMember)): raise InvalidRelationship('Membership must have one member' ' and one group.') if IBaseResource.providedBy(event[URIMember]): raise InvalidRelationship("Resources cannot be members of a group.") if not IGroup.providedBy(event[URIGroup]): raise InvalidRelationship('Groups must provide IGroup.') if IGroup.providedBy(event[URIMember]): raise InvalidRelationship("Groups cannot be members of a group anymore.") if isTransitiveMember(event[URIGroup], event[URIMember]): raise InvalidRelationship('No cycles are allowed.')
def enforceMembershipConstraints(event): """Enforce membership constraints (IBeforeRelationshipEvent subscriber).""" # XXX look through all the IBeforeRelationshipEvent subscribers, # if there are any, and convert them to something different. if not IBeforeRelationshipEvent.providedBy(event): return if event.rel_type != URIMembership: return if ((event.role1, event.role2) != (URIMember, URIGroup) and (event.role1, event.role2) != (URIGroup, URIMember)): raise InvalidRelationship('Membership must have one member' ' and one group.') if IBaseResource.providedBy(event[URIMember]): raise InvalidRelationship("Resources cannot be members of a group.") if not IGroup.providedBy(event[URIGroup]): raise InvalidRelationship('Groups must provide IGroup.') if IGroup.providedBy(event[URIMember]): raise InvalidRelationship( "Groups cannot be members of a group anymore.") if isTransitiveMember(event[URIGroup], event[URIMember]): raise InvalidRelationship('No cycles are allowed.')