Example #1
0
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 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
Example #4
0
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)
Example #5
0
def serialize_simple_user_and_node_permissions(node, user):
    return {
        'id': user._id,
        'name': user.fullname,
        'permission': reduce_permissions(node.get_permissions(user))
    }
Example #6
0
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
Example #7
0
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([])
Example #10
0
def test_reduce_permissions_with_unknown_permission_raises_error():
    with assert_raises(ValueError):
        permissions.reduce_permissions(['unknownpermission'])
Example #11
0
def test_reduce_permissions_with_empty_list_raises_error():
    with assert_raises(ValueError):
        permissions.reduce_permissions([])
Example #12
0
def serialize_simple_user_and_node_permissions(node, user):
    return {
        'id': user._id,
        'name': user.fullname,
        'permission': reduce_permissions(node.get_permissions(user))
    }