def get_public_projects(uid=None, user=None): user = user or OSFUser.load(uid) # In future redesign, should be limited for users with many projects / components node_ids = (Node.find_for_user(user, PROJECT_QUERY).filter( is_public=True).get_roots().values_list('id', flat=True)) nodes = ( Node.objects.filter(id__in=set(node_ids)) # Defer some fields that we don't use for rendering node lists .defer('child_node_subscriptions', 'date_created', 'deleted_date', 'description', 'file_guid_to_share_uuids').include( 'guids', 'contributor__user__guids', '_parents__parent__guids').order_by('-date_modified')) return [ serialize_node_summary(node=node, auth=Auth(user), show_path=False) for node in nodes ]
def get_public_projects(uid=None, user=None): user = user or User.load(uid) # In future redesign, should be limited for users with many projects / components node_ids = ( Node.find_for_user(user, PROJECT_QUERY) .filter(is_public=True) .get_roots() .values_list('id', flat=True) ) nodes = ( Node.objects.filter(id__in=set(node_ids)) # Defer some fields that we don't use for rendering node lists .defer('child_node_subscriptions', 'date_created', 'deleted_date', 'description', 'file_guid_to_share_uuids') .include('guids', 'contributor__user__guids', '_parents__parent__guids') .order_by('-date_modified') ) return [ serialize_node_summary(node=node, auth=Auth(user), show_path=False) for node in nodes ]
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 """ from website.project.utils import PROJECT_QUERY contrib = None if isinstance(user, Contributor): contrib = user user = contrib.user fullname = user.display_full_name(node=node) ret = { 'id': str(user._primary_key), 'registered': user.is_registered, 'surname': user.family_name, 'fullname': fullname, 'shortname': fullname if len(fullname) < 50 else fullname[:23] + '...' + fullname[-23:], 'gravatar_url': gravatar( user, use_ssl=True, size=settings.PROFILE_IMAGE_MEDIUM ), 'active': user.is_active, } if node is not None: if admin: flags = { 'visible': False, 'permission': 'read', } else: flags = { 'visible': contrib.visible if isinstance(contrib, Contributor) else node.contributor_set.filter(user=user, visible=True).exists(), 'permission': 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 ] + [ { '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 projects = Node.find_for_user(user, PROJECT_QUERY).get_roots() ret.update({ 'activity_points': user.get_activity_points(), 'gravatar_url': gravatar( user, use_ssl=True, size=settings.PROFILE_IMAGE_LARGE ), 'is_merged': user.is_merged, 'merged_by': merged_by, }) if include_node_counts: 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 """ from website.project.utils import PROJECT_QUERY contrib = None if isinstance(user, Contributor): contrib = user user = contrib.user fullname = user.display_full_name(node=node) ret = { 'id': str(user._primary_key), 'registered': user.is_registered, 'surname': user.family_name, 'fullname': fullname, 'shortname': fullname if len(fullname) < 50 else fullname[:23] + '...' + fullname[-23:], 'gravatar_url': gravatar( user, use_ssl=True, size=settings.PROFILE_IMAGE_MEDIUM ), 'active': user.is_active, } if node is not None: if admin: flags = { 'visible': False, 'permission': 'read', } else: flags = { 'visible': contrib.visible if isinstance(contrib, Contributor) else node.contributor_set.filter(user=user, visible=True).exists(), 'permission': 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 projects = Node.find_for_user(user, PROJECT_QUERY).get_roots() ret.update({ 'activity_points': user.get_activity_points(), 'gravatar_url': gravatar( user, use_ssl=True, size=settings.PROFILE_IMAGE_LARGE ), 'is_merged': user.is_merged, 'merged_by': merged_by, }) if include_node_counts: ret.update({ 'number_projects': projects.count(), 'number_public_projects': projects.filter(is_public=True).count(), }) return ret