fix: integration doctest/ MemberRegistrationManager groups param

This commit is contained in:
hplattner 2012-04-25 13:52:41 +02:00
parent 3a6b61f71c
commit c74af2b960
2 changed files with 32 additions and 9 deletions

View file

@ -231,7 +231,7 @@ Extracting Document Properties from MS Office Files
>>> path = os.path.join(dataDir, 'office') >>> path = os.path.join(dataDir, 'office')
>>> fn = os.path.join(path, 'example.docx') >>> fn = os.path.join(path, 'example.docx')
>>> os.path.getsize(fn) >>> os.path.getsize(fn)
20337L 20337...
>>> officeFile = addAndConfigureObject(resources, Resource, 'test.docx', >>> officeFile = addAndConfigureObject(resources, Resource, 'test.docx',
... title=u'Example Word File', resourceType=tOfficeFile, ... title=u'Example Word File', resourceType=tOfficeFile,

View file

@ -65,20 +65,36 @@ class MemberRegistrationManager(object):
self.context = context self.context = context
def register(self, userId, password, lastName, firstName=u'', def register(self, userId, password, lastName, firstName=u'',
groups=[], useExisting=False, **kw): groups=[], useExisting=False, pfName=None, **kw):
concepts = self.context.getConceptManager() concepts = self.context.getConceptManager()
personType = adapted(concepts[self.person_typeName]) personType = adapted(concepts[self.person_typeName])
options = IOptions(personType) options = IOptions(personType)
pfName = options(self.principalfolder_key, if pfName is None:
(self.default_principalfolder,))[0] pfName = options(self.principalfolder_key,
# step 1: create an internal principal in the loops principal folder: (self.default_principalfolder,))[0]
self.createPrincipal(pfName, userId, password, lastName, firstName)
if len(groups)==0:
groups = options(self.groups_key, ())
self.setGroupsForPrincipal(pfName, userId, groups=groups)
self.createPersonForPrincipal(pfName, userId, lastName, firstName,
useExisting, **kw)
def createPrincipal(self, pfName, userId, password, lastName,
firstName=u'', groups=[], useExisting=False,
overwrite=False, **kw):
pFolder = getPrincipalFolder(self.context, pfName) pFolder = getPrincipalFolder(self.context, pfName)
if IPersonBasedAuthenticator.providedBy(pFolder): if IPersonBasedAuthenticator.providedBy(pFolder):
pFolder.setPassword(userId, password) pFolder.setPassword(userId, password)
else: else:
title = firstName and ' '.join((firstName, lastName)) or lastName title = firstName and ' '.join((firstName, lastName)) or lastName
principal = InternalPrincipal(userId, password, title) principal = InternalPrincipal(userId, password, title)
if useExisting: if overwrite:
if userId in pFolder:
principal = pFolder[userId]
principal.password = password
else:
pFolder[userId] = principal
elif useExisting:
if userId not in pFolder: if userId not in pFolder:
pFolder[userId] = principal pFolder[userId] = principal
else: else:
@ -86,8 +102,9 @@ class MemberRegistrationManager(object):
return dict(fieldName='loginName', error='duplicate_loginname') return dict(fieldName='loginName', error='duplicate_loginname')
else: else:
pFolder[userId] = principal pFolder[userId] = principal
# step 2 (optional): assign to group(s)
groups = options(self.groups_key, ()) def setGroupsForPrincipal(self, pfName, userId, groups=[]):
pFolder = getPrincipalFolder(self.context, pfName)
for groupInfo in groups: for groupInfo in groups:
names = groupInfo.split(':') names = groupInfo.split(':')
if len(names) == 1: if len(names) == 1:
@ -101,7 +118,13 @@ class MemberRegistrationManager(object):
members = list(group.principals) members = list(group.principals)
members.append(pFolder.prefix + userId) members.append(pFolder.prefix + userId)
group.principals = members group.principals = members
# step 3: create a corresponding person concept:
def createPersonForPrincipal(self, pfName, userId, lastName, firstName=u'',
useExisting=False, **kw):
concepts = self.context.getConceptManager()
personType = adapted(concepts[self.person_typeName])
pFolder = getPrincipalFolder(self.context, pfName)
title = firstName and ' '.join((firstName, lastName)) or lastName
name = baseId = 'person.' + userId name = baseId = 'person.' + userId
if useExisting and name in concepts: if useExisting and name in concepts:
person = concepts[name] person = concepts[name]