from ..helpers import ResourceBase, FilteredIterableResource
from ..errors import ok_or_error, response_or_error
from ..compat import update_doc
[docs]class Users(ResourceBase, FilteredIterableResource):
@response_or_error
[docs] def add(self, name, password, displayName, emailAddress, addToDefaultGroup=True):
"""
Add a user, returns a dictionary containing information about the newly created user
"""
params = dict(name=name,
password=password,
displayName=displayName,
emailAddress=emailAddress,
addToDefaultGroup=addToDefaultGroup)
return self._client.post(self.url(), params=params)
@ok_or_error
[docs] def delete(self, user):
"""
Delete a user.
"""
return self._client.delete(self.url(), params=dict(name=user))
@response_or_error
[docs] def update(self, name, displayName=None, emailAddress=None):
"""
Update the user information, and return the updated user info.
None is used as a sentinel value, use empty string if you mean to clear.
"""
data = dict(name=name)
if displayName is not None:
data['displayName'] = displayName
if data is not None:
data['emailAddress'] = emailAddress
return self._client.put(self.url(), data)
@ok_or_error
[docs] def credentials(self, name, new_password):
"""
Update a user's password.
"""
data = dict(name=name, password=new_password, passwordConfirm=new_password)
return self._client.put(self.url(), data)
@ok_or_error
[docs] def add_group(self, user, group):
"""
Add the given user to the given user.
"""
return self._client.post(self.url("/add-group"), dict(context=user, itemName=group))
@ok_or_error
[docs] def remove_group(self, user, group):
"""
Remove the given user from the given group.
"""
return self._client.post(self.url("/remove-group"), dict(context=user, itemName=group))
[docs] def more_members(self, user, filter=None):
"""
Retrieves a list of groups the specified user is a member of.
filter: if specified only groups with names containing the supplied string will be returned
"""
params = dict(context=user)
if filter:
params['filter'] = filter
return self.paginate("/more-members", params)
[docs] def more_non_members(self, user, filter=None):
"""
Retrieves a list of groups that the specified user is not a member of
filter: if specified only groups with names containing the supplied string will be returned
"""
params = dict(context=user)
if filter:
params['filter'] = filter
return self.paginate("/more-non-members", params)
update_doc(Users.all, """
Returns an iterator that will walk all the users, paginating as necessary.
filter: return only users with usernames, display name or email addresses containing the supplied string
""")