Source code for swimlane.core.fields.usergroup

from swimlane.core.resources.usergroup import UserGroup
from swimlane.exceptions import ValidationError
from .base import MultiSelectField


[docs]class UserGroupField(MultiSelectField): """Manages getting/setting users from record User/Group fields""" field_type = 'Core.Models.Fields.UserGroupField, Core' supported_types = [UserGroup] def __init__(self, *args, **kwargs): super(UserGroupField, self).__init__(*args, **kwargs) self._allowed_member_ids = [r['id'] for r in self.field_definition.get('members', [])]
[docs] def validate_value(self, value): """Validate user/group value is in set of field members for allowed User/Group restrictions""" super(UserGroupField, self).validate_value(value) if value and self._allowed_member_ids: if value.id not in self._allowed_member_ids: raise ValidationError( self.record, 'UserGroup ID `{}` not allowed in field `{}` allowed User/Group IDs: {}'.format( value.id, self.name, self._allowed_member_ids ) )
[docs] def set_swimlane(self, value): """Workaround for reports returning an empty usergroup field as a single element list with no id/name""" if value == [{"$type": "Core.Models.Utilities.UserGroupSelection, Core"}]: value = [] return super(UserGroupField, self).set_swimlane(value)
[docs] def cast_to_python(self, value): """Convert JSON definition to UserGroup object""" # v2.x does not provide a distinction between users and groups at the field selection level, can only return # UserGroup instances instead of specific User or Group instances if value is not None: value = UserGroup(self.record._swimlane, value) return value
[docs] def cast_to_swimlane(self, value): """Dump UserGroup back to JSON representation""" if value is not None: value = value.as_usergroup_selection() return value