def test_reduce_permissions(): result = permissions.reduce_permissions(['read', 'write', 'admin']) assert_equal(result, 'admin') result2 = permissions.reduce_permissions(['read', 'write']) assert_equal(result2, 'write') result3 = permissions.reduce_permissions(['read']) assert_equal(result3, 'read')
def get_permission_to_node(self, node): """ Returns the permission this OSF group has to the given node :param node: Node object """ perms = get_group_perms(self.member_group, node) return reduce_permissions(perms) if perms else None
def test_reduce_permissions(): result = permissions.reduce_permissions([ permissions.READ_NODE, permissions.WRITE_NODE, permissions.ADMIN_NODE ]) assert_equal(result, permissions.ADMIN) result2 = permissions.reduce_permissions( [permissions.READ_NODE, permissions.WRITE_NODE]) assert_equal(result2, permissions.WRITE) result3 = permissions.reduce_permissions([permissions.READ_NODE]) assert_equal(result3, permissions.READ) result = permissions.reduce_permissions( [permissions.READ, permissions.WRITE, permissions.ADMIN]) assert_equal(result, permissions.ADMIN) result2 = permissions.reduce_permissions( [permissions.READ, permissions.WRITE]) assert_equal(result2, permissions.WRITE) result3 = permissions.reduce_permissions([permissions.READ]) assert_equal(result3, permissions.READ)
def serialize_simple_user_and_node_permissions(node, user): return { 'id': user._id, 'name': user.fullname, 'permission': reduce_permissions(node.get_permissions(user)) }
def serialize_user(user, node=None, admin=False, full=False, is_profile=False, include_node_counts=False): """ Return a dictionary representation of a registered user. :param User user: A User object :param bool full: Include complete user properties """ contrib = None if isinstance(user, Contributor): contrib = user user = contrib.user fullname = user.display_full_name(node=node) ret = { 'id': str(user._id), 'registered': user.is_registered, 'surname': user.family_name, 'fullname': fullname, 'shortname': fullname if len(fullname) < 50 else fullname[:23] + '...' + fullname[-23:], 'profile_image_url': user.profile_image_url(size=settings.PROFILE_IMAGE_MEDIUM), 'active': user.is_active, } if node is not None: if admin: flags = { 'visible': False, 'permission': 'read', } else: is_contributor_obj = isinstance(contrib, Contributor) flags = { 'visible': contrib.visible if is_contributor_obj else node.contributor_set.filter(user=user, visible=True).exists(), 'permission': get_contributor_permissions(contrib, as_list=False) if is_contributor_obj else reduce_permissions( node.get_permissions(user)), } ret.update(flags) if user.is_registered: ret.update({ 'url': user.url, 'absolute_url': user.absolute_url, 'display_absolute_url': user.display_absolute_url, 'date_registered': user.date_registered.strftime('%Y-%m-%d'), }) if full: # Add emails if is_profile: ret['emails'] = [ { 'address': each, 'primary': each.strip().lower() == user.username.strip().lower(), 'confirmed': True, } for each in user.emails.values_list('address', flat=True) ] + [{ 'address': each, 'primary': each.strip().lower() == user.username.strip().lower(), 'confirmed': False } for each in user.get_unconfirmed_emails_exclude_external_identity()] if user.is_merged: merger = user.merged_by merged_by = { 'id': str(merger._primary_key), 'url': merger.url, 'absolute_url': merger.absolute_url } else: merged_by = None ret.update({ 'activity_points': user.get_activity_points(), 'profile_image_url': user.profile_image_url(size=settings.PROFILE_IMAGE_LARGE), 'is_merged': user.is_merged, 'merged_by': merged_by, }) if include_node_counts: projects = user.nodes.exclude(is_deleted=True).filter( type='osf.node').get_roots() ret.update({ 'number_projects': projects.count(), 'number_public_projects': projects.filter(is_public=True).count(), }) return ret
def serialize_user(user, node=None, admin=False, full=False, is_profile=False, include_node_counts=False): """ Return a dictionary representation of a registered user. :param User user: A User object :param bool full: Include complete user properties """ contrib = None if isinstance(user, Contributor): contrib = user user = contrib.user fullname = user.display_full_name(node=node) ret = { 'id': str(user._id), 'registered': user.is_registered, 'surname': user.family_name, 'fullname': fullname, 'shortname': fullname if len(fullname) < 50 else fullname[:23] + '...' + fullname[-23:], 'profile_image_url': user.profile_image_url(size=settings.PROFILE_IMAGE_MEDIUM), 'active': user.is_active, } if node is not None: if admin: flags = { 'visible': False, 'permission': 'read', } else: is_contributor_obj = isinstance(contrib, Contributor) flags = { 'visible': contrib.visible if is_contributor_obj else node.contributor_set.filter(user=user, visible=True).exists(), 'permission': get_contributor_permissions(contrib, as_list=False) if is_contributor_obj else reduce_permissions(node.get_permissions(user)), } ret.update(flags) if user.is_registered: ret.update({ 'url': user.url, 'absolute_url': user.absolute_url, 'display_absolute_url': user.display_absolute_url, 'date_registered': user.date_registered.strftime('%Y-%m-%d'), }) if full: # Add emails if is_profile: ret['emails'] = [ { 'address': each, 'primary': each.strip().lower() == user.username.strip().lower(), 'confirmed': True, } for each in user.emails.values_list('address', flat=True) ] + [ { 'address': each, 'primary': each.strip().lower() == user.username.strip().lower(), 'confirmed': False } for each in user.get_unconfirmed_emails_exclude_external_identity() ] if user.is_merged: merger = user.merged_by merged_by = { 'id': str(merger._primary_key), 'url': merger.url, 'absolute_url': merger.absolute_url } else: merged_by = None ret.update({ 'activity_points': user.get_activity_points(), 'profile_image_url': user.profile_image_url(size=settings.PROFILE_IMAGE_LARGE), 'is_merged': user.is_merged, 'merged_by': merged_by, }) if include_node_counts: projects = user.nodes.exclude(is_deleted=True).filter(type='osf.node').get_roots() ret.update({ 'number_projects': projects.count(), 'number_public_projects': projects.filter(is_public=True).count(), }) return ret
def test_reduce_permissions_with_unknown_permission_raises_error(): with assert_raises(ValueError): permissions.reduce_permissions(['unknownpermission'])
def test_reduce_permissions_with_empty_list_raises_error(): with assert_raises(ValueError): permissions.reduce_permissions([])